微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – GLSL ES局部变量崩溃了吗?

我正在尝试在我的OpenGL ES 2.0引擎中实现在线教程(lighthouse3d.com)中的一些着色器.

问题是由于某种原因,在main()范围内声明的任何变量都会导致整个着色器失败.例如,这失败了:

void main(){
    vec4 color;     
    gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}

但这很完美:

void main(){
    //vec4 color;       
    gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}

我的顶点着色器也会发生同样的事情.(编辑:nvm,似乎只发生片段着色器)使用任何类型的非常量值的唯一方法是使用属性,变化,制服等,例如,这可以作为你会期望:

uniform sampler2D texture;
varying lowp vec4 fragcol;
varying lowp vec2 texco;

void main(){
    gl_FragColor = fragcol * texture2D(texture, texco);
}

此外,我在寻找有关GLSL ES(或任何此版本调用)的文档或资源时遇到了很多麻烦.我能找到的就是:http://old.siggraph.org/publications/2006cn/course16/KhronosSpecs/ESLanguageSpec1.10.11.pdf

这是我能找到的与变量声明相关的全部内容

[snip]There are no default types. All variable and function declarations
must have a declared type, and optionally qualifiers. A variable is
declared by specifying its type followed by one or more names
separated by commas.[snip]

而这正是我所做的:

声明类型:vec4

后跟一个或多个名字:颜色;

vec4 color

我很无能为力

编辑:
GLES20.glGetError()给出错误1282

解决方法:

GLSL ES与传统GLSL的不同之处在于它需要精确修饰符才能指定完整类型.你尝试过,例如:

void main(){
    lowp vec4 color;     
    gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}

你也可以把这样的东西放到源文件的顶部:

precision highp float;

要设置认精度,以便稍后省略.

要获得有关编译GLSL的错误的详细信息,可以使用glGetProgramInfoLog(在glGetProgramiv的帮助下).大多数GL实现返回有意义的错误和行号.我很遗憾地使用Java,但在C语言中你可能会:

    glCompileShader(shader);

    // check whether compilation was successful; if not
    // then dump the log to the console
    GLint status;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
    if(!status)
    {
        GLint logLength;
        glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
        if (logLength > 0)
        {
            GLchar *log = (GLchar *)malloc(logLength);
            glGetShaderInfoLog(shader, logLength, &logLength, log);
            printf("Shader compile log:\n%s", log);
            free(log);
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐