如何在命令行中检查glsl代码?

问题描述

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

vec4 no`rm`alColor;

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

是否可以使用一种可用的命令行代码编辑器(nano / vim / micro)检查glsl代码中最简单的错误(列表词汇)?

解决方法

我建议您制作一个可以用来检查的小工具。以下代码仅在控制台窗口中显示错误。您可能会使用C ++或Java for 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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...