glsl获取纹理大小

Posted by shensunbo on December 27, 2023

获取纹素大小的glsl代码vec2 tex_offset = 1.0 / textureSize(image, 0); #version 330 core 中编译正常,但是在 #version 300 es 中无法通过编译

报错信息

1
2
3
4
5
6
7
```
err: 0:15(20): error: could not implicitly convert operands to arithmetic operator
0:20(44): warning: `tex_offset' used uninitialized
0:21(44): warning: `tex_offset' used uninitialized
0:25(49): warning: `tex_offset' used uninitialized
0:26(49): warning: `tex_offset' used uninitialized
```

原因是 textureSize(image, 0) 的结果是一个ivec2 整数类型,需要显式的进行整数到浮点数的类型转换,使用以下代码

1
2
3
4
```
ivec2 texSize = textureSize(image, 0);
vec2 tex_offset = vec2(1.0) / vec2(texSize);
```