예제 #1
0
void R_ProgramParameter1f (const char* name, GLfloat value)
{
	r_progvar_t* v;

	if (!(v = R_ProgramVariable(GL_UNIFORM, name)))
		return;

	qglUniform1f(v->location, value);
}
예제 #2
0
/*
 * R_ProgramParameter1f
 */
void R_ProgramParameter1f(r_uniform1f_t *variable, GLfloat value) {

	if (!variable || variable->location == -1) {
		Com_Warn("NULL or invalid variable\n");
		return;
	}

	if (variable->value.f == value)
		return;

	qglUniform1f(variable->location, value);
	variable->value.f = value;

	R_GetError(variable->name);
}
예제 #3
0
//Does a water warp on the pre-fragmented glpoly_t chain
void EmitWaterPolys (msurface_t *fa) {
    glpoly_t *p;
    float *v, s, t, os, ot;
    int i;
    byte *col;
    extern cvar_t r_telecolor, r_watercolor, r_slimecolor, r_lavacolor;
    float wateralpha = bound((1 - r_refdef2.max_watervis), r_wateralpha.value, 1);

    vec3_t nv;
    GLint shader, u_gamma, u_contrast;

    GL_DisableMultitexture();

    if (gl_fogenable.value)
        glEnable(GL_FOG);

    GL_Bind (fa->texinfo->texture->gl_texturenum);

    /* FIXME: do the uniforms somewhere else */
    shader = glsl_shaders[SHADER_TURB].shader;
    qglUseProgram(shader);
    u_gamma    = qglGetUniformLocation(shader, "gamma");
    u_contrast = qglGetUniformLocation(shader, "contrast");
    qglUniform1f(u_gamma, v_gamma.value);
    qglUniform1f(u_contrast, v_contrast.value);

    if (r_fastturb.value)
    {
        GL_Bind(whitetexture);

        if (strstr (fa->texinfo->texture->name, "water") || strstr (fa->texinfo->texture->name, "mwat"))
            col = r_watercolor.color;
        else if (strstr (fa->texinfo->texture->name, "slime"))
            col = r_slimecolor.color;
        else if (strstr (fa->texinfo->texture->name, "lava"))
            col = r_lavacolor.color;
        else if (strstr (fa->texinfo->texture->name, "tele"))
            col = r_telecolor.color;
        else
            col = (byte *) &fa->texinfo->texture->flatcolor3ub;

        glColor3ubv (col);

        if (wateralpha < 1.0 && wateralpha >= 0) {
            glEnable (GL_BLEND);
            col[3] = wateralpha*255;
            glColor4ubv (col); // 1, 1, 1, wateralpha
            glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
            if (wateralpha < 0.9)
                glDepthMask (GL_FALSE);
        }

        EmitFlatWaterPoly (fa);

        if (wateralpha < 1.0 && wateralpha >= 0) {
            glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
            glColor3ubv (color_white);
            glDisable (GL_BLEND);
            if (wateralpha < 0.9)
                glDepthMask (GL_TRUE);
        }

        glColor3ubv (color_white);
    } else {
        for (p = fa->polys; p; p = p->next) {
            glBegin(GL_POLYGON);
            for (i = 0, v = p->verts[0]; i < p->numverts; i++, v += VERTEXSIZE) {
                os = v[3];
                ot = v[4];

                s = os + SINTABLE_APPROX(ot * 2 + r_refdef2.time);
                s *= (1.0 / 64);

                t = ot + SINTABLE_APPROX(os * 2 + r_refdef2.time);
                t *= (1.0 / 64);

                //VULT RIPPLE : Not sure where this came from first, but I've seen in it more than one engine
                //I got this one from the QMB engine though
                VectorCopy(v, nv);
                //Over 20 this setting gets pretty cheaty
                if (amf_waterripple.value && (cls.demoplayback || cl.spectator) && !strstr (fa->texinfo->texture->name, "tele"))
                    nv[2] = v[2] + (bound(0, amf_waterripple.value, 20)) *sin(v[0]*0.02+r_refdef2.time)*sin(v[1]*0.02+r_refdef2.time)*sin(v[2]*0.02+r_refdef2.time);

                glTexCoord2f (s, t);
                glVertex3fv (nv);

            }
            glEnd();
        }
    }
    qglUseProgram(0);

    if (gl_fogenable.value)
        glDisable(GL_FOG);
}
예제 #4
0
파일: tr_dsa.c 프로젝트: ArtanAhmeti/lab
GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0)
{
	GL_UseProgram(program);
	qglUniform1f(location, v0);
}