From c14d58e2967c83e213d91d5645cf978f551a0b5f Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 29 Jul 2008 16:57:03 +0000 Subject: [PATCH] patchset fixed for current svn git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3980 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- .../gtkradiant-nexuiz-patchset.diff | 459 +++++++++++++----- misc/gtkradiant/mergepatches.sh | 12 +- .../both-UTpicomodelase.diff | 459 ------------------ .../both-UTpicomodelnormals.diff | 101 ---- .../gtkradiant-modelnormals.diff | 34 -- .../gtkradiant-nexuizfixes.diff | 13 - .../both-obj.diff | 32 +- .../q3map2-UTavgcolorfix.diff | 0 .../q3map2-UTfloodlight.diff | 0 .../q3map2-UTlmexposure.diff | 0 .../q3map2-UTtrianglecheck.diff | 0 .../q3map2-decomptexcoords.diff | 0 .../q3map2-snapplane.diff | 0 13 files changed, 371 insertions(+), 739 deletions(-) delete mode 100644 misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelase.diff delete mode 100644 misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelnormals.diff delete mode 100644 misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff delete mode 100644 misc/gtkradiant/singlepatches-radiant15/gtkradiant-nexuizfixes.diff rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/both-obj.diff (79%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-UTavgcolorfix.diff (100%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-UTfloodlight.diff (100%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-UTlmexposure.diff (100%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-UTtrianglecheck.diff (100%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-decomptexcoords.diff (100%) rename misc/gtkradiant/{singlepatches-radiant15 => singlepatches}/q3map2-snapplane.diff (100%) diff --git a/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff b/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff index e3c70b86c..22e667f08 100644 --- a/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff +++ b/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff @@ -113,9 +113,9 @@ Index: libs/picomodel/pm_obj.c } Index: tools/quake3/q3map2/convert_map.c =================================================================== ---- tools/quake3/q3map2/convert_map.c (revision 290) +--- tools/quake3/q3map2/convert_map.c (revision 191) +++ tools/quake3/q3map2/convert_map.c (working copy) -@@ -45,6 +45,105 @@ +@@ -46,6 +46,105 @@ #define SNAP_FLOAT_TO_INT 4 #define SNAP_INT_TO_FLOAT (1.0 / SNAP_FLOAT_TO_INT) @@ -221,7 +221,7 @@ Index: tools/quake3/q3map2/convert_map.c static void ConvertBrush( FILE *f, int num, bspBrush_t *brush, vec3_t origin ) { int i, j; -@@ -53,12 +152,17 @@ +@@ -54,12 +153,17 @@ bspShader_t *shader; char *texture; bspPlane_t *plane; @@ -239,7 +239,7 @@ Index: tools/quake3/q3map2/convert_map.c /* clear out build brush */ for( i = 0; i < buildBrush->numsides; i++ ) -@@ -108,9 +212,88 @@ +@@ -109,9 +213,88 @@ /* get build side */ buildSide = &buildBrush->sides[ i ]; @@ -328,7 +328,7 @@ Index: tools/quake3/q3map2/convert_map.c /* get texture name */ if( !Q_strncasecmp( buildSide->shaderInfo->shader, "textures/", 9 ) ) -@@ -129,14 +312,21 @@ +@@ -130,14 +313,21 @@ /* print brush side */ /* ( 640 24 -224 ) ( 448 24 -224 ) ( 448 -232 -224 ) common/caulk 0 48 0 0.500000 0.500000 0 0 0 */ @@ -354,11 +354,11 @@ Index: tools/quake3/q3map2/convert_map.c Index: tools/quake3/q3map2/main.c =================================================================== ---- tools/quake3/q3map2/main.c (revision 290) +--- tools/quake3/q3map2/main.c (revision 191) +++ tools/quake3/q3map2/main.c (working copy) -@@ -276,6 +276,18 @@ - else - Sys_Printf( "Unknown conversion format \"%s\". Defaulting to ASE.\n", argv[ i ] ); +@@ -541,6 +541,18 @@ + Sys_Printf( "Unknown conversion format \"%s\". Defaulting to ASE.\n", argv[ i ] ); + } } + else if( !strcmp( argv[ i ], "-ne" ) ) + { @@ -377,9 +377,9 @@ Index: tools/quake3/q3map2/main.c /* clean up map name */ Index: tools/quake3/q3map2/model.c =================================================================== ---- tools/quake3/q3map2/model.c (revision 290) +--- tools/quake3/q3map2/model.c (revision 193) +++ tools/quake3/q3map2/model.c (working copy) -@@ -221,6 +221,8 @@ +@@ -222,6 +222,8 @@ byte *color; picoIndex_t *indexes; remap_t *rm, *glob; @@ -388,7 +388,7 @@ Index: tools/quake3/q3map2/model.c /* get model */ -@@ -399,9 +401,8 @@ +@@ -398,9 +400,8 @@ /* ydnar: giant hack land: generate clipping brushes for model triangles */ if( si->clipModel || (spawnFlags & 2) ) /* 2nd bit */ { @@ -601,27 +601,32 @@ Index: tools/quake3/q3map2/model.c } Index: tools/quake3/q3map2/map.c =================================================================== ---- tools/quake3/q3map2/map.c (revision 290) +--- tools/quake3/q3map2/map.c (revision 193) +++ tools/quake3/q3map2/map.c (working copy) -@@ -183,9 +183,15 @@ +@@ -184,7 +184,7 @@ snaps a plane to normal/distance epsilons */ -void SnapPlane( vec3_t normal, vec_t *dist ) +void SnapPlane( vec3_t normal, vec_t *dist, vec3_t center ) { -- SnapNormal( normal ); + // SnapPlane disabled by LordHavoc because it often messes up collision + // brushes made from triangles of embedded models, and it has little effect +@@ -193,7 +193,13 @@ + SnapPlane reenabled by namespace because of multiple reports of + q3map2-crashes which were triggered by this patch. + */ + // div0: ensure the point "center" stays on the plane (actually, this + // rotates the plane around the point center). + // if center lies on the plane, it is guaranteed to stay on the plane by + // this fix. + vec_t centerDist = DotProduct(normal, center); -+ SnapNormal( normal ); + SnapNormal( normal ); + *dist += (DotProduct(normal, center) - centerDist); if( fabs( *dist - Q_rint( *dist ) ) < distanceEpsilon ) *dist = Q_rint( *dist ); -@@ -199,7 +205,7 @@ +@@ -207,7 +213,7 @@ must be within an epsilon distance of the plane */ @@ -630,7 +635,7 @@ Index: tools/quake3/q3map2/map.c #ifdef USE_HASHING -@@ -207,10 +213,14 @@ +@@ -215,10 +221,14 @@ int i, j, hash, h; plane_t *p; vec_t d; @@ -647,7 +652,7 @@ Index: tools/quake3/q3map2/map.c hash = (PLANE_HASHES - 1) & (int) fabs( dist ); /* search the border bins as well */ -@@ -251,7 +261,13 @@ +@@ -259,7 +269,13 @@ plane_t *p; @@ -664,9 +669,9 @@ Index: tools/quake3/q3map2/map.c if( PlaneEqual( p, normal, dist ) ) Index: tools/quake3/q3map2/shaders.c =================================================================== ---- tools/quake3/q3map2/shaders.c (revision 290) +--- tools/quake3/q3map2/shaders.c (revision 191) +++ tools/quake3/q3map2/shaders.c (working copy) -@@ -747,8 +747,14 @@ +@@ -793,8 +793,14 @@ } if( VectorLength( si->color ) <= 0.0f ) @@ -684,22 +689,21 @@ Index: tools/quake3/q3map2/shaders.c Index: tools/quake3/q3map2/light_ydnar.c =================================================================== ---- tools/quake3/q3map2/light_ydnar.c (revision 290) +--- tools/quake3/q3map2/light_ydnar.c (revision 191) +++ tools/quake3/q3map2/light_ydnar.c (working copy) -@@ -1449,6 +1449,8 @@ - vec3_t color, averageColor, averageDir, total, temp, temp2; +@@ -1767,6 +1864,8 @@ float tests[ 4 ][ 2 ] = { { 0.0f, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } }; trace_t trace; + float stackLightLuxels[ STACK_LL_SIZE ]; + vec3_t flood; + float *floodlight; /* bail if this number exceeds the number of raw lightmaps */ -@@ -1871,6 +1873,78 @@ - /* free light list */ +@@ -2223,6 +2332,78 @@ FreeTraceLights( &trace ); -+ /* ----------------------------------------------------------------- + /* ----------------------------------------------------------------- + floodlight pass + ----------------------------------------------------------------- */ + @@ -771,10 +775,11 @@ Index: tools/quake3/q3map2/light_ydnar.c + } + } + - /* ----------------------------------------------------------------- - filter pass - ----------------------------------------------------------------- */ -@@ -3123,7 +3197,320 @@ ++ /* ----------------------------------------------------------------- + dirt pass + ----------------------------------------------------------------- */ + +@@ -3587,7 +3768,320 @@ CreateTraceLightsForBounds( mins, maxs, normal, info->numSurfaceClusters, &surfaceClusters[ info->firstSurfaceCluster ], LIGHT_SURFACES, trace ); } @@ -1097,9 +1102,9 @@ Index: tools/quake3/q3map2/light_ydnar.c + Index: tools/quake3/q3map2/light.c =================================================================== ---- tools/quake3/q3map2/light.c (revision 290) +--- tools/quake3/q3map2/light.c (revision 191) +++ tools/quake3/q3map2/light.c (working copy) -@@ -1363,6 +1363,56 @@ +@@ -1378,6 +1378,56 @@ break; } @@ -1156,9 +1161,9 @@ Index: tools/quake3/q3map2/light.c /* normalize to get primary light direction */ VectorNormalize( gp->dir, gp->dir ); -@@ -1544,6 +1594,12 @@ - qboolean minVertex, minGrid; - const char *value; +@@ -1661,6 +1711,12 @@ + RunThreadsOnIndividual( numRawLightmaps, qtrue, DirtyRawLightmap ); + } + /* floodlight them up */ + if( floodlighty ) @@ -1167,19 +1172,19 @@ Index: tools/quake3/q3map2/light.c + RunThreadsOnIndividual( numRawLightmaps, qtrue, FloodLightRawLightmap ); + } - /* ydnar: smooth normals */ - if( shade ) -@@ -1675,6 +1731,7 @@ + /* ydnar: set up light envelopes */ + SetupEnvelopes( qfalse, fast ); +@@ -1703,6 +1759,7 @@ /* flag bouncing */ bouncing = qtrue; VectorClear( ambientColor ); -+ floodlighty = qfalse; ++ floodlighty = false; /* generate diffuse lights */ RadFreeLights(); -@@ -2114,6 +2171,21 @@ - loMem = qtrue; - Sys_Printf( "Enabling low-memory (potentially slower) lighting mode\n" ); +@@ -2191,6 +2256,21 @@ + cpmaHack = qtrue; + Sys_Printf( "Enabling Challenge Pro Mode Asstacular Vertex Lighting Mode (tm)\n" ); } + else if( !strcmp( argv[ i ], "-floodlight" ) ) + { @@ -1197,21 +1202,21 @@ Index: tools/quake3/q3map2/light.c + Sys_Printf( "Low Quality FloodLighting enabled\n" ); + } - else - Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] ); -@@ -2156,6 +2228,7 @@ - + /* r7: dirtmapping */ + else if( !strcmp( argv[ i ], "-dirty" ) ) +@@ -2279,6 +2359,7 @@ /* ydnar: set up optimization */ SetupBrushes(); + SetupDirt(); + SetupFloodLight(); SetupSurfaceLightmaps(); /* initialize the surface facet tracing */ Index: tools/quake3/q3map2/lightmaps_ydnar.c =================================================================== ---- tools/quake3/q3map2/lightmaps_ydnar.c (revision 290) +--- tools/quake3/q3map2/lightmaps_ydnar.c (revision 191) +++ tools/quake3/q3map2/lightmaps_ydnar.c (working copy) -@@ -413,6 +413,12 @@ +@@ -414,6 +414,12 @@ lm->superNormals = safe_malloc( size ); memset( lm->superNormals, 0, size ); @@ -1226,25 +1231,25 @@ Index: tools/quake3/q3map2/lightmaps_ydnar.c if( lm->superClusters == NULL ) Index: tools/quake3/q3map2/q3map2.h =================================================================== ---- tools/quake3/q3map2/q3map2.h (revision 290) +--- tools/quake3/q3map2/q3map2.h (revision 191) +++ tools/quake3/q3map2/q3map2.h (working copy) -@@ -265,6 +265,7 @@ - #define SUPER_NORMAL_SIZE 3 +@@ -267,6 +267,7 @@ + #define SUPER_NORMAL_SIZE 4 #define SUPER_DELUXEL_SIZE 3 #define BSP_DELUXEL_SIZE 3 +#define SUPER_FLOODLIGHT_SIZE 1 #define VERTEX_LUXEL( s, v ) (vertexLuxels[ s ] + ((v) * VERTEX_LUXEL_SIZE)) #define RAD_VERTEX_LUXEL( s, v )(radVertexLuxels[ s ] + ((v) * VERTEX_LUXEL_SIZE)) -@@ -273,6 +274,7 @@ - #define SUPER_LUXEL( s, x, y ) (lm->superLuxels[ s ] + ((((y) * lm->sw) + (x)) * SUPER_LUXEL_SIZE)) +@@ -279,6 +280,7 @@ #define SUPER_ORIGIN( x, y ) (lm->superOrigins + ((((y) * lm->sw) + (x)) * SUPER_ORIGIN_SIZE)) #define SUPER_NORMAL( x, y ) (lm->superNormals + ((((y) * lm->sw) + (x)) * SUPER_NORMAL_SIZE)) + #define SUPER_DIRT( x, y ) (lm->superNormals + ((((y) * lm->sw) + (x)) * SUPER_NORMAL_SIZE) + 3) /* stash dirtyness in normal[ 3 ] */ +#define SUPER_FLOODLIGHT( x, y ) (lm->superFloodLight + ((((y) * lm->sw) + (x)) * SUPER_FLOODLIGHT_SIZE) ) - #define SUPER_CLUSTER( x, y ) (lm->superClusters + (((y) * lm->sw) + (x))) - #define SUPER_DELUXEL( x, y ) (lm->superDeluxels + ((((y) * lm->sw) + (x)) * SUPER_DELUXEL_SIZE)) - #define BSP_DELUXEL( x, y ) (lm->bspDeluxels + ((((y) * lm->w) + (x)) * BSP_DELUXEL_SIZE)) -@@ -1364,6 +1366,7 @@ + + + +@@ -1392,6 +1395,7 @@ float *superDeluxels; /* average light direction */ float *bspDeluxels; @@ -1252,66 +1257,280 @@ Index: tools/quake3/q3map2/q3map2.h } rawLightmap_t; -@@ -1670,6 +1673,9 @@ - void SmoothNormals( void ); +@@ -1704,6 +1708,10 @@ + float DirtForSample( trace_t *trace ); + void DirtyRawLightmap( int num ); - void MapRawLightmap( int num ); +void SetupFloodLight(); +float FloodLightForSample( trace_t *trace ); +void FloodLightRawLightmap( int num ); ++ void IlluminateRawLightmap( int num ); void IlluminateVertexes( int num ); -@@ -2037,6 +2043,12 @@ - Q_EXTERN qboolean sunOnly; - Q_EXTERN int approximateTolerance Q_ASSIGN( 0 ); - Q_EXTERN qboolean noCollapse; +@@ -2098,6 +2106,13 @@ + Q_EXTERN float dirtScale Q_ASSIGN( 1.0f ); + Q_EXTERN float dirtGain Q_ASSIGN( 1.0f ); + +Q_EXTERN qboolean debugnormals Q_ASSIGN( qfalse ); +Q_EXTERN qboolean floodlighty Q_ASSIGN( qfalse ); +Q_EXTERN qboolean floodlight_lowquality Q_ASSIGN( qfalse ); +Q_EXTERN vec3_t floodlightRGB; +Q_EXTERN float floodlightIntensity Q_ASSIGN( 512 ); +Q_EXTERN float floodlightDistance Q_ASSIGN( 1024 ); - Q_EXTERN qboolean debug; - Q_EXTERN qboolean debugSurfaces; - Q_EXTERN qboolean debugUnused; -Index: tools/quake3/q3map2/q3map2.h ++ + Q_EXTERN qboolean dump Q_ASSIGN( qfalse ); + Q_EXTERN qboolean debug Q_ASSIGN( qfalse ); + Q_EXTERN qboolean debugUnused Q_ASSIGN( qfalse ); +Index: tools/quake3/q3map2/game_ja.h =================================================================== ---- tools/quake3/q3map2/q3map2.h (revision 290) -+++ tools/quake3/q3map2/q3map2.h (working copy) -@@ -1274,6 +1274,7 @@ - vec3_t color; /* starts out at full color, may be reduced if transparent surfaces are crossed */ - - /* output */ -+ vec3_t hit; - int compileFlags; /* for determining surface compile flags traced through */ - qboolean passSolid; - qboolean opaque; -Index: tools/quake3/q3map2/light_trace.c +--- tools/quake3/q3map2/game_ja.h (revision 191) ++++ tools/quake3/q3map2/game_ja.h (working copy) +@@ -67,6 +67,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "RBSP", /* bsp file prefix */ + 1, /* bsp file version */ +Index: tools/quake3/q3map2/game_tremulous.h =================================================================== ---- tools/quake3/q3map2/light_trace.c (revision 290) -+++ tools/quake3/q3map2/light_trace.c (working copy) -@@ -1596,6 +1596,7 @@ - /* bogus node number means solid, end tracing unless testing all */ - if( nodeNum < 0 ) - { -+ VectorCopy( origin, trace->hit ); - trace->passSolid = qtrue; - return qtrue; - } -@@ -1606,6 +1607,7 @@ - /* solid? */ - if( node->type == TRACE_LEAF_SOLID ) - { -+ VectorCopy( origin, trace->hit ); - trace->passSolid = qtrue; - return qtrue; +--- tools/quake3/q3map2/game_tremulous.h (revision 191) ++++ tools/quake3/q3map2/game_tremulous.h (working copy) +@@ -70,6 +70,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 46, /* bsp file version */ +Index: tools/quake3/q3map2/game_wolfet.h +=================================================================== +--- tools/quake3/q3map2/game_wolfet.h (revision 191) ++++ tools/quake3/q3map2/game_wolfet.h (working copy) +@@ -66,6 +66,7 @@ + qtrue, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 47, /* bsp file version */ +Index: tools/quake3/q3map2/game_wolf.h +=================================================================== +--- tools/quake3/q3map2/game_wolf.h (revision 191) ++++ tools/quake3/q3map2/game_wolf.h (working copy) +@@ -129,6 +129,7 @@ + qtrue, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 47, /* bsp file version */ +Index: tools/quake3/q3map2/game_sof2.h +=================================================================== +--- tools/quake3/q3map2/game_sof2.h (revision 191) ++++ tools/quake3/q3map2/game_sof2.h (working copy) +@@ -139,6 +139,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "RBSP", /* bsp file prefix */ + 1, /* bsp file version */ +Index: tools/quake3/q3map2/game_etut.h +=================================================================== +--- tools/quake3/q3map2/game_etut.h (revision 191) ++++ tools/quake3/q3map2/game_etut.h (working copy) +@@ -148,6 +148,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 2.2f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 47, /* bsp file version */ +Index: tools/quake3/q3map2/game_jk2.h +=================================================================== +--- tools/quake3/q3map2/game_jk2.h (revision 191) ++++ tools/quake3/q3map2/game_jk2.h (working copy) +@@ -64,6 +64,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "RBSP", /* bsp file prefix */ + 1, /* bsp file version */ +Index: tools/quake3/q3map2/game_qfusion.h +=================================================================== +--- tools/quake3/q3map2/game_qfusion.h (revision 191) ++++ tools/quake3/q3map2/game_qfusion.h (working copy) +@@ -115,6 +115,7 @@ + qfalse, /* wolf lighting model? */ + 512, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "FBSP", /* bsp file prefix */ + 1, /* bsp file version */ +Index: tools/quake3/q3map2/game_tenebrae.h +=================================================================== +--- tools/quake3/q3map2/game_tenebrae.h (revision 191) ++++ tools/quake3/q3map2/game_tenebrae.h (working copy) +@@ -112,6 +112,7 @@ + qfalse, /* wolf lighting model? */ + 512, /* lightmap width/height */ + 2.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 46, /* bsp file version */ +Index: tools/quake3/q3map2/game_quake3.h +=================================================================== +--- tools/quake3/q3map2/game_quake3.h (revision 191) ++++ tools/quake3/q3map2/game_quake3.h (working copy) +@@ -112,6 +112,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 46, /* bsp file version */ +Index: tools/quake3/q3map2/game_ef.h +=================================================================== +--- tools/quake3/q3map2/game_ef.h (revision 191) ++++ tools/quake3/q3map2/game_ef.h (working copy) +@@ -113,6 +113,7 @@ + qfalse, /* wolf lighting model? */ + 128, /* lightmap width/height */ + 1.0f, /* lightmap gamma */ ++ 1.0f, /* lightmap exposure */ + 1.0f, /* lightmap compensate */ + "IBSP", /* bsp file prefix */ + 46, /* bsp file version */ +Index: tools/quake3/q3map2/light_ydnar.c +=================================================================== +--- tools/quake3/q3map2/light_ydnar.c (revision 191) ++++ tools/quake3/q3map2/light_ydnar.c (working copy) +@@ -49,6 +49,7 @@ + int i; + float max, gamma; + vec3_t sample; ++ float inv, dif; + + + /* ydnar: scaling necessary for simulating r_overbrightBits on external lightmaps */ +@@ -72,16 +73,51 @@ + /* gamma */ + sample[ i ] = pow( sample[ i ] / 255.0f, gamma ) * 255.0f; } ++ ++ if (lightmapExposure == 1) ++ { ++ /* clamp with color normalization */ ++ max = sample[ 0 ]; ++ if( sample[ 1 ] > max ) ++ max = sample[ 1 ]; ++ if( sample[ 2 ] > max ) ++ max = sample[ 2 ]; ++ if( max > 255.0f ) ++ VectorScale( sample, (255.0f / max), sample ); ++ } ++ else ++ { ++ if (lightmapExposure==0) ++ { ++ lightmapExposure=1.0f; ++ } ++ inv=1.f/lightmapExposure; ++ //Exposure ++ ++ max = sample[ 0 ]; ++ if( sample[ 1 ] > max ) ++ max = sample[ 1 ]; ++ if( sample[ 2 ] > max ) ++ max = sample[ 2 ]; ++ ++ dif = (1- exp(-max * inv) ) * 255; ++ ++ if (max >0) ++ { ++ dif = dif / max; ++ } ++ else ++ { ++ dif = 0; ++ } ++ ++ for (i=0;i<3;i++) ++ { ++ sample[i]*=dif; ++ } ++ } ++ + +- /* clamp with color normalization */ +- max = sample[ 0 ]; +- if( sample[ 1 ] > max ) +- max = sample[ 1 ]; +- if( sample[ 2 ] > max ) +- max = sample[ 2 ]; +- if( max > 255.0f ) +- VectorScale( sample, (255.0f / max), sample ); +- + /* compensate for ingame overbrighting/bitshifting */ + VectorScale( sample, (1.0f / lightmapCompensate), sample ); + +Index: tools/quake3/q3map2/light.c +=================================================================== +--- tools/quake3/q3map2/light.c (revision 191) ++++ tools/quake3/q3map2/light.c (working copy) +@@ -1836,6 +1893,14 @@ + i++; + } + ++ else if( !strcmp( argv[ i ], "-exposure" ) ) ++ { ++ f = atof( argv[ i + 1 ] ); ++ lightmapExposure = f; ++ Sys_Printf( "Lighting exposure set to %f\n", lightmapExposure ); ++ i++; ++ } ++ + else if( !strcmp( argv[ i ], "-compensate" ) ) + { + f = atof( argv[ i + 1 ] ); +Index: tools/quake3/q3map2/q3map2.h +=================================================================== +--- tools/quake3/q3map2/q3map2.h (revision 191) ++++ tools/quake3/q3map2/q3map2.h (working copy) +@@ -543,6 +545,7 @@ + qboolean wolfLight; /* when true, lights work like wolf q3map */ + int lightmapSize; /* bsp lightmap width/height */ + float lightmapGamma; /* default lightmap gamma */ ++ float lightmapExposure; /* default lightmap exposure */ + float lightmapCompensate; /* default lightmap compensate value */ + char *bspIdent; /* 4-letter bsp file prefix */ + int bspVersion; /* bsp version to use */ +@@ -2117,6 +2132,7 @@ + + /* ydnar: lightmap gamma/compensation */ + Q_EXTERN float lightmapGamma Q_ASSIGN( 1.0f ); ++Q_EXTERN float lightmapExposure Q_ASSIGN( 1.0f ); + Q_EXTERN float lightmapCompensate Q_ASSIGN( 1.0f ); + + /* ydnar: for runtime tweaking of falloff tolerance */ Index: tools/quake3/q3map2/light_ydnar.c =================================================================== ---- tools/quake3/q3map2/light_ydnar.c (revision 290) +--- tools/quake3/q3map2/light_ydnar.c (revision 191) +++ tools/quake3/q3map2/light_ydnar.c (working copy) -@@ -372,7 +372,7 @@ +@@ -384,7 +420,7 @@ #define NUDGE 0.5f #define BOGUS_NUDGE -99999.0f @@ -1320,7 +1539,7 @@ Index: tools/quake3/q3map2/light_ydnar.c { int i, x, y, numClusters, *clusters, pointCluster, *cluster; float *luxel, *origin, *normal, d, lightmapSampleOffset; -@@ -380,6 +380,12 @@ +@@ -392,6 +428,12 @@ vec3_t pNormal; vec3_t vecs[ 3 ]; vec3_t nudged; @@ -1333,7 +1552,7 @@ Index: tools/quake3/q3map2/light_ydnar.c float *nudge; static float nudges[][ 2 ] = { -@@ -473,6 +479,51 @@ +@@ -485,6 +527,51 @@ /* non axial lightmap projection (explicit xyz) */ else VectorCopy( dv->xyz, origin ); @@ -1385,7 +1604,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* planar surfaces have precalculated lightmap vectors for nudging */ if( lm->plane != NULL ) -@@ -504,8 +555,13 @@ +@@ -516,8 +603,13 @@ else origin[ lm->axisNum ] += lightmapSampleOffset; @@ -1400,7 +1619,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* another retarded hack, storing nudge count in luxel[ 1 ] */ luxel[ 1 ] = 0.0f; -@@ -521,14 +577,14 @@ +@@ -533,14 +625,14 @@ for( i = 0; i < 3; i++ ) { /* set nudged point*/ @@ -1418,7 +1637,7 @@ Index: tools/quake3/q3map2/light_ydnar.c luxel[ 1 ] += 1.0f; } } -@@ -538,8 +594,8 @@ +@@ -550,8 +642,8 @@ { VectorMA( dv->xyz, lightmapSampleOffset, dv->normal, nudged ); pointCluster = ClusterForPointExtFilter( nudged, LUXEL_EPSILON, numClusters, clusters ); @@ -1429,7 +1648,7 @@ Index: tools/quake3/q3map2/light_ydnar.c luxel[ 1 ] += 1.0f; } -@@ -585,7 +641,7 @@ +@@ -597,7 +689,7 @@ than the distance between two luxels (thanks jc :) */ @@ -1438,7 +1657,7 @@ Index: tools/quake3/q3map2/light_ydnar.c { bspDrawVert_t mid, *dv2[ 3 ]; int max; -@@ -633,7 +689,7 @@ +@@ -645,7 +737,7 @@ /* split the longest edge and map it */ LerpDrawVert( dv[ max ], dv[ (max + 1) % 3 ], &mid ); @@ -1447,7 +1666,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* push the point up a little bit to account for fp creep (fixme: revisit this) */ //% VectorMA( mid.xyz, 2.0f, mid.normal, mid.xyz ); -@@ -641,12 +697,12 @@ +@@ -653,12 +745,12 @@ /* recurse to first triangle */ VectorCopy( dv, dv2 ); dv2[ max ] = ∣ @@ -1462,7 +1681,7 @@ Index: tools/quake3/q3map2/light_ydnar.c } -@@ -662,6 +718,7 @@ +@@ -674,6 +766,7 @@ int i; vec4_t plane; vec3_t *stv, *ttv, stvStatic[ 3 ], ttvStatic[ 3 ]; @@ -1470,7 +1689,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* get plane if possible */ -@@ -687,16 +744,20 @@ +@@ -699,16 +792,20 @@ ttv = NULL; } @@ -1495,7 +1714,7 @@ Index: tools/quake3/q3map2/light_ydnar.c return qtrue; } -@@ -718,7 +779,7 @@ +@@ -730,7 +827,7 @@ dv2[ 2 ] = dv[ (i + 1) % 3 ]; /* map the degenerate triangle */ @@ -1504,7 +1723,7 @@ Index: tools/quake3/q3map2/light_ydnar.c } } -@@ -780,8 +841,8 @@ +@@ -792,8 +889,8 @@ LerpDrawVert( dv[ max + 2 ], dv[ (max + 3) % 4 ], &mid[ 1 ] ); /* map the vertexes */ @@ -1515,7 +1734,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* 0 and 2 */ if( max == 0 ) -@@ -866,10 +927,10 @@ +@@ -878,10 +975,10 @@ } /* map the vertexes */ @@ -1530,7 +1749,7 @@ Index: tools/quake3/q3map2/light_ydnar.c /* subdivide the quad */ MapQuad_r( lm, info, dv, plane, stv, ttv ); -@@ -1161,7 +1222,7 @@ +@@ -1173,7 +1270,7 @@ continue; /* map the fake vert */ @@ -1539,7 +1758,7 @@ Index: tools/quake3/q3map2/light_ydnar.c } } } -@@ -1636,22 +1697,32 @@ +@@ -1963,22 +2062,32 @@ deluxel = SUPER_DELUXEL( x, y ); origin = SUPER_ORIGIN( x, y ); normal = SUPER_NORMAL( x, y ); @@ -1589,16 +1808,16 @@ Index: tools/quake3/q3map2/light_ydnar.c if( deluxemap ) Index: tools/quake3/q3map2/q3map2.h =================================================================== ---- tools/quake3/q3map2/q3map2.h (revision 290) +--- tools/quake3/q3map2/q3map2.h (revision 303) +++ tools/quake3/q3map2/q3map2.h (working copy) -@@ -34,8 +34,8 @@ +@@ -35,8 +35,8 @@ /* version */ --#define Q3MAP_VERSION "2.5.11" --#define Q3MAP_MOTD "A well-oiled toaster oven" -+#define Q3MAP_VERSION "2.5.11-div0-obj-decomptexcoords-snapplane-UTavgcolorfix-UTfloodlight-UTtrianglecheck" -+#define Q3MAP_MOTD "Blackhole Box gives the light back" +-#define Q3MAP_VERSION "2.5.17" +-#define Q3MAP_MOTD "Last one turns the lights off" ++#define Q3MAP_VERSION "2.5.17-div0-obj-decomptexcoords-snapplane-UTavgcolorfix-UTfloodlight-UTlmexposure-UTtrianglecheck" ++#define Q3MAP_MOTD "Light some candles, put them on a wooden table, take a photo, and paste it on the lightmaps!" diff --git a/misc/gtkradiant/mergepatches.sh b/misc/gtkradiant/mergepatches.sh index 8daed4b50..a4346bee1 100755 --- a/misc/gtkradiant/mergepatches.sh +++ b/misc/gtkradiant/mergepatches.sh @@ -37,16 +37,16 @@ done cat < epsilon ) -+ return -1; -+ return 1; -+} -+ -+#define CrossProductTemp(a,b,c) ((c)[0]=(a)[1]*(b)[2]-(a)[2]*(b)[1],(c)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2],(c)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0]) -+ - static void _ase_submit_triangles( picoModel_t* model , aseMaterial_t* materials , aseVertex_t* vertices, aseTexCoord_t* texcoords, aseColor_t* colors, aseFace_t* faces, int numFaces ) - { -- aseFacesIter_t i = faces, end = faces + numFaces; -- for(; i != end; ++i) -+ -+ picoVec3_t accum; -+ int index; -+ int counter; -+ aseFacesIter_t i = faces, end = faces + numFaces; -+ counter=0; -+ -+ //rebuild normals -+ for(i=faces; i != end; ++i) -+ { -+ -+ //&(*i).facenormal -+ //vec3_t v1, v2; -+ //VectorSubtract(va, vb, v1); -+ //VectorSubtract(vc, vb, v2); -+ //CrossProduct(v1, v2, out); -+ -+ picoVec3_t a,b,c; -+ picoVec3_t v1,v2,v3; -+ int j; -+ counter++; -+ for (j=0;j<3;j++) -+ { -+ a[j] = vertices[(*i).indices[0]].xyz[j]; -+ b[j] = vertices[(*i).indices[1]].xyz[j]; -+ c[j] = vertices[(*i).indices[2]].xyz[j]; -+ } -+ for (j=0;j<3;j++) -+ { -+ v1[j]=a[j]-b[j]; -+ v2[j]=c[j]-b[j]; -+ } -+ -+ CrossProductTemp(v1,v2,v3); -+ _pico_normalize_vec(v3); -+ (*i).facenormal[0]=v3[0]; -+ (*i).facenormal[1]=v3[1]; -+ (*i).facenormal[2]=v3[2]; -+ -+ -+ } -+ -+ -+ //if (counter>0) Sys_Printf( "Rebuilding %d Normals\n", counter * 3 ); -+ for(i=faces; i != end; ++i) - { -- /* look up the shader for the material/submaterial pair */ -+ /* look up the shader for the material/submaterial pair */ - aseSubMaterial_t* subMtl = _ase_get_submaterial_or_default( materials, (*i).materialId, (*i).subMaterialId ); -- if( subMtl == NULL ) -+ -+ if( subMtl == NULL ) - { - return; - } - - { - picoVec3_t* xyz[3]; -+ picoVec3_t *a[3]; - picoVec3_t* normal[3]; - picoVec2_t* st[3]; - picoColor_t* color[3]; - picoIndex_t smooth[3]; -- int j; -- /* we pull the data from the vertex, color and texcoord arrays using the face index data */ -- for ( j = 0 ; j < 3 ; j ++ ) -+ -+ int j,z; -+ -+ -+ -+ /* we pull the data from the vertex, color and texcoord arrays using the face index data */ -+ for ( j = 0 ; j < 3 ; j ++ ) - { -- xyz[j] = &vertices[(*i).indices[j]].xyz; -- normal[j] = &vertices[(*i).indices[j]].normal; -+ aseFacesIter_t q = faces; -+ aseFacesIter_t qend = faces + numFaces; -+ -+ xyz[j] = &vertices[(*i).indices[j]].xyz; -+ -+ // Use Face normal -+ normal[j] = &(*i).facenormal; -+ -+ -+ //Oooor we can use the smoothing group -+ -+ //Slow method, but testing -+ //Find All faces that use this vertex, average their facenormals. -+ // skip where smoothgroups both equal 0, or don't have any shared bits (x & y) -+ index=(*i).indices[j]; -+ -+// accum[0]=0; -+ // accum[1]=0; -+ // accum[2]=0; -+ accum[0]=(*i).facenormal[0]; -+ accum[1]=(*i).facenormal[1]; -+ accum[2]=(*i).facenormal[2]; -+ counter=1; -+ -+ -+ z=0; -+ for(; q != qend; ++q) -+ { -+ z++; -+ if (q==i) -+ continue; -+ // if ( (*q).indices[0]==index || (*q).indices[1]==index || (*q).indices[2]==index) -+ a[0]= &vertices[(*q).indices[0] ].xyz; -+ a[1]= &vertices[(*q).indices[1] ].xyz; -+ a[2]= &vertices[(*q).indices[2] ].xyz; -+ -+ if ( VectorCompareExtn(*a[0],*xyz[j],0.01f)>0 || -+ VectorCompareExtn(*a[1],*xyz[j],0.01f)>0 || -+ VectorCompareExtn(*a[2],*xyz[j],0.01f)>0 -+ ) -+ { -+ if ( (*i).smoothingGroup==0 && (*q).smoothingGroup ==0 ) -+ continue; -+ -+ if ( (*i).smoothingGroup & (*q).smoothingGroup ) -+ { -+ accum[0]+=(*q).facenormal[0]; -+ accum[1]+=(*q).facenormal[1]; -+ accum[2]+=(*q).facenormal[2]; -+ -+ counter++; -+ -+ } -+ } -+ } -+ _pico_normalize_vec(accum); -+ -+ (*i).vertexnormal[j][0]=accum[0]; -+ (*i).vertexnormal[j][1]=accum[1]; -+ (*i).vertexnormal[j][2]=accum[2]; -+ normal[j]=&(*i).vertexnormal[j]; -+ -+ - st[j] = &texcoords[(*i).indices[j + 3]].texcoord; -- -- if( colors != NULL && (*i).indices[j + 6] >= 0 ) -+ -+ if( colors != NULL && (*i).indices[j + 6] >= 0 ) - { - color[j] = &colors[(*i).indices[j + 6]].color; - } -@@ -490,30 +616,18 @@ - color[j] = &white; - } - -- smooth[j] = (vertices[(*i).indices[j]].id * (1 << 16)) + (*i).smoothingGroup; /* don't merge vertices */ -+ smooth[j] = 0;// (vertices[(*i).indices[j]].id * (1 << 16)) + (*i).smoothingGroup; /* don't merge vertices */ - - } - - /* submit the triangle to the model */ - PicoAddTriangleToModel ( model , xyz , normal , 1 , st , 1 , color , subMtl->shader, smooth ); - } -+ - } - } - --static void shadername_convert(char* shaderName) --{ -- /* unix-style path separators */ -- char* s = shaderName; -- for(; *s != '\0'; ++s) -- { -- if(*s == '\\') -- { -- *s = '/'; -- } -- } --} - -- - /* _ase_load: - * loads a 3dsmax ase model file. - */ -@@ -534,6 +648,9 @@ - int numColorVertices = 0; - int numColorVertexFaces = 0; - int vertexId = 0; -+ int currentVertexFace=0; -+ int currentVertexIndex=0; -+ int counter=0; - - aseMaterial_t* materials = NULL; - -@@ -610,10 +727,11 @@ - } - else if (!_pico_stricmp(p->token,"*mesh_numvertex")) - { -- if (!_pico_parse_int( p, &numVertices) ) -+ if (!_pico_parse_int( p, &numVertices) ) - _ase_error_return("Missing MESH_NUMVERTEX value"); - - vertices = _pico_calloc(numVertices, sizeof(aseVertex_t)); -+ currentVertexIndex=0; - } - else if (!_pico_stricmp(p->token,"*mesh_numfaces")) - { -@@ -621,6 +739,7 @@ - _ase_error_return("Missing MESH_NUMFACES value"); - - faces = _pico_calloc(numFaces, sizeof(aseFace_t)); -+ - } - else if (!_pico_stricmp(p->token,"*mesh_numtvertex")) - { -@@ -685,7 +804,20 @@ - - vertices[index].id = vertexId++; - } -- /* model mesh vertex normal */ -+ else if (!_pico_stricmp(p->token,"*mesh_facenormal")) -+ { -+ //Grab the faceindex for the next vertex normals. -+ if( numVertices == 0 ) -+ _ase_error_return("Vertex parse error (facenormals)"); -+ -+ if (!_pico_parse_int( p,¤tVertexFace )) -+ _ase_error_return("Vertex parse error"); -+ -+ if (!_pico_parse_vec( p,faces[currentVertexFace].facenormal )) -+ _ase_error_return("Vertex parse error"); -+ -+ } -+ /* model mesh vertex normal */ - else if (!_pico_stricmp(p->token,"*mesh_vertexnormal")) - { - int index; -@@ -696,10 +828,25 @@ - /* get vertex data (orig: index +y -x +z) */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Vertex parse error"); -- if (!_pico_parse_vec( p,vertices[index].normal )) -+ -+ //^^ Index is 'wrong' in .ase models. they reference the same vert index with multiple normals.. -+ // I've tried, this is a lost cause. Use the SG's -+ // -+ /* -+ -+ if (!_pico_parse_vec( p,vertices[counter].normal )) - _ase_error_return("Vertex parse error"); -+ vertices[counter].faceid=index; -+ counter++; -+ */ - } - /* model mesh face */ -+ else if (!_pico_stricmp(p->token,"*mesh_normals")) -+ { -+ // counter=0; //part of the above vertex normals fix -+ } -+ -+ /* model mesh face */ - else if (!_pico_stricmp(p->token,"*mesh_face")) - { - picoIndex_t indexes[3]; -@@ -736,8 +883,35 @@ - } - if (!_pico_stricmp (p->token,"*MESH_SMOOTHING" )) - { -- _pico_parse_int ( p , &faces[index].smoothingGroup ); -- } -+ int total=0; -+ char* point; -+ char* start; -+ _pico_parse(p,0); -+ -+ point=p->token; -+ start=point; -+ faces[index].smoothingGroup=0; -+ -+ //Super dodgy comma delimited string parse -+ while (*point<'A') -+ { -+ if (*point<=32 || *point==',') -+ { -+ total=atoi(start); -+ if (total!=0) -+ { -+ faces[index].smoothingGroup+=1<token,"*MESH_MTLID" )) - { - _pico_parse_int ( p , &faces[index].subMaterialId ); -@@ -755,19 +929,19 @@ - int index; - - if( numVertices == 0 ) -- _ase_error_return("Texture Vertex parse error"); -+ _ase_error_return("Vertex parse error"); - - /* get uv vertex index */ -- if (!_pico_parse_int( p,&index ) || index >= numTextureVertices) -- _ase_error_return("Texture vertex parse error"); -+ if (!_pico_parse_int( p,&index )) -+ _ase_error_return("UV vertex parse error"); - - /* get uv vertex s */ - if (!_pico_parse_float( p,&texcoords[index].texcoord[0] )) -- _ase_error_return("Texture vertex parse error"); -+ _ase_error_return("UV vertex parse error"); - - /* get uv vertex t */ - if (!_pico_parse_float( p,&texcoords[index].texcoord[1] )) -- _ase_error_return("Texture vertex parse error"); -+ _ase_error_return("UV vertex parse error"); - - /* ydnar: invert t */ - texcoords[index].texcoord[ 1 ] = 1.0f - texcoords[index].texcoord[ 1 ]; -@@ -831,6 +1005,13 @@ - - /* leave alpha alone since we don't get any data from the ASE format */ - colors[index].color[3] = 255; -+ -+ /* 27 hack, red as alpha */ -+ colors[index].color[3]=colors[index].color[0]; -+ colors[index].color[0]=255; -+ colors[index].color[1]=255; -+ colors[index].color[2]=255; -+ - } - /* model color face */ - else if (!_pico_stricmp(p->token,"*mesh_cface")) -@@ -900,7 +1081,6 @@ - { - /* set material name */ - _pico_first_token( materialName ); -- shadername_convert(materialName); - PicoSetShaderName( shader, materialName); - - /* set shader's transparency */ -@@ -1085,7 +1265,6 @@ - } - - /* set material name */ -- shadername_convert(materialName); - PicoSetShaderName( shader,materialName ); - - /* set shader's transparency */ -@@ -1115,8 +1294,18 @@ - char* p = mapname; - - /* convert to shader-name format */ -- shadername_convert(mapname); - { -+ /* unix-style path separators */ -+ char* s = mapname; -+ for(; *s != '\0'; ++s) -+ { -+ if(*s == '\\') -+ { -+ *s = '/'; -+ } -+ } -+ } -+ { - /* remove extension */ - char* last_period = strrchr(p, '.'); - if(last_period != NULL) -@@ -1125,14 +1314,32 @@ - } - } - -- /* find shader path */ -+ /* find game root */ - for(; *p != '\0'; ++p) - { -- if(_pico_strnicmp(p, "models/", 7) == 0 || _pico_strnicmp(p, "textures/", 9) == 0) -+ if(_pico_strnicmp(p, "quake", 5) == 0 || _pico_strnicmp(p, "doom", 4) == 0) - { - break; - } - } -+ /* root-relative */ -+ for(; *p != '\0'; ++p) -+ { -+ if(*p == '/') -+ { -+ ++p; -+ break; -+ } -+ } -+ /* game-relative */ -+ for(; *p != '\0'; ++p) -+ { -+ if(*p == '/') -+ { -+ ++p; -+ break; -+ } -+ } - - if(*p != '\0') - { diff --git a/misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelnormals.diff b/misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelnormals.diff deleted file mode 100644 index 6801c1bfe..000000000 --- a/misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelnormals.diff +++ /dev/null @@ -1,101 +0,0 @@ -Index: libs/picomodel/picomodel.c -=================================================================== ---- libs/picomodel/picomodel.c (revision 191) -+++ libs/picomodel/picomodel.c (working copy) -@@ -295,10 +295,7 @@ - model = PicoModuleLoadModel(module, fileName, buffer, bufSize, frameNum); - } - -- if(model != 0) -- { -- _pico_free(buffer); -- } -+ _pico_free(buffer); - - /* return */ - return model; -@@ -1573,6 +1570,7 @@ - { - int i, j; - -+// Sys_Printf(" %f %f %f\n", normal[0] , normal[1] , normal[2] ); - - /* dummy check */ - if( surface == NULL || surface->numVertexes <= 0 ) -@@ -1861,13 +1859,10 @@ - typedef picoVec3_t* picoNormalIter_t; - typedef picoIndex_t* picoIndexIter_t; - --#define THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL 1 -- - void _pico_triangles_generate_weighted_normals(picoIndexIter_t first, picoIndexIter_t end, picoVec3_t* xyz, picoVec3_t* normals) - { - for(; first != end; first += 3) - { --#if (THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL) - picoVec3_t weightedNormal; - { - float* a = xyz[*(first + 0)]; -@@ -1878,24 +1873,11 @@ - _pico_subtract_vec( c, a, ca ); - _pico_cross_vec( ca, ba, weightedNormal ); - } --#endif - { - int j = 0; - for(; j < 3; ++j) - { - float* normal = normals[*(first + j)]; --#if (!THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL) -- picoVec3_t weightedNormal; -- { -- float* a = xyz[*(first + ((j + 0) % 3))]; -- float* b = xyz[*(first + ((j + 1) % 3))]; -- float* c = xyz[*(first + ((j + 2) % 3))]; -- picoVec3_t ba, ca; -- _pico_subtract_vec( b, a, ba ); -- _pico_subtract_vec( c, a, ca ); -- _pico_cross_vec( ca, ba, weightedNormal ); -- } --#endif - _pico_add_vec(weightedNormal, normal, normal); - } - } -@@ -1941,7 +1923,8 @@ - { - for(; first != last; ++first, ++generated) - { -- if(!_pico_normal_is_unit_length(*first) || !_pico_normal_within_tolerance(*first, *generated)) -+ //27 - fix for badly generated normals thing. -+ // if(!_pico_normal_is_unit_length(*first) || !_pico_normal_within_tolerance(*first, *generated)) - { - _pico_copy_vec(*generated, *first); - } -@@ -1954,10 +1937,11 @@ - - _pico_normals_zero(normals, normals + surface->numVertexes); - -+ //Just build standard no sg normals for now - _pico_triangles_generate_weighted_normals(surface->index, surface->index + surface->numIndexes, surface->xyz, normals); - _pico_vertices_combine_shared_normals(surface->xyz, surface->smoothingGroup, normals, surface->numVertexes); - -- _pico_normals_normalize(normals, normals + surface->numVertexes); -+ _pico_normals_normalize(normals, normals + surface->numVertexes); - - _pico_normals_assign_generated_normals(surface->normal, surface->normal + surface->numVertexes, normals); - -@@ -2261,7 +2245,7 @@ - int newVertIndex = PicoGetSurfaceNumIndexes ( workSurface ); - - /* get the index of the vertex that we're going to store at newVertIndex */ -- vertDataIndex = PicoFindSurfaceVertexNum ( workSurface , *xyz[i] , *normals[i] , numSTs , st[i] , numColors , colors[i], smoothingGroup[i]); -+ vertDataIndex = -1;// PicoFindSurfaceVertexNum ( workSurface , *xyz[i] , *normals[i] , numSTs , st[i] , numColors , colors[i], smoothingGroup[i]); - - /* the vertex wasn't found, so create a new vertex in the pool from the data we have */ - if ( vertDataIndex == -1 ) -@@ -2290,3 +2274,5 @@ - PicoSetSurfaceIndex ( workSurface , newVertIndex , vertDataIndex ); - } - } -+ -+ diff --git a/misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff b/misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff deleted file mode 100644 index 6f6bc13fd..000000000 --- a/misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: plugins/model/model.cpp -=================================================================== ---- plugins/model/model.cpp (revision 193) -+++ plugins/model/model.cpp (working copy) -@@ -123,14 +123,27 @@ - } - glVertexPointer(3, GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->vertex); - glDrawElements(GL_TRIANGLES, GLsizei(m_indices.size()), RenderIndexTypeID, m_indices.data()); -+ - #if defined(_DEBUG) -+ GLfloat modelview[16]; -+ glGetFloatv(GL_MODELVIEW_MATRIX, modelview); // I know this is slow as hell, but hey - we're in _DEBUG -+ Matrix4 modelview_inv( -+ modelview[0], modelview[1], modelview[2], modelview[3], -+ modelview[4], modelview[5], modelview[6], modelview[7], -+ modelview[8], modelview[9], modelview[10], modelview[11], -+ modelview[12], modelview[13], modelview[14], modelview[15]); -+ matrix4_full_invert(modelview_inv); -+ Matrix4 modelview_inv_transposed = matrix4_transposed(modelview_inv); -+ - glBegin(GL_LINES); - - for(Array::const_iterator i = m_vertices.begin(); i != m_vertices.end(); ++i) - { -- Vector3 normal = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal3f_to_vector3((*i).normal), 8)); -+ Vector3 normal = normal3f_to_vector3((*i).normal); -+ normal = matrix4_transformed_direction(modelview_inv, vector3_normalised(matrix4_transformed_direction(modelview_inv_transposed, normal))); // do some magic -+ Vector3 normalTransformed = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal, 8)); - glVertex3fv(vertex3f_to_array((*i).vertex)); -- glVertex3fv(vector3_to_array(normal)); -+ glVertex3fv(vector3_to_array(normalTransformed)); - } - glEnd(); - #endif diff --git a/misc/gtkradiant/singlepatches-radiant15/gtkradiant-nexuizfixes.diff b/misc/gtkradiant/singlepatches-radiant15/gtkradiant-nexuizfixes.diff deleted file mode 100644 index 04055ca18..000000000 --- a/misc/gtkradiant/singlepatches-radiant15/gtkradiant-nexuizfixes.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: games/NexuizPack/games/nexuiz.game -=================================================================== ---- games/NexuizPack/games/nexuiz.game (revision 26) -+++ games/NexuizPack/games/nexuiz.game (working copy) -@@ -17,7 +17,7 @@ - shaderpath="scripts" - archivetypes="pk3" - texturetypes="tga jpg png" -- modeltypes="md3 mdl md2 ase" -+ modeltypes="md3 mdl md2 ase obj" - maptypes="mapq3" - shaders="quake3" - entityclass="quake3" diff --git a/misc/gtkradiant/singlepatches-radiant15/both-obj.diff b/misc/gtkradiant/singlepatches/both-obj.diff similarity index 79% rename from misc/gtkradiant/singlepatches-radiant15/both-obj.diff rename to misc/gtkradiant/singlepatches/both-obj.diff index 574d2ac2d..77e03a9a0 100644 --- a/misc/gtkradiant/singlepatches-radiant15/both-obj.diff +++ b/misc/gtkradiant/singlepatches/both-obj.diff @@ -1,8 +1,20 @@ Index: libs/picomodel/pm_obj.c =================================================================== ---- libs/picomodel/pm_obj.c (revision 193) +--- libs/picomodel/pm_obj.c (revision 290) +++ libs/picomodel/pm_obj.c (working copy) -@@ -265,7 +265,7 @@ +@@ -215,10 +215,9 @@ + } + } + +-#if 0 + static int _obj_mtl_load( picoModel_t *model ) + { +- //picoShader_t *curShader = NULL; ++ picoShader_t *curShader = NULL; + picoParser_t *p; + picoByte_t *mtlBuffer; + int mtlBufSize; +@@ -266,7 +265,7 @@ /* get next token in material file */ if (_pico_parse( p,1 ) == NULL) break; @@ -11,7 +23,7 @@ Index: libs/picomodel/pm_obj.c /* skip empty lines */ if (p->token == NULL || !strlen( p->token )) -@@ -307,6 +307,7 @@ +@@ -308,6 +307,7 @@ else if (!_pico_stricmp(p->token,"map_kd")) { char *mapName; @@ -19,7 +31,7 @@ Index: libs/picomodel/pm_obj.c /* pointer to current shader must be valid */ if (curShader == NULL) -@@ -321,6 +322,10 @@ +@@ -322,6 +322,10 @@ _pico_printf( PICO_ERROR,"Missing material map name in MTL, line %d.",p->curLine); _obj_mtl_error_return; } @@ -30,7 +42,15 @@ Index: libs/picomodel/pm_obj.c /* set shader map name */ PicoSetShaderMapName( shader,mapName ); } -@@ -521,7 +526,7 @@ +@@ -478,7 +482,6 @@ + /* return with success */ + return 1; + } +-#endif + + /* _obj_load: + * loads a wavefront obj model file. +@@ -523,7 +526,7 @@ PicoSetModelFileName( model,fileName ); /* try loading the materials; we don't handle the result */ @@ -39,7 +59,7 @@ Index: libs/picomodel/pm_obj.c _obj_mtl_load( model ); #endif -@@ -830,6 +835,41 @@ +@@ -832,6 +835,41 @@ curVertex += max; } } diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-UTavgcolorfix.diff b/misc/gtkradiant/singlepatches/q3map2-UTavgcolorfix.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-UTavgcolorfix.diff rename to misc/gtkradiant/singlepatches/q3map2-UTavgcolorfix.diff diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-UTfloodlight.diff b/misc/gtkradiant/singlepatches/q3map2-UTfloodlight.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-UTfloodlight.diff rename to misc/gtkradiant/singlepatches/q3map2-UTfloodlight.diff diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-UTlmexposure.diff b/misc/gtkradiant/singlepatches/q3map2-UTlmexposure.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-UTlmexposure.diff rename to misc/gtkradiant/singlepatches/q3map2-UTlmexposure.diff diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-UTtrianglecheck.diff b/misc/gtkradiant/singlepatches/q3map2-UTtrianglecheck.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-UTtrianglecheck.diff rename to misc/gtkradiant/singlepatches/q3map2-UTtrianglecheck.diff diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-decomptexcoords.diff b/misc/gtkradiant/singlepatches/q3map2-decomptexcoords.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-decomptexcoords.diff rename to misc/gtkradiant/singlepatches/q3map2-decomptexcoords.diff diff --git a/misc/gtkradiant/singlepatches-radiant15/q3map2-snapplane.diff b/misc/gtkradiant/singlepatches/q3map2-snapplane.diff similarity index 100% rename from misc/gtkradiant/singlepatches-radiant15/q3map2-snapplane.diff rename to misc/gtkradiant/singlepatches/q3map2-snapplane.diff -- 2.39.2