在內存中採用交叉模式存儲,向gpu傳入頂點數據的方法
GPU:數組
#version 100 attribute highp vec2 aPosition; attribute highp vec2 aTexcoord;
CPU:
init()緩存
//將頂點數組元素都存入一個緩存對象中 static const float position[] = { -1.0f, -1.0f,0.0f,1.0f,//2 頂點位置 2 紋理座標 1.0f, -1.0f,1.0f,0.0f, -1.0f, 1.0f,0.0f,1.0f, 1.0f, 1.0f,1.0f,1.0f }; //-----------基於索引繪製 static const GLushort plane_indices[] = { 0, 1, 2, 3 }; glGenBuffers(1, &_index_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _index_buffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(plane_indices), plane_indices, GL_STATIC_DRAW); //-------------- glGenBuffers(1, &_quad_vbo); glBindBuffer(GL_ARRAY_BUFFER, _quad_vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(position), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(position), position); glGenVertexArrays(1, &_vao); glBindVertexArray(_vao); GLint naPosition = mProgram->getAttribLocation("aPosition"); glEnableVertexAttribArray(0); //注意,這裏的offset 是內存中大小的偏移,必須準確計算出內存大小偏移量 sizeof glVertexAttribPointer(naPosition, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (GLvoid*)0); GLint naTexcoord = mProgram->getAttribLocation("aTexcoord"); glEnableVertexAttribArray(1); glVertexAttribPointer(naTexcoord, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid*)(2*sizeof(float))); glBindVertexArray(0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1);
--------------------- 做者:皮皮蝦圖形學 來源:CSDN 原文:glVertexAttribPointer 用法簡介版權聲明:本文爲博主原創文章,轉載請附上博文連接!