tingsky 2015-09-01 08:49 采纳率: 0%
浏览 2006

求问:OpenGL 4.3 通过纹理传递整形数据失败?

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);

}

  • 写回答

1条回答

  • tingsky 2015-10-23 23:28
    关注

    很久之前的问题,现在回来看下。
    后面找到的原因是,glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA32I, tw, th ); 传递 GL_RGBA32I格式数据时,
    glGetError返回错误码,应该属于显卡不支持的原因。

    评论

报告相同问题?

悬赏问题

  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区