没有属性的顶点着色器

3
我们能否不使用属性来编写顶点着色器?
#version 300 es
out mediump vec4 basecolor;

uniform ivec2 x1;

void main(void)
{
        if(x1 == ivec2(10,20))
                basecolor = vec4(0.0, 1.0, 0.0, 1.0);
        else
              basecolor = vec4(1.0, 0.0, 1.0, 1.0);

        gl_PointSize = 64.0;
        gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
}



#version 300 es
in mediump vec4 basecolor;

out vec4 FragColor;
void main(void)
{
        FragColor =  basecolor;
}

1
出于好奇,你使用的是哪种硬件平台,支持OpenGL ES 3.0?我非常感兴趣尝试一下,因为它在某些方面终于接近桌面OpenGL的能力水平了。 - Andon M. Coleman
1个回答

3

技术上规范中并没有要求你必须拥有顶点属性。但是同样地,在OpenGL ES 3.0中,无论你是否需要,你都有两个内置的in属性:

与固定功能通信的内置顶点着色器变量在顶点语言中被本质地声明如下:

in highp int gl_VertexID;
in highp int gl_InstanceID;

这确实是唯一一个不具有任何属性的时候。您可以根据 gl_VertexIDgl_InstanceID 或两者的组合动态计算位置,这是与 OpenGL ES 2.0 相比的重大变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接