2012-01-19 3 views
1

vec4 배열을 유니폼으로 OpenGL의 프래그먼트 쉐이더에 전달하려고합니다. 원하는 것보다 훨씬 어려워 보입니다. 내가 GLfloat의 배열을 전달하고 쉐이더의 vec4s을 재구성하려고 한 점에왔다,하지만 여전히 나는 vshader에 선언 시도vec4 (GLfloat quad)의 배열을 OpenGL 쉐이더에 유니폼으로 전달

작동하지 않습니다

#extension GL_NV_shader_buffer_load : enable 
uniform GLfloat* points; 

과에서 코드, 전화 :

glUniform1fv(points, pointsLen*4, points); 

내가 하나의 그룹으로 수레를 전달하고, 나는 vec4s의 4 배 번호가 생각.
슬프게도이 vshader는 컴파일을 GLSL 프로그램에 전달하지 않습니다.

어떻게 수정합니까? 이 문제를 고치거나 전혀 다른 방식으로 수행하십시오.

+0

[uniform vec4 positions [50]'] (http://www.opengl.org/wiki/GLSL_Types#Arrays)이 작동하지 않습니까? – genpfault

+0

작동하지만 컴파일 시간에 크기를 알지 못합니다. –

답변

1

NVIDIA의 shader_buffer_load는 그렇게 작동하지 않습니다. uniform 포인터를 선언하면 해당 포인터에 대한 데이터가 저장되는 GPU 주소를 제공한다는 것을 컴파일러에 알리는 것입니다. 그 GPU 주소는 버퍼 오브젝트에서옵니다.

데이터를 버퍼 객체에 넣은 다음 상주 시키면 GPU 주소를 얻을 수 있습니다. 데이터 배열에 대한 CPU 포인터를 제공하지 않습니다.

데이터 배열을 갖고 싶다면 shader_buffer_load가 필요하지 않습니다. GLSL은 일정한 배열을 허용합니다. 명시 적으로 크기을 입력해야합니다.

+0

알겠습니다. 고마워요! –