Opengl glDrawArray上的访问冲突

Opengl glDrawArray上的访问冲突,opengl,opengl-3,Opengl,Opengl 3,我一直在尝试将glVertexAttribP与GL_UNSIGNED_INT_2_10_10_10_10_REV一起使用,但在某些方面遇到了问题 这是我的密码 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 | (r

我一直在尝试将glVertexAttribP与GL_UNSIGNED_INT_2_10_10_10_10_REV一起使用,但在某些方面遇到了问题

这是我的密码

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);
GLuint红色=0,绿色=511,蓝色=511,阿尔法=3;
GLuint-val=0;
val=val |(alpha您确定sizeof(顶点)和sizeof(测试数据)的大小正确吗

我想知道它是否给出了指针的大小而不是内容的大小

这也可能是一个范围问题

GlenableVertexAttributeArray(glGetAttributeLocation(shader_data.psId,“color”)

这会告诉OpenGL您正在使用数组作为属性数据的源。但是您没有。因此崩溃:OpenGL将尝试访问不存在的数组


禁用数组而不是启用它。

感谢您提供的快速解决方案。现在,我对GlenableVertexAttributeArray()调用进行了注释,使rest保持不变。现在我得到了黑色。。