Programing

유니폼의 GLSL 배열 만들기?

crosscheck 2020. 11. 25. 07:38
반응형

유니폼의 GLSL 배열 만들기?


OpenGL의 조명을 그대로두고 직접 만들고 싶습니다. 셰이더가 다양한 수의 조명을 허용하기를 원합니다.

GLSL 셰이더에서 유니폼 배열을 선언 할 수 있습니까? 그렇다면 해당 유니폼의 값을 어떻게 설정합니까?


네 가능합니다. 예를 들어 C에서하는 것과 유사한 균일 한 배열을 선언합니다.

uniform float v[10];

그런 다음 사용하여 값을 설정할 수 있습니다. glUniform{1,2,3,4}{f,i}v

GLfloat v[10] = {...};
glUniform1fv(glGetUniformLocation(program, "v"), 10, v);

예, GLSL 셰이더에서 유니폼 배열을 선언 할 수 있습니다. 몇 가지 예를 보려면 Google "glsl uniform array"를 사용하십시오 (편집 : 또는 datenwolf의 예 참조). 그러나 서로 다른 그래픽 카드로 보낼 수있는 유니폼 수에는 제한이 있습니다 (적어도 오래된 그래픽 카드에서는 현재 유니폼에 대해 잘 모르겠습니다 (아직있을 것이라고 생각하지만)).

유니폼 경로를 따라 가기로 결정했다면 유니폼 버퍼를 사용하는 것이 좋습니다. http://www.opengl.org/wiki/Uniform_Buffer_Object 에 따르면 "일관된 버퍼 바인딩 간 전환은 일반적으로 프로그램에서 수십 개의 유니폼을 전환하는 것보다 빠릅니다".

많은 수의 조명과 매개 변수가있는 경우 데이터를 부동 버퍼로 보낼 수도 있습니다.

참고 URL : https://stackoverflow.com/questions/8099979/creating-a-glsl-arrays-of-uniforms

반응형