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 ){
61 best = LIGHTMAP_HEIGHT;
63 for ( i = 0 ; i <= LIGHTMAP_WIDTH - w ; i++ ) {
66 for ( j = 0 ; j < w ; j++ ) {
67 if ( allocated[i + j] >= best ) {
70 if ( allocated[i + j] > best2 ) {
71 best2 = allocated[i + j];
74 if ( j == w ) { // this is a valid spot
80 if ( best + h > LIGHTMAP_HEIGHT ) {
84 for ( i = 0 ; i < w ; i++ ) {
85 allocated[*x + i] = best + h;
94 AllocateLightmapForPatch
97 //#define LIGHTMAP_PATCHSHIFT
103 AllocateLightmapForSurface
107 //#define LIGHTMAP_BLOCK 16