0

我正在使用计算机上的 KDE 终端通过 ssh 在我的手机上为 Minecraft pe 编辑着色器。语法高亮效果很好,但它甚至不会显示最简单的错误。例如,在下面的这段代码中,我列出了两个错误,主要是词法错误

vec4 no`rm`alColor;

void main(){
    nomralColor = vec3(1.0,1.0,1.0,1.0);//vec3 != vec4
    gl_FragColor = nomralColor;//normalColorl != nomralColor
}

有没有可能使用可用的命令行代码编辑器(nano/vim/micro)之一检查 glsl 代码的最简单(在列表词法中)错误的方法?

4

1 回答 1

1

我建议制作一个可以用来检查的小工具。以下代码只是在控制台窗口中打印出错误。你可以用 C++ 或 Java 编写 Android 代码,我会给你我的 C++ 例子,因为所有的 OpenGL 调用在 Java 中也是一样的。

它真的很短,您只需使用glCreateShader()glCompileShader()尝试编译它,然后glGetShaderInfoLog()为您提供错误消息。

//tell openGL to do all the work for us
bool compileShader(GLuint shaderID, std::string shaderCode) {
    // Compile Shader
    glShaderSource(shaderID, 1, (const char* const*)shaderCode.c_str(), NULL);
    glCompileShader(shaderID);

    // Check Shader
    GLint Result = GL_FALSE;
    int InfoLogLength;
    glGetShaderiv(shaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    // Do we have an error message?
    if (InfoLogLength > 0){
        std::vector<char> shaderErrorMessage(InfoLogLength + 1);
        // Get the message text
        glGetShaderInfoLog(shaderID, InfoLogLength, NULL, &shaderErrorMessage[0]);

#ifdef DBG_SHADER
        printf("Compilation error:\n%s", &shaderErrorMessage[0]);
#endif

        return false;
    }
    return true;
}

并且该函数的用法是,给定一个名为的代码字符串FragmentShaderCode

GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
bool succeeded = compileShader(FragmentShaderID, FragmentShaderCode);
于 2020-08-14T21:36:19.263 回答