首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试递增for循环内的变量时出现Glsl错误

尝试递增for循环内的变量时出现Glsl错误
EN

Stack Overflow用户
提问于 2019-03-07 22:04:51
回答 1查看 282关注 0票数 0

上下文:我将一个统一的浮点数组传递给我的片段着色器,然后用这个数组中的值初始化一个浮点数,最后尝试在for循环中递增这个浮点数,代码如下:

代码语言:javascript
复制
var regl = createREGL()

var drawTriangle = regl({
  vert: `
  precision mediump float;
  attribute vec2 position;

  void main () {
    gl_Position = vec4(position, 0, 1);
  }
  `,

  frag: `
  precision mediump float;
  uniform float refPoints[3];
  varying vec3 fcolor;

  void main () {
    float a_value = refPoints[1];
    for(int i=0;i<3;++i) {
      a_value += 1.; // <-- this line is causing the error
    }
    gl_FragColor = vec4(1, 1, 1, 1);
  }
  `,
  attributes: {
    position: [
      [1, 0],
      [0, 1],
      [-1, -1]
    ],
  },
  uniforms : {
    refPoints : [0., 1., 0., 2.]
  },
  count: 3
})

regl.frame(function () {
  regl.clear({
    color: [0, 0, 0, 1],
    depth: 1
  })
  drawTriangle()
})
代码语言:javascript
复制
<script src="https://npmcdn.com/regl/dist/regl.js"></script>

我有一个奇怪的错误:

代码语言:javascript
复制
Error: (regl) bad data or missing for uniform "refPoints[0]".  invalid type, expected number in command unknown

我不明白为什么这个特殊循环中的增量会造成这么大的麻烦。你有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 22:17:30

AFAICT这是regl中的bug吗?如果您使用以下命令,它将有效

代码语言:javascript
复制
    uniforms: { 
      "refPoints[0]": 0.,
      "refPoints[1]": 1.,
      "refPoints[2]": 0.,
    }

代码语言:javascript
复制
var regl = createREGL()

var drawTriangle = regl({
  vert: `
  precision mediump float;
  attribute vec2 position;

  void main () {
    gl_Position = vec4(position, 0, 1);
  }
  `,

  frag: `
  precision mediump float;
  uniform float refPoints[3];
  varying vec3 fcolor;

  void main () {
    float a_value = refPoints[1];
    for(int i=0;i<3;++i) {
      a_value += 1.; // <-- this line is causing the error
    }
    gl_FragColor = vec4(1, 1, 1, 1);
  }
  `,
  attributes: {
    position: [
      [1, 0],
      [0, 1],
      [-1, -1]
    ],
  },
  uniforms : {
    "refPoints[0]" : 0.,
    "refPoints[1]" : 1.,
    "refPoints[2]" : 0.,
  },
  count: 3
})

regl.frame(function () {
  regl.clear({
    color: [0, 0, 0, 1],
    depth: 1
  })
  drawTriangle()
})
代码语言:javascript
复制
<script src="https://npmcdn.com/regl/dist/regl.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55045687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档