2016-12-16 2 views
0

я получил GLSL Shader с теми равномерными переменными:GLSL Униформа в едином блоке - как получить доступ?

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

Как установить эти две матрицы из моей программы? К сожалению, я не могу редактировать код GLSL, так как я только пишу плагин для существующего приложения.

Я пробовал:

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

ни работы.

В блоке GlobalData есть намного больше другой формы, которую я не хочу менять - все, о чем я забочусь, это worldMatrix.

Как это сделать?

ответ

0

Я только пишу плагин для существующего приложения.

Тогда вы этого не сделаете. Если вы не можете получить доступ к буферному объекту, который будет использовать плагин для хранения этих матриц.

GlobalData - uniform block; он представляет собой шейдерную сторону UBO. Сторона С ++ будет хранить однородные данные в буфере. Поэтому, если ваше приложение не дает вам доступ к этому буфере, вы ничего не можете с этим поделать.

Возможно, вы сможете связать свой собственный буфер, но если приложение не предназначено для того, чтобы вы могли переопределить его буферы, оно, вероятно, переопределит все, что вы связываете, до того, как произойдет рендеринг.