2013-05-16 29 views
0

我一直在嘗試使用glVertexAttribP與GL_UNSIGNED_INT_2_10_10_10_REV但在某個時刻卡住了。在glDrawArray訪問衝突

這裏是我的代碼

GLuint red=0,green=511,blue=511,alpha=3; 
GLuint val = 0; 

val = val | (alpha << 30); 
val = val | (blue << 20); 
val = val | (green << 10); 
val = val | (red << 0); 
GLfloat vertices[]={-0.9f, -0.9f, 0.0f,1.0f, 
     -0.9f, 0.6f, 0.0f,1.0f, 
     0.6f,0.6f,0.0f,1.0f, 
     0.6f,-0.9f,0.0f,1.0f}; 

GLuint test_data[]={val,val,val,val}; 
glGenBuffers(1, &BufferId); 
glBindBuffer(GL_ARRAY_BUFFER, BufferId); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 

glEnableVertexAttribArray(glGetAttribLocation(shader_data.psId,"position")); 
glVertexAttribPointer(glGetAttribLocation(shader_data.psId,"position"),4,GL_FLOAT,GL_FALSE, 0,0); 

glGenBuffers(1, &BufferId1); 
glBindBuffer(GL_ARRAY_BUFFER, BufferId1); 
glBufferData(GL_ARRAY_BUFFER, sizeof(test_data), test_data, GL_STATIC_DRAW); 

glEnableVertexAttribArray(glGetAttribLocation(shader_data.psId,"color")); 
//glVertexAttribPointer(glGetAttribLocation(shader_data.psId,"color"), 4,GL_INT_2_10_10_10_REV,GL_TRUE, 0,0); 
     glVertexAttribP4uiv(glGetAttribLocation(shader_data.psId,"color"),GL_UNSIGNED_INT_2_10_10_10_REV ,GL_TRUE,0); 

glDrawArrays(GL_TRIANGLE_FAN,0,4); 

它給訪問衝突在glDraw電話。代碼與glVertexAttribPointer正常工作。我在這裏錯過了什麼?

回答

2

glEnableVertexAttribArray(glGetAttribLocation(shader_data.psId,「color」));

這告訴OpenGL您正在使用數組作爲屬性數據的來源。但你不是。因此,崩潰:OpenGL將嘗試訪問不存在的數組。

禁用陣列而不是啓用它。

+0

感謝您的快速.. 現在,我評論glEnableVertexAttribArray()呼叫保持不變。現在我得到一個黑色的顏色.. – debonair

0

你確定sizeof(頂點)和sizeof(test_data)給你正確的尺寸嗎?

我想知道它是否給你指針的大小,而不是內容的大小。

這也可能是一個範圍問題。