OpenGLを学んでいて問題があります。OpenGL:バッファオブジェクト/シェーダがスコープ外に出る
私は、すべてのメモリがOpenGLによってGPUに割り当てられていることを知っています。したがって、技術的な範囲は問題ではありませんか?しかし、私はこれを行うにしてみてください。そして、
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;
}
};
私はリンクシェーダとプログラム機能linkShadersに得れば、私は、頂点シェーダとフラグメントシェーダがスコープ外であることを言って苦情が(具体的には、私が手を取得しますその2つは「宣言されていない識別子」であると言いました)。これらがスタック上ではなくGPU上に割り当てられている場合、なぜ彼らは範囲外になると言われていますか?私は何か間違っているのですか?
ファイルはディスクに割り当てられますが、 'FILE * foo = fopen(" foo.txt "、" w ")'を宣言してスコープの外で 'foo'を使用しようとするとエラーになります。それはあなたに何かを思い出させますか? –
'linkShaders'で使われている' vertexShader'と 'fragmentShader'の宣言/定義を表示してください(ヒント:あなたが表示する定義はそれぞれ' SetUpVertexShader'と 'SetUpFragmentShaderandLink'に対してローカルです)。 –
@ n.m。それ以上説明できますか? – kumikan