2 Copyright (C) 1999-2007 id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27 Lightmap allocation has to be done after all flood filling and
28 visible surface determination.
33 mapDrawSurface_t **surfsOnShader;
34 int allocatedSurfsOnShader;
37 int allocated[ LIGHTMAP_WIDTH ];
40 int c_exactLightmap = 0;
41 int c_planarPatch = 0;
42 int c_nonplanarLightmap = 0;
45 void PrepareNewLightmap( void ) {
46 memset( allocated, 0, sizeof( allocated ) );
54 returns a texture number and the position inside it
57 qboolean AllocLMBlock (int w, int h, int *x, int *y)
62 best = LIGHTMAP_HEIGHT;
64 for ( i=0 ; i <= LIGHTMAP_WIDTH-w ; i++ ) {
67 for (j=0 ; j<w ; j++) {
68 if (allocated[i+j] >= best) {
71 if (allocated[i+j] > best2) {
72 best2 = allocated[i+j];
75 if (j == w) { // this is a valid spot
81 if (best + h > LIGHTMAP_HEIGHT) {
85 for (i=0 ; i<w ; i++) {
86 allocated[*x + i] = best + h;
95 AllocateLightmapForPatch
98 //#define LIGHTMAP_PATCHSHIFT
104 AllocateLightmapForSurface
108 //#define LIGHTMAP_BLOCK 16