C++ OpenGL:glTexImage2D与GlgenList&;冲突;电话名单?

C++ OpenGL:glTexImage2D与GlgenList&;冲突;电话名单?,c++,c,opengl,C++,C,Opengl,我有一个简单的OpenGL应用程序,其中屏幕上显示了两个对象: 1) 粒子系统,其中每个粒子都使用glTexImage2D()调用进行纹理贴图。在drawEvent函数中,我将其绘制为带有4个glVertex3f的GL_三角形带。 2) 从对象文件加载的三维文本,其中每个点使用glNewList/glgenlist加载,并将每个点存储为glVertex。我是通过打电话给glCallList来画的 问题是,只要我调用glTexImage2D()用.bmp文件映射我的粒子,3D文本就不会显示在屏幕上

我有一个简单的OpenGL应用程序,其中屏幕上显示了两个对象:

1) 粒子系统,其中每个粒子都使用glTexImage2D()调用进行纹理贴图。在drawEvent函数中,我将其绘制为带有4个glVertex3f的GL_三角形带。
2) 从对象文件加载的三维文本,其中每个点使用glNewList/glgenlist加载,并将每个点存储为glVertex。我是通过打电话给glCallList来画的

问题是,只要我调用glTexImage2D()用.bmp文件映射我的粒子,3D文本就不会显示在屏幕上。粒子看起来很好。(这不是预期的)

如果我不调用glTexImage2D,我会同时看到3D文本和粒子系统。在这种情况下,粒子系统看起来很可怕,因为我没有使用任何纹理贴图。(这是预期的)

有人知道为什么使用call list和glTexImage2D可能会相互冲突吗

编辑我也忘了提到:我确实称之为glBindTexture(GL_TEXTURE_2D,this->TEXTURE);在调用粒子系统之前在drawLoop内部


EDIT2我只在系统启动时调用一次glTexImage2D()(当我对位图进行纹理映射时)

这可能根本不是glTexImage2D和glCallList的冲突。你的纹理贴图可以吗?你把纹理坐标设置好了吗?尝试检查顶点到纹理坐标是否不匹配。

glTexImage2D将纹理上载到视频ram(简化)

如果OpenGL允许您在列表中放置一个glTexImage2D调用,那么它也必须在列表中存储像素数据。现在,如果执行列表,会发生什么?您可以将相同的图像数据上传到整个增益的相同纹理中

这毫无意义,因此被忽略了

如果要在绘制调用之间更改纹理,请使用glbindtexture。该调用将设置当前纹理。速度快得多


关于通过glTexImage2D上传的图像:对于每个纹理只执行一次。无论是在程序开始时(如果较小),还是每次从磁盘加载新内容时。

我已经解决了这个问题。 在使用GL_TEXTURE_2D之前,需要设置enable function=>glEnable(GL_TEXTURE_2D);
在使用glCallList之前,还需要设置disable function=>glDisable(GL\u TEXTURE\u 2D)

纹理贴图看起来适合我的粒子系统。这两种方法在单独实例化时可以很好地工作。只有当我想让它们都显示在同一个屏幕上时,它才不起作用。hi nils..是的,我只调用glTextImage2D一次(在程序开始时)。如果这样做,为什么要将其放入列表中?hi..对不起,我没有解释清楚。我把我所有的3D字体都放进了一个列表。对于粒子系统,我使用glGenTextures(1,&这个->纹理);glBindTexture(GL_TEXTURE_2D,此->纹理);glTexParameterf(GL_纹理2D、GL_纹理包裹S、GL_重复);glTexParameterf(GL_纹理、GL_纹理、GL_包裹、GL_重复);glTexParameterf(GL_TEXTURE_2D、GL_TEXTURE_MAG_FILTER、GL_LINEAR);glTexParameterf(GL_纹理2D、GL_纹理最小过滤器、GL_线性);