可以说我有搞清楚一个相当复杂的frag着色器到底有多少光进入每个像素从我的Java程序中传递值到GLSL:使用LWJGL
//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
}
这里是我初始化着色器:
//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);
我如何使用它们:
//something.java
ARBShaderObjects.glUseProgramObjectARB(shader);
GL11.glBegin(GL11.GL_QUADS);
//etc.
我的Java代码计算roughness_rms等parame各种材料形成。此外,当子弹等有影响时,这些参数会发生变化。 我的问题是:如何将变量从我的java传递到着色器语言,而不重新生成整个着色器并重新编译它(这会很慢)。理想情况下,我绘制的每个四边形都希望更新着色器参数。
我无法使这些功能正常工作。我尝试'ARBShaderObjects.glUseProgram',它不起作用。如果它们不在lwjgl的ARbShaderObjects类中,那么它们在哪里? – 2011-05-15 20:57:49
哦,我得到它的工作。您使用GL20类,并将这些命令应用于着色器,而不是碎片着色器。 – 2011-05-15 22:13:48
我不能说lwjgl的细节(我主要使用OpenGL与Python),但我正在修改我的帖子,以澄清,制服应用于一个完整的程序,而不是一个着色器。 – 2011-05-16 08:08:02