Sowohl der Vertex Shader als auch der Fragment Shader sind kleine Fliegen (Dateien) für eine kleine rote Box, die auf blauem Hintergrund erscheint.Vertex Shader und Fragment Shader konnten nicht kompiliert werden bevor gllinkProgram() aufgerufen wurde
Hier sind sie:
1. ist colorShading.vert
#version 130
in vec2 vertexPosition;
void main(){
gl_Positiion.xy = vertexPosition;
gl_Positiion.z = 0;
gl_Positiion.w = 1;
}
2. Eine davon ist colorShading.frag
#version 130
out vec3 color;
void main(){
color vec3(1.0, 0.0, 0.0);
}
und hier ist der Fehler:
Vertex and Fragment shader(s) were not successfully compiled
before glLinkProgram() was called. Link failed.
Shaders failed to link!
Enter any key to quit...
Ich benutzte einen Conso le zur Ausgabe mit ihm
std::vector<GLchar> errorLog(maxLength);
glGetProgramInfoLog(_programID, maxLength, &maxLength, &errorLog[0]);
std::printf("%s\n", &(errorLog[0]));
fatalError("Shaders failed to link!");`
Die Funktion ich die Shaders kompilieren verwendet, um unter
und gebe ich den filepath und shaderID auf die Funktion, anstatt das Kopieren und Einfügen, Convenient richtig?
void GLSLProgram::compileShader(const std::string& filePath, GLuint& id)
{
std::ifstream shaderFile(filePath);
if (shaderFile.fail()) {
perror(filePath.c_str());
fatalError("Failed to Open " + filePath);
}
std::string fileContents = "";
std::string line;
while (std::getline(shaderFile, line)) {
fileContents += line + "\n";
}
shaderFile.close();
const char* contentsPtr = fileContents.c_str();
glShaderSource(id, 1, &contentsPtr, nullptr);
glCompileShader(id);
GLint success = 0;
glGetShaderiv(id, GL_COMPILE_STATUS, &success);
if (success = GL_FALSE) {
GLint maxLength = 0;
glGetShaderiv(id, GL_INFO_LOG_LENGTH, &maxLength);
//The maxLength include the NULL character
std::vector<char> errorLog(maxLength);
glGetShaderInfoLog(id, maxLength, &maxLength, &errorLog[0]);
//Exit with failure
glDeleteShader(id);
std::printf("%s\n", &(errorLog[0]));
fatalError(" Shader " +filePath +" failed to compile!");
return;
}
}
Wie gehe ich über diesen Fehler, den ich bekomme?
Welchen Fehler * bekommen Sie? –
Der Vertex-Shader und der Fragment-Shader werden nicht kompiliert. – Shanu
'success = GL_FALSE' Beachten Sie die Warnungen Ihres Compilers. –