Opengl 将新纹理加载到已定义的纹理名称中

Opengl 将新纹理加载到已定义的纹理名称中,opengl,textures,Opengl,Textures,我有一个OpenGl程序,其中我使用纹理显示图像。我想能够加载一个新的图像显示 在我的Init函数中,我调用: Gl.glGenTextures(1, mTextures); 因为一次只显示一个图像,所以我对每个图像使用相同的纹理名称 每次加载新图像时,我调用以下命令: Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]); Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX

我有一个OpenGl程序,其中我使用纹理显示图像。我想能够加载一个新的图像显示

在我的Init函数中,我调用:

Gl.glGenTextures(1, mTextures);
因为一次只显示一个图像,所以我对每个图像使用相同的纹理名称

每次加载新图像时,我调用以下命令:

Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]);

Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX, mTexSizeY, 0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, mTexBuffer);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);   
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
第一个图像将按预期显示。但是,在第一次加载之后,所有图像都显示为全黑


我做错了什么?

何时使用这些纹理提交几何体?我假设这是与纹理加载交错的,尽管您没有显示这一点。当然,如果要用不同的图像替换纹理名称,则根本不需要使用纹理名称,是吗?当需要设置新纹理时,您可以执行
gltextmage2d
调用,然后根据需要使用该调用,完全不涉及
glBindTexture()


当然,一件显而易见的事情是插入错误检查代码,OpenGL在操作失败时存储一个错误代码,并且在应用程序读取之前不会覆盖该代码。有关详细信息,请参阅。

您正在寻找的函数是“GLCOPYTEXAGE2D”或“glCopyTexSubImage2D”。

我认为问题不在于您显示的代码。您需要提供有关如何使用纹理绘制的更多信息,以及传递到
glTexImage2D
的纹理数据的外观。您确定在调用
glTexImage2D
时它仍然有效吗?

是否在绘制后
glu禁用glu纹理2D
?放置
glColor4f(1,1,1,1)如果禁用2d纹理,则至少应看到白色矩形。这将帮助您找到问题所在。

谢谢您的建议。加载图像后,我会发布重画。我试过调用glBindTexture一次,加载图像时只调用glTexImage2d。这没用。我还在glTexImage2d之后和我的绘图代码之后添加了对glGetError的调用,无错误在mTexture上调用GenTextures,在mTexture上调用BindTextures,但不带“s”。。。我希望问题不是这样:)