2

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

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- 绘制一个顶点。

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

4

2 回答 2

6

来自OpenGL 文档

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

glBindTexture你应该在外面提取glBegin......glEnd

于 2011-08-11T07:17:11.080 回答
0

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

于 2011-08-11T07:16:03.523 回答