2016-12-16 4 views
0

나는 그 uniform 변수와 GLSL 쉐이더를 가지고 :GLSL 균일 한 블록의 유니폼 - 액세스하는 방법?

#version 150 
layout (shared) uniform GlobalData { 
    uniform mat4 worldMatrix; 
    uniform mat4 projMatrix; 
    // ... 
}; 

가 어떻게 내 프로그램에서 두 행렬을 설정합니까? 불행히도 기존 애플리케이션의 플러그인 만 작성하고 있기 때문에 GLSL 코드를 편집 할 수 없습니다.

내가 시도 :

glGetUniformLocation(program, "GlobalData.worldMatrix"); 
glGetUniformLocation(program, "worldMatrix"); 

도 작품.

Teh GlobalData 블록에는 변경하고 싶지 않은 다른 많은 유니폼이 있습니다. 신경 쓰이는 것은 worldMatrix뿐입니다.

어떻게하면됩니까?

답변

0

기존 응용 프로그램 용 플러그인 만 쓰고 있습니다.

그렇다면 그렇지 않습니다. 플러그인이 해당 행렬을 저장하는 데 사용할 버퍼 객체에 액세스 할 수있는 경우가 아니면

GlobalDatauniform block이고; UBO의 쉐이더 쪽을 나타냅니다. C++ 측은 균일 한 데이터를 버퍼 객체에 저장합니다. 따라서 응용 프로그램에서 해당 버퍼에 대한 액세스 권한을 부여하지 않으면 수행 할 수있는 작업이 없습니다.

버퍼를 직접 바인딩 할 수도 있지만 버퍼를 재정의 할 수 있도록 응용 프로그램을 설계하지 않은 경우 렌더링이 수행되기 전에 바인딩하는 모든 내용을 무시합니다.

관련 문제