glVertexAttribPointer() の型パラメーターとして GL_INT_2_10_10_10_REV をどのように正確に使用するのか、誰か教えてもらえますか? この型を使用して色の値を渡そうとしています。また、このタイプの「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