Я работаю с SDL и OpenGL, создавая довольно простое приложение. Я создал базовую функцию рендеринга текста, которая отображает сгенерированную текстуру в квад для каждого персонажа. Эта текстура визуализируется из растрового изображения каждого символа.
Растровое изображение довольно маленькое, около 800x16 пикселей. Он работает абсолютно нормально на моем настольном компьютере и ноутбуке, как в виртуальной машине, так и вне ее (а также в Windows и Linux).
Теперь я пытаюсь сделать это на другом компьютере, и текст становится искаженным - кажется, что компьютер не может справиться с очень простой вещью, подобной этой. Чтобы узнать, связано ли это с операционной системой, я установил VirtualBox и проверил его на виртуальной машине - но результат еще хуже! Вместо рендеринга чего-либо (хотя и искаженного), он просто отображает простой белый прямоугольник.
Почему это происходит, и есть ли способ ее решить?
Некоторый код - как я инициализирую текстуру:
glGenTextures(1, &fontRef);
glBindTexture(GL_TEXTURE_2D, iFont);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, FNT_IMG_W, FNT_IMG_H, 0,
GL_RGB, GL_UNSIGNED_BYTE, MY_FONT);
Выше MY_FONT
- массив без знака (дамп необработанного изображения из GIMP). Когда я рисую персонажа:
GLfloat ix = c * (GLfloat) FNT_CHAR_W;
// We just map each corner of the texture to a new vertex.
glTexCoord2d(ix, FNT_CHAR_H); glVertex3d(x, y, 0);
glTexCoord2d(ix + FNT_CHAR_W, FNT_CHAR_H); glVertex3d(x + iCharW, y, 0);
glTexCoord2d(ix + FNT_CHAR_W, 0); glVertex3d(x + iCharW, y + iCharH, 0);
glTexCoord2d(ix, 0); glVertex3d(x, y + iCharH, 0);