有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OpenGL着色器可在桌面上编译,但不能在Android上编译

我最近开始学习opengl,但对它知之甚少。我遵循教程编写了以下两个着色器:

顶点着色器:

#version 400

in vec4 s_vPosition;
in vec4 s_vColor;
out vec4 color;

void main() {
    color = s_vColor;
    gl_Position = s_vPosition;
}

片段着色器:

#version 400

in vec4 color;
out vec4 fColor;

void main() {
    fColor = color;
}

它们在桌面上用OpenGL 3编译并工作得很好,但在Android上用OpenGL ES 2编译则不行。我试图检查着色器输出日志,但它返回了一个空白字符串。再说一次,我对这一点很陌生,我的错误可能很简单,但任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    在OpenGLES2中,您不会像在3.0中那样使用inout变量前缀。而是使用以下关键字:

    • 属性每个顶点传递到顶点着色器的值
    • 改变从顶点着色器传递到片段着色器的值
    • uniform全局变量,可以在着色器上为所有顶点和片段设置(包括纹理之类的内容,但也可以是标量或向量类型)

    attribute对应于顶点着色器中的invarying对应于顶点着色器中的out和片段着色器中的in。因此,将顶点着色器更改为:

    attribute vec4 s_vPosition;
    attribute vec4 s_vColor;
    varying vec4 color;
    
    void main() {
        color = s_vColor;
        gl_Position = s_vPosition;
    }
    

    你的片段着色器是这样的:

    varying vec4 color;
    
    void main() {
        gl_FragColor = color;
    }
    

    gl_FragColor是一个特殊定义的变量,如gl_Position,用于从片段着色器输出颜色