WebGL:是否禁止在顶点着色器和片段着色器中绑定(bind)相同的制服?

标签 webgl opengl-es-2.0

我正在使用 Emscriten 将 OpenGL 框架移植到 JavaScript。

状态存储在一个统一的结构中:

struct UniformState {
    ...
    mat4 modelviewprojection_matrix; 
    mat4 modelview_matrix;
    mat3 normal_matrix; 
    mat4 texture_matrix;
    ...
};

我想在顶点和片段着色器中访问为:
uniform UniformState GLUP;

当我这样做时,我在链接时收到错误:
Uniform `GLUP`is not linkable between attached shaders

是否禁止在顶点着色器和片段着色器中绑定(bind)相同的制服?

(如果它被禁止,那么显然我可以为每个着色器声明两组不同的统一变量,但我宁愿只有一个,因为它使代码更清晰/更简单,这就是为什么我要问以防万一
是为了使它成为可能而做的一些特别的事情)。

最佳答案

似乎对我有用。

请注意 Reto 提到的,如果我不设置精度,我会收到链接错误

"use strict";
var gl = document.createElement("canvas").getContext("webgl");
var program = twgl.createProgramFromScripts(gl, ["vs", "fs"], [], [], log);
log("--done--");

function log(msg) {
  var elem = document.createElement("pre");
  elem.appendChild(document.createTextNode(msg));
  document.body.appendChild(elem);
}
  <script id="vs" type="notjs">
struct Test {
  vec4 color;
  vec4 mult;
};

uniform Test test;
  
attribute vec4 position;

void main() {
  gl_Position = position * test.mult;
}
  </script>
  <script id="fs" type="notjs">
precision highp float;

struct Test {
  vec4 color;
  vec4 mult;
};

uniform Test test;

void main() {
  gl_FragColor = test.color;
  }
  </script>
  <script src="https://twgljs.org/dist/twgl.min.js"></script>

关于WebGL:是否禁止在顶点着色器和片段着色器中绑定(bind)相同的制服?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022476/

相关文章:

glsl - 通过 GLSL/WebGL 旋转图像

javascript - 创建一个真正的 3D 网站

iOS 使用 GLKMathUnproject 查找世界空间中的屏幕点

android - OpenGL ES 2.0 纹理未在某些设备上显示

java - 如何在 android 中录制视频的同时绘制视频,并保存视频和绘图?

javascript - Three.js 三 Angular 形未绘制

rust - 用于对象拾取的整数纹理的 Alpha 混合

linux - 无法在 Ubuntu 下的 Chromium 上启用 CSS3 转换

c++ - 如何初始化 const char** 数组

java - 平滑运动 Opengl ES 2.0