GLSL4.3 通过Texture向Shader传递整数数据,但不成功,Shader不能正确读取整数数据,
如果传递的是浮点型的纹理数据,则可以正确读取数据的:
例如:C代码中:glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA32F, tw, th );
Shader中:layout (binding = 0) uniform sampler2D tex_float;
vec4 data = texelFetch( tex_object, ivec2(0, 0), 0);
可以正确得到 {-100, -100, 0, 1}
-------还请大侠出手相助呀
C code:
GLuint texFlaot;
glGenTextures(1, &texFlaot);
glActiveTexture( GL_TEXTURE0 );
glBindTexture(GL_TEXTURE_2D, texFlaot);
//const int arrLen = 3*3*4;
GLint myFloatBuf[36] =
{
-100, -100, 0, 1, 0, -100, 0, 1, 100, -100, 0, 1 ,
-100, 0, 0, 1, 0, 0, 0, 1, 100, 0, 0, 1 ,
-100, 100, 0, 1, 0, 100, 0, 1, 100, 100, 0, 1 ,
};
int tw = 3, th = 3;
glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA32I, tw, th );
glTexSubImage2D( GL_TEXTURE_2D,
0,
0, 0,
tw, th,
GL_RGBA,
GL_INT,
myFloatBuf);
Shader 代码:
//layout (binding = 0) uniform sampler2D tex_float;
layout (binding = 0) uniform isampler2D tex_object;
void main( void)
{
// 将输入的Texture数据作为坐标打印
// 将纹理的st(0,0)的值(也就是 myFloatBuf[0][0]={-100, -100, 0, 1,} )最为坐标,
// 在该坐标上显示一个点显示在画面上,
ivec4 data = texelFetch( tex_object, ivec2(0, 0), 0);
vec4 fpos = vec4( data.r, data.g, data.b, data.a );
gl_Position = proj_matrix * mv_matrix * fpos;
// 颜色
vs_out.clr = vec4(1.0, 0.0, 0.0, 1.0);
}