我在编译一个简单的顶点着色器时遇到了问题。我正在使用此函数进行编译:
GLuint TShaderManager::loadShaderFromFile(const std::string& fName, GLenum shaderType)
{
string path = fName;
//Open file
GLuint shaderID = 0;
string shaderString;
ifstream sourceFile(path.c_str());
//Source file loaded
if(sourceFile)
{
shaderString.assign(istreambuf_iterator<char>(sourceFile),
istreambuf_iterator<char>()); // Get shader source
shaderID = glCreateShader(shaderType); // Create shader ID
const GLchar* shaderSource = shaderString.c_str();
glShaderSource(shaderID, 1, (const GLchar**)&shaderSource, NULL); // Set shader source
glCompileShader(shaderID); // Compile shader source
GLint shaderCompiled = GL_FALSE;
glGetShaderiv(shaderID, GL_COMPILE_STATUS, &shaderCompiled); //Check shader for errors
if(shaderCompiled != GL_TRUE)
{
TError::showMessage("Failed to compile shader"); // I'm getting this error
glDeleteShader(shaderID);
shaderID = 0;
}
}
else
{
TError::showMessage(string("Unable to open file ").append(path.c_str()));
}
return shaderID;
}
这是我没有编译的顶点着色器:
#version 330
layout(location = 0) in vec4 position;
void main()
{
gl_Position = position;
}
所以基本上shaderCompiled
仍然存在GL_FALSE
。
我在调试模式下检查 - 着色器在我的函数中正确加载string
,所以问题不存在。
另外我不知道这是否有必要,但我也将我的片段着色器放在这里,它可以正确编译:
#version 330
out vec4 outputColor;
void main()
{
float lerpValue = gl_FragCoord.y / 800.0f;
outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f),
vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue);
}
编辑:
glGetShaderInfoLog
显示此消息:
错误:0:3 '位置':语法错误解析错误