Ich lerne OpenGL und ich habe ein Problem.OpenGL: Pufferobjekte/Shader gehen aus dem Geltungsbereich
Ich weiß, dass der gesamte Speicher auf die GPU von OpenGL zugeteilt wird, so dass der technische Bereich kein Problem sein sollte? Allerdings, wenn ich versuche, dies zu tun:
int SetUpVertexShader(){
glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
//BUILD AND COMPILE SHADER
//VERTEX SHADER
GLuint vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
//snip - code to compile shader, etc etc
}
};
int SetUpFragmentShaderandLink(){
//BUILD AND COMPILE SHADER
//FRAGMENT SHADER
GLint success;
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
//snip - code to compile shader, etc etc
};
int linkShaders(){
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader); //this line has complaints saying vertexShader is an undeclared identifier
glAttachShader(shaderProgram, fragmentShader); // this line also has complaints saying fragmentShader is an undeclared identifier
//the rest of the lines all have undeclared identifier complaints
glLinkProgram(shaderProgram);
//check linking errors
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
if(!success){
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED" << infoLog << std::endl;
}
};
dann, wenn ich auf die Verknüpfung von Shadern und Programmfunktion linkShaders bekommen, bekomme ich Beschwerden sagen, dass der Vertex-Shader und Fragment-Shader out of scope sind (genauer gesagt, ich sagte, dass diese beiden "nicht deklarierte Identifikatoren" sind). Wenn diese auf der GPU statt auf dem Stapel zugewiesen werden, warum wird mir dann gesagt, dass sie den Bereich verlassen? Mache ich etwas falsch?
Dateien werden auf einem Datenträger zugewiesen, aber wenn Sie 'FILE * foo = fopen (" foo.txt "," w ")' angeben und versuchen, 'foo' außerhalb des Bereichs zu verwenden, wird ein Fehler ausgegeben. Erinnert es dich an etwas? –
Bitte zeigen Sie die Deklarationen/Definitionen von 'vertexShader' und' fragmentShader', wie sie von 'linkShaders' verwendet werden (Hinweis: Die Definitionen, die Sie zeigen, sind lokal für' SetUpVertexShader' bzw. 'SetUpFragmentShaderandLink'). –
@ n.m. Kannst du das weiter erklären? – kumikan