Я пытался визуализировать текст в окне openGL, используя SDL и библиотеку SDL_TTF в Windows XP, VS2010.
Версии:
SDL версия 1.2.14
SDL TTF devel 1.2.10
openGL (версии не менее 2-3 лет).
Я успешно создал окно openGL с использованием SDL / SDL_image и могу без проблем отображать на нем линии / многоугольники.
Однако, переходя к тексту, кажется, что в моей текущей программе есть какой-то недостаток, и я пытаюсь получить следующий результат при попытке этот код здесь
дляте, кто не хочет вставлять здесь, являются только ключевыми сегментами кода:
void drawText(char * text) {
glLoadIdentity();
SDL_Color clrFg = {0,0,255,0}; // set colour to blue (or 'red' for BGRA)
SDL_Surface *sText = TTF_RenderUTF8_Blended( fntCourier, text, clrFg );
GLuint * texture = create_texture(sText);
glBindTexture(GL_TEXTURE_2D, *texture);
// draw a polygon and map the texture to it, may be the source of error
glBegin(GL_QUADS); {
glTexCoord2i(0, 0); glVertex3f(0, 0, 0);
glTexCoord2i(1, 0); glVertex3f(0 + sText->w, 0, 0);
glTexCoord2i(1, 1); glVertex3f(0 + sText->w, 0 + sText->h, 0);
glTexCoord2i(0, 1); glVertex3f(0, 0 + sText->h, 0);
} glEnd();
// free the surface and texture, removing this code has no effect
SDL_FreeSurface( sText );
glDeleteTextures( 1, texture );
}
сегмент 2:
// create GLTexture out of SDL_Surface
GLuint * create_texture(SDL_Surface *surface) {
GLuint texture = 0;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
// The SDL_Surface appears to have BGR_A formatting, however this ends up with a
// white rectangle no matter which colour i set in the previous code.
int Mode = GL_RGB;
if(surface->format->BytesPerPixel == 4) {
Mode = GL_RGBA;
}
glTexImage2D(GL_TEXTURE_2D, 0, Mode, surface->w, surface->h, 0, Mode,
GL_UNSIGNED_BYTE, surface->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return &texture;
}
Есть ли очевидный фрагмент кода, который мне не хватает?
Спасибоза любую помощь по этому вопросу.
Я пытаюсь изучать openGL и SDL уже 3 дня, поэтому, пожалуйста, прости любую дезинформацию с моей стороны.
РЕДАКТИРОВАТЬ:
Я заметил, что используя
TTF_RenderUTF8_Shaded
TTF_RenderUTF8_Solid
TВыделите исключение нулевого указателя, означающее, что в самой функции визуализации текста есть ошибка (я подозреваю), я не знаю, как это означает, что TTF_RenderUTF8_Blended
возвращает красный квадрат, но я подозреваю, что все проблемы связаны с этим.