MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / UpdateTerrainLightmaps

Function UpdateTerrainLightmaps

Descent3/terrain.cpp:1053–1123  ·  view source on GitHub ↗

Generates lightmaps based on the info given by the .light field of each Terrain_seg

Source from the content-addressed store, hash-verified

1051
1052// Generates lightmaps based on the info given by the .light field of each Terrain_seg
1053void UpdateTerrainLightmaps() {
1054 int i, t;
1055
1056 // First make the wraparounds work right
1057
1058 // lower-left strip
1059 for (i = 0; i < 128; i++) {
1060 Terrain_seg[i * TERRAIN_WIDTH].r = Terrain_seg[i * TERRAIN_WIDTH + 128].r;
1061 Terrain_seg[i * TERRAIN_WIDTH].g = Terrain_seg[i * TERRAIN_WIDTH + 128].g;
1062 Terrain_seg[i * TERRAIN_WIDTH].b = Terrain_seg[i * TERRAIN_WIDTH + 128].b;
1063
1064 Terrain_seg[i].r = Terrain_seg[128 * TERRAIN_WIDTH + i].r;
1065 Terrain_seg[i].g = Terrain_seg[128 * TERRAIN_WIDTH + i].g;
1066 Terrain_seg[i].b = Terrain_seg[128 * TERRAIN_WIDTH + i].b;
1067 }
1068
1069 // lower-right strip
1070 for (i = 0; i < 128; i++) {
1071 Terrain_seg[i * TERRAIN_WIDTH + 255].r = Terrain_seg[i * TERRAIN_WIDTH + 127].r;
1072 Terrain_seg[i * TERRAIN_WIDTH + 255].g = Terrain_seg[i * TERRAIN_WIDTH + 127].g;
1073 Terrain_seg[i * TERRAIN_WIDTH + 255].b = Terrain_seg[i * TERRAIN_WIDTH + 127].b;
1074
1075 Terrain_seg[i + 128].r = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].r;
1076 Terrain_seg[i + 128].g = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].g;
1077 Terrain_seg[i + 128].b = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].b;
1078 }
1079
1080 // upper-left strip
1081 for (i = 0; i < 128; i++) {
1082 Terrain_seg[(i + 128) * TERRAIN_WIDTH].r = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].r;
1083 Terrain_seg[(i + 128) * TERRAIN_WIDTH].g = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].g;
1084 Terrain_seg[(i + 128) * TERRAIN_WIDTH].b = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].b;
1085
1086 Terrain_seg[255 * TERRAIN_WIDTH + i].r = Terrain_seg[127 * TERRAIN_WIDTH + i].r;
1087 Terrain_seg[255 * TERRAIN_WIDTH + i].g = Terrain_seg[127 * TERRAIN_WIDTH + i].g;
1088 Terrain_seg[255 * TERRAIN_WIDTH + i].b = Terrain_seg[127 * TERRAIN_WIDTH + i].b;
1089 }
1090
1091 // upper-right strip
1092 for (i = 0; i < 128; i++) {
1093 Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].r = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].r;
1094 Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].g = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].g;
1095 Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].b = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].b;
1096
1097 Terrain_seg[255 * TERRAIN_WIDTH + i + 128].r = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].r;
1098 Terrain_seg[255 * TERRAIN_WIDTH + i + 128].g = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].g;
1099 Terrain_seg[255 * TERRAIN_WIDTH + i + 128].b = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].b;
1100 }
1101
1102 int w = lm_w(TerrainLightmaps[0]);
1103
1104 for (i = 0; i < TERRAIN_DEPTH; i++) {
1105 for (t = 0; t < TERRAIN_WIDTH; t++) {
1106 int tseg = i * TERRAIN_WIDTH + t;
1107 terrain_segment *tp = &Terrain_seg[tseg];
1108 int x = t % 128;
1109 int y = 127 - (i % 128);
1110 int which = ((i / 128) * 2) + (t / 128);

Callers 3

DoRadiosityForTerrainFunction · 0.85
ReadTerrainChunksFunction · 0.85
GenerateTerrainLightFunction · 0.85

Calls 3

lm_wFunction · 0.85
GR_RGB16Function · 0.85
lm_dataFunction · 0.85

Tested by

no test coverage detected