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

时间:2016-05-04 08:35:19

标签: webgl opengl-es-2.0

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

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

<x:scenario label="when processing a NameTitle attribute">
   <x:context select="@NameTitle">
      <foo NameTitle="Sir"/>
   </x:content>
   <x:expect label="it should produce a NameTitle  element">
          <NameTitle Value="Other"
         Description="Sir"/>
   </x:expect>
</x:scenario>

我希望在顶点和片段着色器中访问:

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

当我这样做时,我在链接时遇到错误:

uniform UniformState GLUP;

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

(如果被禁止,那么显然我可以为每个着色器声明两组不同的统一变量,但我更喜欢只有一个,因为它使代码更清晰/更简单,这就是为什么我&# 39; m在那里询问 是可以做到的特殊事情。)

1 个答案:

答案 0 :(得分:1)

似乎适合我。

注意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>