关于glBindTexture的问题

时间:2011-08-11 07:11:41

标签: opengl tao

这是我用来绘制精灵的方法:

public void DrawSprite(Sprite sprite)
        {
            Gl.glBegin(Gl.GL_TRIANGLES);
            {
                for (int i = 0; i < Sprite.VertexAmount; i++)
                {
                    Gl.glBindTexture(Gl.GL_TEXTURE_2D, sprite.Texture.Id);
                    DrawImmediateModeVertex(
                    sprite.VertexPositions[i],
                    sprite.VertexColors[i],
                    sprite.VertexUVs[i]);
                }
            }
            Gl.glEnd();
        }

DrawImmediateModeVertex - 绘制一个顶点。

我应该从for循环中获取Gl.glBindTexture吗?当我渲染纹理时也会发生奇怪的事情,即使我提供了具有不同纹理ID的精灵,每次都会绘制一个相同的纹理。

2 个答案:

答案 0 :(得分:6)

来自OpenGL documentation

  

如果在其间执行glBindTexture,则生成GL_INVALID_OPERATION   glBegin的执行和glEnd的相应执行。

您应该在glBindTexture ... glBegin

之外提取glEnd

答案 1 :(得分:0)

是的,将绑定移动到循环外部,无需重复绑定相同的纹理。