4 Stimmen

Übergabe von Werten aus meinem Java-Programm in GLSL mit lwjgl

Nehmen wir an, ich habe einen ziemlich komplexen Frag-Shader, um herauszufinden, wie viel Licht auf jedes Pixel fällt:

//shaders/screen.frag
varying vec4 vertColor; //unlit color
float intensity = 1.0; //lighting intensity.

//parameters vary from material to material:
float roughness_rms; //root-mean-square roughness (um).
float peak_angle; //how steep peaks are on average.
/* more parameters */

void main(){
    /* complex shader code to calculate intensity */
    gl_FragColor = intensity*vertColor; //set the light strength
}

Hier ist, wie ich die Shader initialisiere:

//something.java
import <needed crap>
int shader, fragShader;
shader=ARBShaderObjects.glCreateProgramObjectARB();
fragShader=createFragShader("shaders/screen.frag");
ARBShaderObjects.glAttachObjectARB(shader, fragShader);
ARBShaderObjects.glLinkProgramARB(shader);
ARBShaderObjects.glValidateProgramARB(shader);

Und wie ich sie verwende:

//something.java
ARBShaderObjects.glUseProgramObjectARB(shader);
GL11.glBegin(GL11.GL_QUADS);
//etc.

Mein Java-Code berechnet roughness_rms und andere Parameter für verschiedene Materialien. Außerdem ändern sich diese Parameter bei Einschlägen von Geschossen usw. Meine Frage ist: Wie kann ich Variablen von meinem Java an die Shader-Sprache übergeben, ohne den gesamten Shader neu zu generieren und neu zu kompilieren (das wäre langsam). Im Idealfall möchte ich bei jedem Quad, das ich zeichne, die Shader-Parameter aktualisieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X