glsl 顶点着色器 glGetUniformLocation 返回 null

问题描述 投票:0回答:1

大家好,我正在学习 webgl,我无法获取特殊变量的位置 这是代码

顶点着色器

  uniform vec2 u_translation;
  attribute vec2 a_position;
  uniform vec2 u_resolution;
  void main() {
    vec2 position = a_position + u_translation;
    vec2 zeroToOne = a_position / u_resolution;
    vec2 zeroToTwo = zeroToOne * 2.0;
    vec2 clipSpace = zeroToTwo - 1.0;
    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
  }

片段着色器

  precision mediump float;
  uniform vec4 u_color;
  void main() {
    gl_FragColor = u_color;
  }

    var translationLocation = gl.getUniformLocation(program, "u_translation");
    var positionLocation = gl.getAttribLocation(program, "a_position");
    var resolutionLocation = gl.getUniformLocation(program, "u_resolution");
    var colorLocation = gl.getUniformLocation(program, "u_color");
// translationLocation is null  but i can get the others

enter image description here

有人知道发生了什么事吗?我想我在着色器中使用了“u_translation”

javascript glsl webgl
1个回答
0
投票

局部变量

position
没有在着色器中的任何地方使用,因此不需要和优化掉
u_translation
。所以它不会成为一个活动的程序资源,也不会得到一个统一的位置。下一行可能是错误的

vec2 zeroToOne = a_position / u_resolution;

但应该是

vec2 zeroToOne = position / u_resolution;

现在局部变量

position
在着色器程序中使用,因此
u_translation
成为一个活跃的程序资源。

© www.soinside.com 2019 - 2024. All rights reserved.