我正在使用SDL和OpenGL,创建一个相当简单的应用程序。我创建了一个基本的文本渲染功能,它将生成的纹理映射到每个角色的四边形。此纹理从每个字符的位图呈现。
位图相当小,大约800x16像素。它在我的台式机和笔记本电脑上运行绝对正常,无论是进出VM还是出自Windows(和Windows)。
现在,我正在另一台计算机上尝试它,并且文本变得全乱 - 似乎计算机无法处理这样一个非常基本的东西。为了查看它是否是由操作系统引起的,我安装了VirtualBox并在VM中对其进行了测试 - 但结果更糟!
,它只是呈现一个纯白色的盒子,而不是呈现任何东西(尽管是乱码)为什么会发生这种情况,有没有办法解决它?
一些代码 - 我如何初始化纹理:
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
是一个unsigned char数组(来自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);
答案 0 :(得分:2)
这听起来好像你正在使用的机器的显卡只支持两种纹理的功能(即16,32,64 ......)。 800x16肯定不适用于这样的gfx卡。
您可以使用 glGet 与 ARB_texture_non_power_of_two 来检查gfx卡是否支持它。
或者使用GLEW为您进行检查。