2011-08-11 45 views
2

這是我用來繪製精靈的方法:問題有關glBindTexture

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的精靈,每次只繪製一個相同的紋理。

回答

0

是的,移動循環外的綁定,不需要重複綁定相同的紋理。

6

OpenGL documentation來自:如果 之間執行glBindTexture在glBegin的執行和glEnd的相應的執行產生

GL_INVALID_OPERATION。

你應該提取glBindTextureglBegin ... glEnd

+1

這一點,你應該preferrably不綁定的每一個角色_at ALL_一個新的紋理反正。綁定紋理需要在驅動程序中進行不平凡的工作,而每個頂點立即模式已經不是非常高的性能,而成千上萬的紋理綁定會額外地影響性能。通過紋理對精靈進行排序是正確的事情,但即使將紋理標識符緩存到變量中,只有在最後一個已知值不是當前值的情況下才進行綁定將會更好。 – Damon