GLBasic User Manual

Main sections

X_PUTSHADER

X_PUTSHADER name$, wert#



With this command you can change the value of a "uniform float" variable in the current (X_SETSHADER) shader program. This allows you to pass values like GETTIMERALL() or RGB values to your vertex and fragment programs.

// test.frag
uniform float t;
varying float u, v;

void main()
{
u += sin(t);
v += t;
gl_FragColor = vec4(sin(40*u),sin(40*v),0.0,1.0);
}


// test.vert
uniform float t;
const float pi = 3.1415926535;

varying float u, v;

void main()
{
// Convert from the [-5,5]x[-5,5] range provided into radians
// between 0 and 2pi
u = (gl_Vertex.x + 5.0) / 10.0 * 2 * pi;
v = (gl_Vertex.y + 5.0) / 10.0 * 2 * pi;
float r = sin(4*u+t)/4+1;
float R = cos(6*cos(u)-t)/4+3;

float a = R+r*cos(v);
vec3 world = vec3(a*cos(u), a*sin(u), r*sin(v));

gl_Position = gl_ModelViewProjectionMatrix * vec4(world,1.0);
}


// --------------------------------- //
// Project: Shaders
// Start: Monday, September 25, 2006
// IDE Version: 3.262

LOCAL shaders$[], num, current$
    IF X_LOADSHADER(13, "toon.vert", "toon.frag") = FALSE
        PRINT "Shader failed to load: ", 100,100
        SHOWSCREEN
        MOUSEWAIT
        END
    ENDIF

    CreateTorus(0, 5, 10, 12, 9, 2, 2, RGB(0xff, 0xff, 0xff))
    // CreateSphere(0, 10, 9, RGB(0xff, 0xff, 0xff) )
    WHILE TRUE
        DRAWRECT 0,0,640,480,RGB(255,128,0)
        X_MAKE3D 1,500, 45
        X_CAMERA 0,0,-100, 0,0,0

        X_SPOT_LT 0, RGB(255,255,255),100,100,-1000, -.1,-.1,1, 360

        X_ROTATION 45, 1,1,0
        X_ROTATION GETTIMERALL()/100, 0,1,.2
        X_SETSHADER 13
        X_PUTSHADER "t", GETTIMERALL()
        X_DRAWOBJ 0, 0
        SHOWSCREEN
    WEND

See also...