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