2016-05-19 16 views
2

Ich arbeite an Shadern für eine OpenGL/Java-Engine erstellen, die ich baue. Ich habe eine Weile gesucht, aber ich finde keinen Weg, ein Array variabler Größe zu haben. Ich weiß, dass ich schaffen kann ein statisch eine Größe wie:Variable Größe Array GLSL

uniform vec3 variable[4]; 

Aber wie würde ich mich über eine Reihe von Größe X zu schaffen, basierend auf, was ich von der CPU auf den Shader laden, wenn dies überhaupt möglich ist.

Vielen Dank im Voraus!

Antwort

3

GLSL erlaubt keine Arraygrößen variieren. Es unterstützt jedoch ab OpenGL 4 Shader Storage Buffer Objects, die unterschiedliche Größen haben können.

Mehr Informationen über SSBOs: https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

darüber nachzudenken jetzt, ein Hack, wie es auch tun könnte Ihre Daten in eine Textur zu kodieren und dann, dass in den Shader übergeben. Zum Beispiel könnte jede der 4 rgba-Komponenten 1 Byte der Daten sein, die Sie übergeben wollten. Bei Daten, die größer als ein Byte sind, würden Sie sie in Bytes aufteilen.

2

Sie können nicht.

Entweder tun als CConard96 sagte, oder wenn Sie nicht SSBOs verwenden können, dann nur einen fest codierten Maximalwert deklarieren und einen niedrigeren Wert festgelegt, die Sie benötigen.

Zum Beispiel wie Nicol Bolas sagt here:

#define MAX_NUM_TOTAL_LIGHTS 100 
struct Light { 
    vec3 position; 
    float padding; 
} 
layout (std140) uniform Lights { 
    Light light[MAX_NUM_TOTAL_LIGHTS]; 
    int numLights; 
}