谁能告诉我我们究竟如何使用 GL_INT_2_10_10_10_REV 作为 glVertexAttribPointer() 中的类型参数?我正在尝试使用这种类型传递颜色值。还有这种类型的“REV”后缀有什么意义?它是否需要在着色器中进行任何特殊处理?
我的代码如下:
GLuint red=1023,green=1023,blue=1023,alpha=3;
GLuint val = 0;
val = val | (alpha << 30);
val = val | (blue << 20);
val = val | (green << 10);
val = val | (red << 0);
GLuint test_data[]={val,val,val,val};
loadshaders();
glBindAttribLocation(ps,0,"tk_position");
glBindAttribLocation(ps,1,"color");
LinkShader();
glUseProgram(ps);
glEnableVertexAttribArray (0);
glVertexAttribPointer(0, 4, GL_FLOAT, 0, 0, vertices);
glEnableVertexAttribArray (1);
glVertexAttribPointer(1,GL_BGRA,GL_UNSIGNED_INT_2_10_10_10_REV,GL_TRUE,0,test_data);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
着色器是:顶点着色器 -
#version 150
in vec4 tk_position;
in vec4 color;
out vec4 v_color;
void main()
{
v_color = color;
gl_Position = tk_position;
}
片段着色器 -
#version 150
in vec4 v_color;
out vec4 fragColor;
void main()
{
fragColor = v_color;
}
程序对象也被验证。那里没有问题。此代码在 AMD 卡上运行良好,但在 NVidia 上失败。失败意味着我在 glDrawArrays() 调用中获得了 NULL 指针访问权限。
Access violation
Exception Flag: 0x00000000
Exception Addr: 0x055f32ce