- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
glActiveTexture
使用的采样器制服和纹理单元之间的对应关系显然不能用 opengl 查询,而且我找不到关于如何找到哪个纹理单元映射到哪个采样器统一的好的文档。这是我能够找到的:
gl_TEXTURE0
uniform sampler2D color;
uniform sampler2D tex;
uniform sampler2D norm;
color
被映射到
gl_TEXTURE0
,
tex
被映射到
gl_TEXTURE1
, 和
norm
被映射到
gl_TEXTURE2
.但是如果顶点着色器定义为:
uniform sampler2D norm;
最佳答案
Here is what I have been able to find:
- If there is only sampler uniform in a program, then it is mapped to
gl_TEXTURE0
- If there are multiple sampler uniforms in a single program stage, then they are mapped in the order they are declared in the shader.
- If the vertex and fragment shaders have disjoint sets of sampler uniforms, then the samplers in the vertex shader come first and are followed by the samplers in the fragment shader.
- This behavior appears to be defined by the specification.
Any uniform sampler or image variable declared without a binding qualifier is initially bound to unit zero.
GL_TEXTURE0
.所有未初始化的采样器制服的值都应为 0。
layout(binding = )
语法来分配统一的纹理单元,您必须在 OpenGL 代码中手动为每个采样器统一分配一个纹理单元的值。这是通过设置它的统一值来完成的,就像任何其他整数统一一样:你调用
glUniform1i
与那个制服对应的位置。所以如果你想把它与纹理图像单元索引 4 相关联,你可以调用
glUniform1i(..., 4)
, 其中
...
是该制服的制服位置。
关于opengl - opengl中纹理单元和采样器制服的对应关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931941/
有什么方法可以防止着色器编译器删除它检测到未使用的统一/属性?我偶尔会注释掉我的着色器的一部分进行测试,但这会导致我程序的其余部分出现问题,因为突然某些名称不再存在(从而导致查找错误,并在尝试设置值时
在做了一些没有额外库 + GLSL 着色器的“常规”WebGL 之后,我开始使用 ThreeJS 的 WebGL 渲染器。我现在正在尝试在我的 ThreeJS 程序中编写自定义着色器,我注意到 Thr
我正在使用 创建效果 hr = D3DXCreateEffectFromFile( g_D3D_Device, shaderPath.c_str(), macros,
我不知道制服在内存中是如何表示的。 制服似乎会占用宝贵的寄存器空间,但它们最终会传入/通过/传出到全局内存中,对吗? 制服不用时情况会发生变化吗?编译器可以将它们优化掉吗?--在这种情况下,我已经将无
我正在尝试从 Blender 导出一个带有纹理的对象。导出的 JSON 如下所示: { "metadata" : { "formatVersion" : 3.1,
我通过 this book 逐步学习 WebGL .我尝试通过使用缓冲区 (gl.ARRAY_BUFFER) 而不是循环来绘制三个点(正如我之前在本书的其他示例中所做的一样)。 var u_Fra
假设我有四个浮点值想要发送到着色器,以下哪一个是发送它们的最佳方式。 将它们作为单独的 float 发送: uniform float uniformValue1; uniform float uni
如果我正在进行实例化渲染并且需要将每个实例一个 mat4 发送到顶点着色器,对于大量实例,哪种方法可能更快? 使用实例化的 mat4 属性 (glVertexAttribDivisor) 并将 mat
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!