2015-03-05 4 views
0

Я получаю ошибку сегментации, когда я использую glUniformMatrix4fv, чтобы передать матрицу в униформу mat4.ошибка сегментации при использовании glUniformMatrix в сочетании с массивом

Мой шейдер выглядит следующим образом:

#version 330 core 

layout(location = 0) in vec3 pos; 

layout(std140) uniform ModelMatrixBuffer { 
    mat4 ModelMatrix[2]; 
}; 

out vec3 color; 

uniform mat4 ViewProj; 

void main() { 
    gl_Position = ViewProj * ModelMatrix[0] * vec4(pos, 1.f); 
    color = vec3(1,1,0); 
} 

Я хочу передать GLM :: mat4 к ViewProj. Он отлично работает, когда я изменяю размер моего массива ModelMatrix. Например:

layout(std140) uniform ModelMatrixBuffer { 
    mat4 ModelMatrix[1]; 
}; 

Тогда все работает нормально!

ответ

0

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

uniform int arr[3]; 
uniform int arr2[3]; 
uniform int i; 

Здесь индексы будут 0,1,2, потому что glGetActiveUniform будет рассчитывать только на первый элемент массива, здесь будет arr[0] и arr2[0]. Однако местоположение будет увеличиваться для каждого элемента массива. Таким образом, у меня будет место 6, а не 2.

Моя ошибка в том, что у меня была карта со всей униформой, и я сохранил индекс вместо местоположения. Поэтому я попытался поместить мою матрицу ViewProj во второй элемент массива ModelMatrix. Почему это закончилось ошибкой сегментации, я не знаю. Они оба mat4.