2015-10-25 13 views
6

Sto tentando di associare le variabili uniformi per un determinato luogo, ma al momento non riesco a capire come:Come si collegano posizioni uniformi in GLSL?

Per associare attributi (così per esempio vertex/dati normali), io uso il seguente codice:

Override 
protected void bindAttributes() { 
    super.bindAttribute(1, "position"); 
    super.bindAttribute(2, "textureCoords"); 
    super.bindAttribute(3, "normal"); 
} 
protected void bindAttribute(int attribute, String variableName){ 
    GL20.glBindAttribLocation(programID, attribute, variableName); 
} 

Mi piacerebbe fare lo stesso genere di cose per le variabili uniformi.

Attualmente, sto ottenendo le posizioni automaticamente assegnati in questo modo:

public int location_transformationMatrix; 
public int location_lightPosition; 
public int location_lightColour; 

@Override 
public void getAllUniformLocations(){ 
    location_transformationMatrix = super.getUniformLocation("transformationMatrix"); 
    location_lightPosition = super.getUniformLocation("lightPosition"); 
    location_lightColour = super.getUniformLocation("lightColour"); 
} 

Tuttavia, dal momento che sto allora legando gli attributi, questo è, nella migliore delle ipotesi, con la conseguente perdita di dati, come l'illuminazione e le normali e, nel peggiore dei casi, sta bloccando il gioco per circa il 60% delle persone che cercano di giocarci.

risposta

2

uniformi Shader possono, a partire dal OpenGL 4.3, essere impostati utilizzando qualificazioni di layout:

layout(location = 2) uniform mat4 modelToWorldMatrix; 

volontà ad esempio associare il locationn della divisa modelToWorldMatrix alla posizione 2. Per maggiori dettagli hanno un aspetto here.

Prima di 4.3 (o meglio per dire senza l'estensione ARB_explicit_uniform_location) non c'era modo di sistemare una posizione di uniformi.

+0

Funziona ancora se uso '#version 130' nella parte superiore del mio shader? – Joehot200

+0

No. Come ho detto, è richiesto OpenGL 4.3 o successivo. Questo significa '#version 430'. O hai l'estensione specifica disponibile. – BDL