Example #1
0
/**
 * @brief
 */
void R_UseMaterial_default(const r_material_t *material) {

	r_default_program_t *p = &r_default_program;

	if (!material || !material->normalmap ||
	        !r_bumpmap->value || r_draw_bsp_lightmaps->value) {

		R_DisableAttribute(R_ARRAY_TANGENT);
		R_ProgramParameter1i(&p->normalmap, 0);
		return;
	}

	R_EnableAttribute(R_ARRAY_TANGENT);

	R_BindNormalmapTexture(material->normalmap->texnum);
	R_ProgramParameter1i(&p->normalmap, 1);

	if (material->specularmap) {
		R_BindSpecularmapTexture(material->specularmap->texnum);
		R_ProgramParameter1i(&p->glossmap, 1);
	} else {
		R_ProgramParameter1i(&p->glossmap, 0);
	}

	R_ProgramParameter1f(&p->bump, material->cm->bump * r_bumpmap->value);
	R_ProgramParameter1f(&p->parallax, material->cm->parallax * r_parallax->value);
	R_ProgramParameter1f(&p->hardness, material->cm->hardness * r_hardness->value);
	R_ProgramParameter1f(&p->specular, material->cm->specular * r_specular->value);
}
Example #2
0
/*
 * R_SetSurfaceState_default
 */
static void R_SetSurfaceState_default(const r_bsp_surface_t *surf) {
	r_image_t *image;
	float a;

	if (r_state.blend_enabled) { // alpha blend
		switch (surf->texinfo->flags & (SURF_BLEND_33 | SURF_BLEND_66)) {
		case SURF_BLEND_33:
			a = 0.33;
			break;
		case SURF_BLEND_66:
			a = 0.66;
			break;
		default: // both flags mean use the texture's alpha channel
			a = 1.0;
			break;
		}

		glColor4f(1.0, 1.0, 1.0, a);
	}

	image = surf->texinfo->image;

	if (texunit_diffuse.enabled) // diffuse texture
		R_BindTexture(image->texnum);

	if (texunit_lightmap.enabled) // lightmap texture
		R_BindLightmapTexture(surf->lightmap_texnum);

	if (r_state.lighting_enabled) { // hardware lighting

		if (r_bumpmap->value) { // bump mapping

			if (image->normalmap) {
				R_BindDeluxemapTexture(surf->deluxemap_texnum);
				R_BindNormalmapTexture(image->normalmap->texnum);

				R_EnableBumpmap(&image->material, true);
			} else
				R_EnableBumpmap(NULL, false);
		}

		if (surf->light_frame == r_locals.light_frame) // dynamic light sources
			R_EnableLights(surf->lights);
		else
			R_EnableLights(0);
	}
}