为什么我的OpenGL应用程序中的纹理渲染不正确?

时间:2011-08-12 16:49:44

标签: c++ opengl sdl textures texture-mapping

我正在使用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);

1 个答案:

答案 0 :(得分:2)

这听起来好像你正在使用的机器的显卡只支持两种纹理的功能(即16,32,64 ......)。 800x16肯定不适用于这样的gfx卡。

您可以使用 glGet ARB_texture_non_power_of_two 来检查gfx卡是否支持它。

或者使用GLEW为您进行检查。