나는 C에서의 OpenGL 4.5을 사용하여 ++와 GLSL (410)유니폼을 설정하기 전에 왜 셰이더 프로그램을 사용해야합니까?
하고 내가 먼저 glUseProgram
와 쉐이더 프로그램을 사용하지 않고 셰이더 프로그램의 균일 변수를 설정하려고 시도했습니다 최근 문제가 건너 왔어요. 나는 내 shader_program
에 첨부 된 input_color
(출력 색상을 설정할 vec4)이라는 균일 한 변수를 가진 조각 셰이더를 사용했습니다. 나는 do do을 사용해야한다.
// set uniforms
GLint input_color = glGetUniformLocation(shader_program, "input_color");
glUniform4f(input_color, 0.5f, 0.3f, 0.2f, 1.0f);
이 프로그램으로 그려진 삼각형은 모두 검은 색이었고 예상 한 결과가 아닙니다. 몇 가지 실험을하고 나면 유니폼을 설정하기 전에 프로그램을 사용해야한다는 것을 알게되었습니다.
// set uniforms
glUseProgram(shader_program); // my change
GLint input_color = glGetUniformLocation(shader_program, "input_color");
glUniform4f(input_color, 0.5f, 0.3f, 0.2f, 1.0f);
드로잉은 올바른 색의 삼각형을 만듭니다.
제 질문은 왜 프로그램을 처음 사용해야합니까? 나는 OpenGL이 상태 기계으로 작동하지만,이 경우 왜 현재의 셰이더 프로그램 상태가 필요한지 이해하고 있습니까? 결국, 나는 input_color
의 메모리 인덱스를 얻기 위해 glGetUniformLocation
에 명시 적으로 shader_program
인덱스를 매개 변수로 전달합니다.
이 답변을 통해 OpenGL의 상태를 더 잘 이해하고 GPU에서 셰이더 프로그램을 나타내는 메모리 블록을 활용하거나 관리하는 방법을 이해할 수 있기를 바랍니다.
"* OpenGL 4.5 in C++ 및 GLSL 410. *"왜 4.5를 GLSL 4.10과 함께 사용합니까? GLSL 4.50을 사용할 수 없습니까? –
내가 사용하고있는 가이드는 약간 날짜가 있기 때문에 4.10을 지정했습니다. 나는 4.50을 사용하기 시작할 것이다. – Rob