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返回错误码,应该属于显卡不支持的原因。

    评论

报告相同问题?

悬赏问题

  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题