/* * R_LoadBspLightmaps */ static void R_LoadBspLightmaps(const d_bsp_lump_t *l) { const char *c; if (!l->file_len) { r_load_model->lightmap_data = NULL; r_load_model->lightmap_scale = DEFAULT_LIGHTMAP_SCALE; } else { r_load_model->lightmap_data_size = l->file_len; r_load_model->lightmap_data = R_HunkAlloc(l->file_len); memcpy(r_load_model->lightmap_data, mod_base + l->file_ofs, l->file_len); } r_load_model->lightmap_scale = DEFAULT_LIGHTMAP_SCALE; // resolve lightmap scale if ((c = R_WorldspawnValue("lightmap_scale"))) { r_load_model->lightmap_scale = strtoul(c, NULL, 0); Com_Debug("Resolved lightmap_scale: %d\n", r_load_model->lightmap_scale); } }
/* * @brief Loads the lightmap and deluxemap information into memory so that it * may be parsed into GL textures for r_bsp_surface_t. This memory is actually * freed once all surfaces are fully loaded. */ static void R_LoadBspLightmaps(r_bsp_model_t *bsp, const d_bsp_lump_t *l) { const char *c; bsp->lightmaps = Z_LinkMalloc(sizeof(r_bsp_lightmaps_t), bsp); if (!l->file_len) { bsp->lightmaps->size = 0; bsp->lightmaps->data = NULL; } else { bsp->lightmaps->size = l->file_len; bsp->lightmaps->data = Z_LinkMalloc(l->file_len, bsp); memcpy(bsp->lightmaps->data, mod_base + l->file_ofs, l->file_len); } bsp->lightmaps->scale = DEFAULT_LIGHTMAP_SCALE; // resolve lightmap scale if ((c = R_WorldspawnValue("lightmap_scale"))) { bsp->lightmaps->scale = strtoul(c, NULL, 0); Com_Debug("Resolved lightmap_scale: %d\n", bsp->lightmaps->scale); } }
/* * R_ResolveBspLightParameters * * Resolves ambient light, brightness, and contrast levels from Worldspawn. */ static void R_ResolveBspLightParameters(void) { const char *c; // resolve ambient light if ((c = R_WorldspawnValue("ambient_light"))) { sscanf(c, "%f %f %f", &r_locals.ambient_light[0], &r_locals.ambient_light[1], &r_locals.ambient_light[2]); VectorScale(r_locals.ambient_light, BSP_LIGHT_AMBIENT_SCALE, r_locals.ambient_light); Com_Debug("Resolved ambient_light: %1.2f %1.2f %1.2f\n", r_locals.ambient_light[0], r_locals.ambient_light[1], r_locals.ambient_light[2]); } else { // ensure sane default VectorSet(r_locals.ambient_light, 0.1, 0.1, 0.1); } // resolve sun light if ((c = R_WorldspawnValue("sun_light"))) { r_locals.sun_light = atof(c) / 255.0; if (r_locals.sun_light > 1.0) // should never happen r_locals.sun_light = 1.0; Com_Debug("Resolved sun_light: %1.2f\n", r_locals.sun_light); } else { r_locals.sun_light = 0.0; } // resolve sun color if ((c = R_WorldspawnValue("sun_color"))) { sscanf(c, "%f %f %f", &r_locals.sun_color[0], &r_locals.sun_color[1], &r_locals.sun_color[2]); Com_Debug("Resolved sun_color: %1.2f %1.2f %1.2f\n", r_locals.sun_color[0], r_locals.sun_color[1], r_locals.sun_color[2]); } else { // ensure sane default VectorSet(r_locals.sun_color, 1.0, 1.0, 1.0); } // resolve brightness if ((c = R_WorldspawnValue("brightness"))) { r_locals.brightness = atof(c); } else { // ensure sane default r_locals.brightness = 1.0; } // resolve saturation if ((c = R_WorldspawnValue("saturation"))) { r_locals.saturation = atof(c); } else { // ensure sane default r_locals.saturation = 1.0; } // resolve contrast if ((c = R_WorldspawnValue("contrast"))) { r_locals.contrast = atof(c); } else { // ensure sane default r_locals.contrast = 1.0; } Com_Debug("Resolved brightness: %1.2f\n", r_locals.brightness); Com_Debug("Resolved saturation: %1.2f\n", r_locals.saturation); Com_Debug("Resolved contrast: %1.2f\n", r_locals.contrast); #if 0 //apply brightness, saturation and contrast to the colors ColorFilter(r_locals.ambient_light, r_locals.ambient_light, r_locals.brightness, r_locals.saturation, r_locals.contrast); Com_Debug("Scaled ambient_light: %1.2f %1.2f %1.2f\n", r_locals.ambient_light[0], r_locals.ambient_light[1], r_locals.ambient_light[2]); ColorFilter(r_locals.sun_color, r_locals.sun_color, r_locals.brightness, r_locals.saturation, r_locals.contrast); Com_Debug("Scaled sun_color: %1.2f %1.2f %1.2f\n", r_locals.sun_color[0], r_locals.sun_color[1], r_locals.sun_color[2]); #endif }