OpenGL3两组着色器,纹理显示为黑色



我最近成功地制作了一个带有GL_TEXTURE_RETANGLE的小型测试应用程序。现在我正试图将它集成到我的大型项目中,但当我在render函数中调用glBindTexture(GL_TEXTURE_RETANGLE,_tex_id[0])时,它会导致GL_INVALID_OPERATION​错误纹理图像有时会显示几分之一秒,然后变黑并保持黑色。

我正试图通过使用两组顶点和片段着色器来实现这一点,一组用于3D场景,另一组用于2D覆盖,但我以前从未尝试过,所以我不知道这是导致错误的原因,还是我应该以不同的方式进行处理。着色器的编译和链接都很好。

任何见解都将不胜感激,如果看到一些代码会有所帮助,请告诉我,我会发布一些(尽管我认为这可能太多了,任何人都无法合理地浏览)。

编辑:gDEBugger在调用glBindTexture()时中断,当单击断点时,属性窗口显示我的其他纹理之一(由3D场景的着色器加载的纹理之一)的图片,它显示它正在尝试加载纹理编号1,但我知道这个编号已经用于绘制属性窗口中显示的相同3D场景的纹理。。。为什么glGenTextures()会给我重叠的纹理id号?这是正常的还是问题的一部分?

黑色纹理是由于我没有将一些顶点着色器输入(法线)转发到片段着色器,即使我没有将法线用于2D覆盖着色器中的任何内容。一旦我为所有输入添加了输出,并将它们转发到片段着色器,纹理就不再是黑色的,但在几分之一秒后它仍在消失。这是因为我在渲染函数的末尾调用了glBindTexture(GL_TEXTURE_RETANGLE,0),希望它能清理一些状态。。。这显然是错误的做法,因为删除该调用会导致2D纹理停留在屏幕上。此外,在纹理设置阶段,使用GL_TEXTURE_RETANGLE目标调用glBindTexture()似乎有效,但在渲染GL_TEXTURE_RECTANGLE目标时,会导致GL_INVALID_OPERATION​错误仅在渲染函数中将目标更改为GL_TEXTURE_2D使错误消失,现在一切似乎都很好。

最新更新