2012-01-03 146 views
1

我是新來的opengl es 2.0在ios上,我想創建幾個對象(從頂點製成)並分配每個不同的紋理,我發現我可以通過綁定然後繪製在這樣的渲染功能:opengl es 2.0紋理正確的方式

內渲染():

glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); 

    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 
    glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3)); 

    glVertexAttribPointer(_texCoordSlot, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 7));  

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, _Texture1); 
    glUniform1i(_textureUniform, 0); 

    glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 

我重複以上的只有在glBindTexture改變_Texture1到_Texture2等每一個紋理代碼..

之前,這一切我設置紋理如下:

 glGenTextures(1, &texName); 
    glBindTexture(GL_TEXTURE_2D, texName); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData); 

我想知道什麼是正確的方式給紋理不同的頂點,如果它甚至在渲染功能內完成?

這似乎不是正確的做法。

(這裏是完整的代碼,如果我沒有解釋自己完全:http://codetidy.com/1709/

回答

2

你正在做的正確方法。 OpenGL是一個「狀態機」,所以你必須爲繪製每個框架的渲染管線設置狀態。基本上所有的繪圖都將在你的渲染函數中完成。