1. 程式人生 > >關於opengl的ActiveTexture以及bindXxx函數的分析

關於opengl的ActiveTexture以及bindXxx函數的分析

方式 存在 它的 tun gen xxx opengl 應該 需要

1.GLBindxxx,意思就是,將xxx指定為當前對象,之後的操作都是針對這個xxx進行。 比如,GLBindBuffer(bufferTarget, bufferId),就是指定bufferid和該buffer的類型。 void glBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);,就是綁定buffer的數據。 經過試驗,綁定完成之後,data占用的內存是可以銷毀的。 所以,可以得出一個結論,glBufferData函數調用的時候,應該會發生數據傳送。 可能是傳送到顯卡,也可能是傳送給驅動層,然後由驅動層管理。因為遊戲使用的總的buffer數,可能會超過顯存數,因此顯卡可能會有調度機制來管理,比如把暫時不用的buffer從顯存中釋放,轉移到系統內存,等需要的時候,再交換回去。 2.有個函數,不怎麽引人註目,但它跟glActiveTexture關系很大 ActiveTexture的時候,要指定TextureUnit,如Texture0,Texture1,這個是怎麽來的?按順序,還是可以直接Active高序號的texture,比如只有一個TExture,但我想ActiveTexture(GL_TEXTURE4)可不可以? 答案是,可以。 Texture,都是以Uniform的方式存在的。 假定某個它的名字是TExture1,通過glGetUniformLocation得到的location是texture1Location 那麽,glUniform1i(texture1Location,4),就可以指定這個Texture4指向這個Texture 之後,就調用glActiveTexture(GL_TEXTURE4); 本文得到兩個結論: 1.glBufferData會發生從cpu到顯卡的數據傳送 2.glUniformi設置Texture變量的值,是指定Texture Unit,而不是設置glGenTexture得到的texure對象的int值

關於opengl的ActiveTexture以及bindXxx函數的分析