Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL3两套着色器,纹理显示黑色_C++_Opengl_Opengl 3 - Fatal编程技术网

C++ OpenGL3两套着色器,纹理显示黑色

C++ OpenGL3两套着色器,纹理显示黑色,c++,opengl,opengl-3,C++,Opengl,Opengl 3,我最近成功地制作了一个带有GL_纹理_矩形的小测试应用程序。现在我正试图将它集成到我的更大的项目中,但是当我在渲染函数中调用glBindTexture(GL\u TEXTURE\u RECTANGLE,\u tex\u id[0])时,它会导致GL\u无效的\u操作​ 错误。纹理图像有时会显示几秒钟,然后变为黑色并保持黑色 我试图通过使用两组顶点和片段着色器来实现这一点,一组用于3D场景,一组用于2D覆盖,但我以前从未尝试过,所以我不知道这是否是导致错误的原因,或者我是否应该以不同的方式来实现这

我最近成功地制作了一个带有GL_纹理_矩形的小测试应用程序。现在我正试图将它集成到我的更大的项目中,但是当我在渲染函数中调用glBindTexture(GL\u TEXTURE\u RECTANGLE,\u tex\u id[0])时,它会导致GL\u无效的\u操作​ 错误。纹理图像有时会显示几秒钟,然后变为黑色并保持黑色

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

任何洞察都将不胜感激,如果它有助于查看一些代码,请让我知道,我将发布其中一些(尽管我认为这可能太多了,任何人都无法合理地浏览)


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

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