/** * @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); }
/* * 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); } }