opengl - 一个纹理阵列的多个采样器
问题描述
- 如何为一个纹理数组创建多个采样器?
到目前为止,我依靠 OpenGL 来确定声明的uniform sampler2Darray txa
采样器是指我绑定的纹理数组glBindTexture
。
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, width, height,
layerCount, 0 GL_RGBA, GL_UNSIGNED_BYTE, texture_array);
...
glGenTextures(1,&texture_ID);
glBindTexture(GL_TEXTURE_2D_ARRAY, texture_ID);
...
//fragment shader
uniform sampler2Darray txa
...
vec2 tc;
tc.x = (1.0f - tex_coord.x) * tex_quad[0] + tex_coord.x * tex_quad[1];
tc.y = (1.0f - tex_coord.y) * tex_quad[2] + tex_coord.y * tex_quad[3];
vec4 sampled_color = texture(txa, vec3(tc, tex_id));
我尝试在片段着色器中指定两个采样器,但片段着色器出现编译错误:
uniform sampler2DArray txa;
uniform sampler2DArray txa2;
...
vec4 texture = texture(txa, vec3(tc, tex_id));
vec4 texture2 = texture(txa2, vec3(tc2, tex_id));
我没想到这会起作用,但是,我不确定片段着色器编译器是否会检查采样器是否分配了纹理,所以可能还有其他问题。
我尝试生成和绑定采样器对象,但仍然收到片段着色器错误:
GLuint sampler_IDs[2];
glGenSamplers(2,sampler_IDs);
glBindSampler(texture_ID, sampler_IDs[0]);
glBindSampler(texture_ID, sampler_IDs[1]);
我想坚持使用较低版本的OpenGL,这可能吗?任何帮助表示赞赏,谢谢!
解决方案
该错误是由该行引起的
vec4 texture = texture(txa, vec3(tc, tex_id));
那么变量texture
的名字就等于内置函数的名字texture
。该变量是在本地范围内声明的,因此在此范围内texture
是一个变量,调用该函数texture
会导致错误。
重命名变量以解决问题。例如:
vec4 texture1 = texture(txa, vec3(tc, tex_id));
推荐阅读
- python - 查找数据框中的所有依赖项
- javascript - 如何从api中获取图像?
- javascript - 如何通过 JS 向 instagram 输入字段输入数据?
- javascript - '' base64 编码了吗?
- github - 当我在 github 中搜索存储库时如何排除头文件?
- terminal - 在 Arduino 上实现串行 CLI
- python - 从 mysql 表导入数据时出现“DEALLOCATE PREPARE stmt”错误
- c# - 每次创建对象时如何在c#中将对象值添加到列表<>并在最后打印列表
- python - 如何在打印语句中的变量旁边添加逗号和句点
- javascript - 如何用一个按钮在两个数组列表之间切换反应js