Проблема с совместной работой SDL_TTF и OPENGL

Для игры, над которой я работаю, я надеюсь использовать OpenGL для большого количества графики и SDL_TTF для текста. Я могу заставить обоих работать, но не одновременно. Вот мой код (основан на Lazy Foo):

#include "SDL/SDL.h"#include "SDL/SDL_ttf.h"#include "GL/gl.h"
const bool useOpenGl = true;

//The surfaces
SDL_Surface *message = NULL;
SDL_Surface *screen = NULL;

//The event structure
SDL_Event event;

//The font that's going to be used
TTF_Font *font = NULL;

//The color of the font
SDL_Color textColor = {255, 255, 255};

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL)
{
//Holds offsets
SDL_Rect offset;

//Get offsets
offset.x = x;
offset.y = y;

//Blit
SDL_BlitSurface(source, clip, destination, &offset);
}

bool init()
{
SDL_Init (SDL_INIT_EVERYTHING);
if (useOpenGl)
{
screen = SDL_SetVideoMode (1280, 720, 32, SDL_SWSURFACE | SDL_OPENGL); //With SDL_OPENGL flag only opengl is sceen, without only text is
} else {
screen = SDL_SetVideoMode (1280, 720, 32, SDL_SWSURFACE);
}

TTF_Init();

SDL_WM_SetCaption ("TTF Not Working With OpenGL", NULL);

if (useOpenGl)
{
glClearColor(1.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, screen->w, screen->h, 1.0, -1.0, 1.0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

return true;
}

bool load_files()
{
font = TTF_OpenFont ("arial.ttf", 28);

return true;
}

void clean_up()
{
SDL_FreeSurface (message);

TTF_CloseFont (font);
TTF_Quit();

SDL_Quit();
}

int main(int argc, char* args[])
{
//Quit flag
bool quit = false;

init();
load_files();

if (useOpenGl)
{
glClear(GL_COLOR_BUFFER_BIT); //clearing the screen
glPushMatrix();glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(0, 0);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(1280, 0);
glColor3f(0.0, 0.0, 1.0);
glVertex2f(1280, 720);
glColor4f(0.5, 0.5, 1.0, 0.1);
glVertex2f(0, 720);
glEnd();

glPopMatrix();
glFlush();
}

//Render the text
message = TTF_RenderText_Solid (font, "The quick brown fox jumps over the lazy dog", textColor);

//Apply the images to the screen
apply_surface (0, 150, message, screen);

//I'm guessing this is where the problem is coming from
SDL_GL_SwapBuffers();
SDL_Flip (screen);while (quit == false)
{
while (SDL_PollEvent (&event))
{
if (event.type == SDL_QUIT)
{
quit = true;
}
}
}

clean_up();

return 0;
}

Если переменная useOpenGl установлено в false, программа будет использовать только SDL_TTF, если он установлен в true, он будет использовать оба SDL_TTF и OpenGL.
Похоже, из-за того, что я поиграю с этим, проблема в том, использую ли я флаг «SDL_OPENGL» при создании окна.

0

Решение

SDL_TTF использует программный рендеринг и не совместим с режимом OpenGL.

Возможно, вам придется искать другую библиотеку, такую ​​как FTGL или же FreeType-Г.Л..

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]