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



我正在使用电脑上的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代码中最简单的(列表中的词法(错误?

我建议制作一个可以用来检查的小工具。下面的代码只是在控制台窗口中打印出错误。你可以用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);

最新更新