【问题标题】:Question about glBindTexture关于 glBindTexture 的问题
【发布时间】:2011-08-11 07:11:40
【问题描述】:

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

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 的精灵,但每次只绘制一个相同的纹理。

【问题讨论】:

    标签: opengl tao


    【解决方案1】:

    来自OpenGL documentation

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

    你应该在glBegin...glEnd对之外提取glBindTexture

    【讨论】:

    • 这个,而且你最好不要为每个精灵根本绑定一个新的纹理。绑定纹理需要在驱动程序中进行非常重要的工作,虽然每个顶点的立即模式已经不是非常高性能,但成千上万的纹理绑定额外地降低了性能。按纹理对精灵进行排序是正确的做法,但即使将纹理标识符缓存在变量中,并且仅在最后一个已知值不是当前值时才绑定已经更好。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2021-11-29
      • 2011-09-22
      • 2018-05-23
      • 2011-11-16
      • 2021-03-27
      • 2017-01-27
      • 2011-10-31
      相关资源
      最近更新 更多