加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

opengl – 将uint属性传递给GLSL

发布时间:2020-12-14 05:38:08 所属栏目:Windows 来源:网络整理
导读:我试图将一堆连续的无符号整数作为属性传递给我的GLSL着色器. 到目前为止,我想到了 s_number = glGetAttribLocation(shader,"number");numberData = new GLuint[dotAmount];for (GLuint i = 0; i dotAmount; i++) { numberData[i] = i;}glGenBuffers(1,vertB
我试图将一堆连续的无符号整数作为属性传递给我的GLSL着色器.

到目前为止,我想到了

s_number = glGetAttribLocation(shader,"number");

numberData = new GLuint[dotAmount];
for (GLuint i = 0; i < dotAmount; i++) {
    numberData[i] = i;
}

glGenBuffers(1,&vertBuf);
glBindBuffer(GL_ARRAY_BUFFER,vertBuf);

glBufferData(
        GL_ARRAY_BUFFER,sizeof(dotAmount),numberData,GL_STATIC_DRAW
);

渲染功能是

glUseProgram(shader);

[..]

glEnableVertexAttribArray(s_number);
glBindBuffer(GL_ARRAY_BUFFER,vertBuf);

glVertexAttribPointer(
        s_number,1,GL_UNSIGNED_INT,GL_FALSE,BUFFER_OFFSET(0)
);

glDrawArrays(GL_POINTS,dotAmount);

我尝试使用顶点着色器中的数字,如下所示:

attribute uint number;

(名称’vertBuf’实际上有点误导,因为它不是我要通过的顶点数据)
我正在使用OpenGL 3和着色器版本1.3.

我想要实现的是,我希望着色器执行dotAmount次.定位在着色器内以数学方式完成.但我得到的只是一个空白屏幕……

我很确定问题不在于着色器.我想画点,如果我把gl_Position = vec4(0.0,0.0,0.0);在顶点着色器中,我认为它应该绘制一些东西.

解决方法

尝试将片段着色器更改为gl_FragColor = vec4(1,1);这将确保输出颜色使片段可见.

另外,你应该有gl_Position = vec4(0,1); (原因是gl_Position必须是同质坐标,这意味着前三个分量将被第四个分割.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读