OpenGL纹理随机未显示

Posted

技术标签:

【中文标题】OpenGL纹理随机未显示【英文标题】:OpenGL texture randomly not shown 【发布时间】:2010-04-27 19:02:47 【问题描述】:

我的 C++ OpenGL 应用程序遇到了一个非常非常奇怪 的问题。

我只是加载一个纹理并将其应用到二次曲面:

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

然后

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex);
gluQuadricDrawStyle(quad,GLU_FILL);
gluQuadricTexture(quad,GL_TRUE);
gluCylinder(quad,1,0,2,20,1);
glDisable(GL_TEXTURE_2D);

现在:10 次中有 9 次完美运行,但有时纹理未显示(二次曲面保持白色)。

image 已正确加载,所以应该是 OpenGL 的问题。我也尝试了几种不同的图像。总是GL_NO_ERROR

有什么想法吗?快把我逼疯了……

【问题讨论】:

有点傻但是在它不加载的时候,如果你最小化然后最大化窗口,它会出现吗? 不,它不会加载,即使我最小化/最大化。 你能在不同的电脑或不同的驱动程序上测试它吗? “未显示纹理”是指重新启动应用程序时吗? 【参考方案1】:

找到 :) 在复制构造函数中未正确重新分配的是 GLint texture 成员。

但是,我仍然不明白为什么它有时会起作用......

【讨论】:

【参考方案2】:

您使用的代码似乎有效。你有没有……

尝试使用简单的四边形而不是二边形 确保image 填写正确 已验证 tex 未在其他地方更改 确保没有其他程序同时使用 opengl 重新启动您的计算机;)

【讨论】:

以上是关于OpenGL纹理随机未显示的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 纹理未显示的常见故障排除步骤是啥?

纹理未正确显示 - 可能坐标是错误的 OpenGL、C++

OpenGL纹理在四边形上未对齐

OpenGL 片段着色器未写入 fbo 颜色缓冲区

OpenGL:随机调用 OpenGL 函数时崩溃

OpenGL:纹理加载但未应用