opengl - GLSL subroutine not recognized -
i have tried subroutine feature of opengl 4.0 lwjgl , can't create work. when querying gl_active_subroutine_uniform_locations, 0, , subroutine uniform. when querying each routine's index, -1, tells me don't "exist".
here shaders: vertex shader:
#version 400 subroutine vec4 getcolor(vec4 color); uniform mat4 projectionmatrix; uniform mat4 viewmatrix; uniform mat4 modelmatrix; subroutine uniform getcolor mycolor; layout(location = 0) in vec4 inposition; layout(location = 1) in vec4 incolor; // smooth out vec4 vcolor; subroutine (getcolor) vec4 invertcolor(vec4 color){ homecoming vec4(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, color.a);} subroutine (getcolor) vec4 realcolor(vec4 color){ homecoming color;} void main(){ gl_position = projectionmatrix * viewmatrix * modelmatrix * inposition; vcolor = invertcolor(incolor);}
fragment shader:
#version 400 // smooth in vec4 vcolor; out vec4 pixel; void main(){ pixel = vcolor;}
and here's code:
shader.useprogram(); routineinvertcolor = gl40.glgetsubroutineindex(shader.getprogramid(), gl20.gl_vertex_shader, "invertcolor"); routinerealcolor = gl40.glgetsubroutineindex(shader.getprogramid(), gl20.gl_vertex_shader, "realcolor"); routineuniform = gl40.glgetsubroutineuniformlocation(shader.getprogramid(), gl20.gl_vertex_shader, "mycolor"); intbuffer subroutinebuffer = bufferutils.createintbuffer(1).put(routineinvertcolor); system.out.println(gl40.glgetprogramstagei(shader.getprogramid(), gl20.gl_vertex_shader, gl40.gl_active_subroutine_uniform_locations)); system.out.println(routineinvertcolor + " " + routinerealcolor + " " + routineuniform); gl40.gluniformsubroutinesu(gl20.gl_vertex_shader, subroutinebuffer);
i found it. doing stupid. before that, mixed on stackoverflow invertcolor(incolor) , getcolor(incolor):
what doing:
getcolor(incolor);
what should have been doing:
mycolor(incolor);
opengl glsl shader lwjgl
No comments:
Post a Comment