【发布时间】:2013-01-25 10:07:28
【问题描述】:
我使用 SDL + OpenGL 制作了这个小游戏。游戏在我的电脑上运行良好,但在朋友的电脑上,他只是得到白框和黑屏。
我认为这可能是一个问题,因为我的纹理在维度上不是 2 的幂。我无法更改纹理尺寸,因此经过一番搜索,我发现使用 GL_ARB_texture_non_power_of_two 会以某种方式强制(?)npot 纹理。但是,令我惊讶的是,我的电脑上出现了白框和其他东西,而我的朋友们甚至都没有。我无法理解问题所在。任何帮助将不胜感激。
代码:
numColors = images[i]->format->BytesPerPixel;
if ( numColors == 4 )
{
if (images[i]->format->Rmask == 0x000000FF)
textureFormat = GL_RGBA;
else
textureFormat = GL_BGRA;
}
else if ( numColors == 3 )
{
if (images[i]->format->Rmask == 0x000000FF)
textureFormat = GL_RGBA;
else
textureFormat = GL_BGRA;
}
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glGenTextures( 1, &textures[i] );
glBindTexture( GL_ARB_texture_non_power_of_two, textures[i] );
glTexParameteri(GL_ARB_texture_non_power_of_two,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_ARB_texture_non_power_of_two,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_ARB_texture_non_power_of_two, 0, numColors, images[i]->w, images[i]->h, 0, textureFormat, GL_UNSIGNED_BYTE, images[i]->pixels);
【问题讨论】:
-
白盒 PC 是否支持 NPOT 纹理?那个扩展只是
-
抱歉,无意中发现了键盘。 NPOT 不是您可以启用的,它是 GPU 支持(或不支持)的东西。那么,故障 GPU 的扩展字符串中是否列出了 NPOT?
-
atm 无法找到这一点。输出图像来自我自己的电脑,一张使用 GL_TEXTURE_2D(正确的一张),另一张使用 GL_ARB_texture_non_power_of_two(白框)。您为什么认为使用此 ARB 扩展会导致问题?
-
你不能“使用” GL_ARB_texture_non_power_of_two 而不是 GL_TEXTURE_2D?!?!请发布一些代码!
-
@tf61 GL_ARB_texture_non_power_of_two 不是纹理目标,将其用作枚举会产生 GL 错误,因此您的所有纹理调用都将被忽略。使用 glGetError() 查看错误。
标签: opengl textures texture-mapping