X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=tools%2Fquake3%2Fq3map2%2Fq3map2.h;h=f4b88d7a68c8ac1463217dd8fd9c95668a434aa2;hp=897bfdc43d75efaa77093ea18b7254b3d678d3c7;hb=3a7c77d7202273945fa121af4fba74c18423f3c0;hpb=4d1e944aca47338a45f451c593b63218598dc140 diff --git a/tools/quake3/q3map2/q3map2.h b/tools/quake3/q3map2/q3map2.h index 897bfdc4..f4b88d7a 100644 --- a/tools/quake3/q3map2/q3map2.h +++ b/tools/quake3/q3map2/q3map2.h @@ -122,6 +122,12 @@ constants ------------------------------------------------------------------------------- */ +/* temporary hacks and tests (please keep off in SVN to prevent anyone's legacy map from screwing up) */ +/* 2011-01-10 TTimo says we should turn these on in SVN, so turning on now */ +#define Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES 1 +#define Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX 1 +#define Q3MAP2_EXPERIMENTAL_SNAP_PLANE_FIX 1 + /* general */ #define MAX_QPATH 64 @@ -136,7 +142,7 @@ constants #define DEF_RADIOSITY_BOUNCE 1.0f /* ydnar: default to 100% re-emitted light */ #define MAX_SHADER_INFO 8192 -#define MAX_CUST_SURFACEPARMS 64 +#define MAX_CUST_SURFACEPARMS 256 #define SHADER_MAX_VERTEXES 1000 #define SHADER_MAX_INDEXES (6 * SHADER_MAX_VERTEXES) @@ -268,6 +274,9 @@ constants #define BSP_LUXEL_SIZE 3 #define RAD_LUXEL_SIZE 3 #define SUPER_LUXEL_SIZE 4 +#define SUPER_FLAG_SIZE 4 +#define FLAG_FORCE_SUBSAMPLING 1 +#define FLAG_ALREADY_SUBSAMPLED 2 #define SUPER_ORIGIN_SIZE 3 #define SUPER_NORMAL_SIZE 4 #define SUPER_DELUXEL_SIZE 3 @@ -279,6 +288,7 @@ constants #define BSP_LUXEL( s, x, y ) (lm->bspLuxels[ s ] + ((((y) * lm->w) + (x)) * BSP_LUXEL_SIZE)) #define RAD_LUXEL( s, x, y ) (lm->radLuxels[ s ] + ((((y) * lm->w) + (x)) * RAD_LUXEL_SIZE)) #define SUPER_LUXEL( s, x, y ) (lm->superLuxels[ s ] + ((((y) * lm->sw) + (x)) * SUPER_LUXEL_SIZE)) +#define SUPER_FLAG( x, y ) (lm->superFlags + ((((y) * lm->sw) + (x)) * SUPER_FLAG_SIZE)) #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)) #define SUPER_CLUSTER( x, y ) (lm->superClusters + (((y) * lm->sw) + (x))) @@ -307,9 +317,6 @@ abstracted bsp file #define MAX_LIGHTMAP_SHADERS 256 /* ok to increase these at the expense of more memory */ -#define MAX_MAP_ENTITIES 0x1000 //% 0x800 /* ydnar */ -#define MAX_MAP_ENTSTRING 0x80000 //% 0x40000 /* ydnar */ - #define MAX_MAP_AREAS 0x100 /* MAX_MAP_AREA_BYTES in q_shared must match! */ #define MAX_MAP_FOGS 30 //& 0x100 /* RBSP (32 - world fog - goggles) */ #define MAX_MAP_LEAFS 0x20000 @@ -320,7 +327,6 @@ abstracted bsp file #define MAX_MAP_VISIBILITY (VIS_HEADER_SIZE + MAX_MAP_VISCLUSTERS * (((MAX_MAP_VISCLUSTERS + 63) & ~63) >> 3)) #define MAX_MAP_DRAW_SURFS 0x20000 -#define MAX_MAP_DRAW_INDEXES 0x80000 #define MAX_MAP_ADVERTISEMENTS 30 @@ -518,7 +524,7 @@ general types ------------------------------------------------------------------------------- */ /* ydnar: for smaller structs */ -typedef char qb_t; +typedef unsigned char qb_t; /* ydnar: for q3map_tcMod */ @@ -558,6 +564,9 @@ typedef struct game_s qboolean wolfLight; /* when true, lights work like wolf q3map */ int lightmapSize; /* bsp lightmap width/height */ float lightmapGamma; /* default lightmap gamma */ + qboolean lightmapsRGB; /* default lightmap sRGB mode */ + qboolean texturesRGB; /* default texture sRGB mode */ + qboolean colorsRGB; /* default color sRGB mode */ float lightmapExposure; /* default lightmap exposure */ float lightmapCompensate; /* default lightmap compensate value */ float gridScale; /* vortex: default lightgrid scale (affects both directional and ambient spectres) */ @@ -641,6 +650,14 @@ typedef struct remap_s } remap_t; +typedef struct skinfile_s +{ + struct skinfile_s *next; + char name[ 1024 ]; + char to[ MAX_QPATH ]; +} +skinfile_t; + /* wingdi.h hack, it's the same: 0 */ #undef CM_NONE @@ -1359,6 +1376,7 @@ typedef struct int compileFlags; /* for determining surface compile flags traced through */ qboolean passSolid; qboolean opaque; + vec_t forceSubsampling; /* needs subsampling (alphashadow), value = max color contribution possible from it */ /* working data */ int numTestNodes; @@ -1450,6 +1468,7 @@ typedef struct rawLightmap_s float *bspLuxels[ MAX_LIGHTMAPS ]; float *radLuxels[ MAX_LIGHTMAPS ]; float *superLuxels[ MAX_LIGHTMAPS ]; + unsigned char *superFlags; float *superOrigins; float *superNormals; int *superClusters; @@ -1510,11 +1529,15 @@ int BSPMain( int argc, char **argv ); /* convert_map.c */ int ConvertBSPToMap( char *bspName ); +int ConvertBSPToMap_BP( char *bspName ); /* convert_ase.c */ int ConvertBSPToASE( char *bspName ); +/* convert_obj.c */ +int ConvertBSPToOBJ( char *bspName ); + /* brush.c */ sideRef_t *AllocSideRef( side_t *side, sideRef_t *next ); @@ -1561,11 +1584,11 @@ void MakeNormalVectors( vec3_t forward, vec3_t right, vec3_t up ); /* map.c */ -void LoadMapFile( char *filename, qboolean onlyLights ); +void LoadMapFile( char *filename, qboolean onlyLights, qboolean noCollapseGroups ); int FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points ); int PlaneTypeForNormal( vec3_t normal ); void AddBrushBevels( void ); -brush_t *FinishBrush( void ); +brush_t *FinishBrush(qboolean noCollapseGroups); /* portals.c */ @@ -1600,7 +1623,7 @@ void SetLightStyles( void ); int EmitShader( const char *shader, int *contentFlags, int *surfaceFlags ); void BeginBSPFile( void ); -void EndBSPFile( void ); +void EndBSPFile( qboolean do_write ); void EmitBrushes( brush_t *brushes, int *firstBrush, int *numBrushes ); void EmitFogs( void ); @@ -1642,10 +1665,10 @@ tree_t *FaceBSP( face_t *list ); /* model.c */ void PicoPrintFunc( int level, const char *str ); -void PicoLoadFileFunc( char *name, byte **buffer, int *bufSize ); -picoModel_t *FindModel( char *name, int frame ); -picoModel_t *LoadModel( char *name, int frame ); -void InsertModel( char *name, int frame, m4x4_t transform, remap_t *remap, shaderInfo_t *celShader, int eNum, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle ); +void PicoLoadFileFunc( const char *name, byte **buffer, int *bufSize ); +picoModel_t *FindModel( const char *name, int frame ); +picoModel_t *LoadModel( const char *name, int frame ); +void InsertModel( const char *name, int skin, int frame, m4x4_t transform, remap_t *remap, shaderInfo_t *celShader, int eNum, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle ); void AddTriangleModels( entity_t *e ); @@ -1653,6 +1676,7 @@ void AddTriangleModels( entity_t *e ); mapDrawSurface_t *AllocDrawSurface( surfaceType_t type ); void FinishSurface( mapDrawSurface_t *ds ); void StripFaceSurface( mapDrawSurface_t *ds ); +void MaxAreaFaceSurface( mapDrawSurface_t *ds ); qboolean CalcSurfaceTextureRange( mapDrawSurface_t *ds ); qboolean CalcLightmapAxis( vec3_t normal, vec3_t axis ); void ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds ); @@ -1665,7 +1689,7 @@ void ClearSurface( mapDrawSurface_t *ds ); void AddEntitySurfaceModels( entity_t *e ); mapDrawSurface_t *DrawSurfaceForSide( entity_t *e, brush_t *b, side_t *s, winding_t *w ); mapDrawSurface_t *DrawSurfaceForMesh( entity_t *e, parseMesh_t *p, mesh_t *mesh ); -mapDrawSurface_t *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, char *flareShader, int lightStyle ); +mapDrawSurface_t *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, const char *flareShader, int lightStyle ); mapDrawSurface_t *DrawSurfaceForShader( char *shader ); void ClipSidesIntoTree( entity_t *e, tree_t *tree ); void MakeDebugPortalSurfs( tree_t *tree ); @@ -1719,6 +1743,8 @@ void LoadSurfaceExtraFile( const char *path ); void ProcessDecals( void ); void MakeEntityDecals( entity_t *e ); +/* map.c */ +void TextureAxisFromPlane( plane_t *pln, vec3_t xv, vec3_t yv ); /* brush_primit.c */ void ComputeAxisBase( vec3_t normal, vec3_t texX, vec3_t texY); @@ -1781,6 +1807,7 @@ void FloodLightRawLightmap( int num ); void IlluminateRawLightmap( int num ); void IlluminateVertexes( int num ); +void SetupBrushesFlags( int mask_any, int test_any, int mask_all, int test_all ); void SetupBrushes( void ); void SetupClusters( void ); qboolean ClusterVisible( int a, int b ); @@ -1831,6 +1858,7 @@ void EmitVertexRemapShader( char *from, char *to ); void LoadShaderInfo( void ); shaderInfo_t *ShaderInfoForShader( const char *shader ); +shaderInfo_t *ShaderInfoForShaderNull( const char *shader ); /* bspfile_abstract.c */ @@ -1929,13 +1957,15 @@ Q_EXTERN game_t games[] , #include "game_qfusion.h" /* qfusion game */ , + #include "game_reaction.h" /* must be after game_quake3.h */ + , #include "game_darkplaces.h" /* vortex: darkplaces q1 engine */ , #include "game_dq.h" /* vortex: deluxe quake game ( darkplaces q1 engine) */ , #include "game_prophecy.h" /* vortex: prophecy game ( darkplaces q1 engine) */ , - { NULL } /* null game */ + #include "game__null.h" /* null game (must be last item) */ }; #endif Q_EXTERN game_t *game Q_ASSIGN( &games[ 0 ] ); @@ -2004,8 +2034,35 @@ Q_EXTERN qboolean debugInset Q_ASSIGN( qfalse ); Q_EXTERN qboolean debugPortals Q_ASSIGN( qfalse ); Q_EXTERN qboolean lightmapTriangleCheck Q_ASSIGN(qfalse); Q_EXTERN qboolean lightmapExtraVisClusterNudge Q_ASSIGN(qfalse); +Q_EXTERN qboolean lightmapFill Q_ASSIGN(qfalse); +Q_EXTERN int metaAdequateScore Q_ASSIGN( -1 ); +Q_EXTERN int metaGoodScore Q_ASSIGN( -1 ); +Q_EXTERN float metaMaxBBoxDistance Q_ASSIGN( -1 ); + +#if Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX +// Increasing the normalEpsilon to compensate for new logic in SnapNormal(), where +// this epsilon is now used to compare against 0 components instead of the 1 or -1 +// components. Unfortunately, normalEpsilon is also used in PlaneEqual(). So changing +// this will affect anything that calls PlaneEqual() as well (which are, at the time +// of this writing, FindFloatPlane() and AddBrushBevels()). +Q_EXTERN double normalEpsilon Q_ASSIGN(0.00005); +#else Q_EXTERN double normalEpsilon Q_ASSIGN( 0.00001 ); +#endif + +#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES +// NOTE: This distanceEpsilon is too small if parts of the map are at maximum world +// extents (in the range of plus or minus 2^16). The smallest epsilon at values +// close to 2^16 is about 0.007, which is greater than distanceEpsilon. Therefore, +// maps should be constrained to about 2^15, otherwise slightly undesirable effects +// may result. The 0.01 distanceEpsilon used previously is just too coarse in my +// opinion. The real fix for this problem is to have 64 bit distances and then make +// this epsilon even smaller, or to constrain world coordinates to plus minus 2^15 +// (or even 2^14). +Q_EXTERN double distanceEpsilon Q_ASSIGN(0.005); +#else Q_EXTERN double distanceEpsilon Q_ASSIGN( 0.01 ); +#endif /* bsp */ @@ -2168,6 +2225,7 @@ Q_EXTERN qboolean debugDeluxemap Q_ASSIGN( qfalse ); Q_EXTERN int deluxemode Q_ASSIGN( 0 ); /* deluxemap format (0 - modelspace, 1 - tangentspace with renormalization, 2 - tangentspace without renormalization) */ Q_EXTERN qboolean fast Q_ASSIGN( qfalse ); +Q_EXTERN qboolean fastpoint Q_ASSIGN( qtrue ); Q_EXTERN qboolean faster Q_ASSIGN( qfalse ); Q_EXTERN qboolean fastgrid Q_ASSIGN( qfalse ); Q_EXTERN qboolean fastbounce Q_ASSIGN( qfalse ); @@ -2183,6 +2241,8 @@ Q_EXTERN qboolean shade Q_ASSIGN( qfalse ); Q_EXTERN float shadeAngleDegrees Q_ASSIGN( 0.0f ); Q_EXTERN int superSample Q_ASSIGN( 0 ); Q_EXTERN int lightSamples Q_ASSIGN( 1 ); +Q_EXTERN qboolean lightRandomSamples Q_ASSIGN( qfalse ); +Q_EXTERN int lightSamplesSearchBoxSize Q_ASSIGN( 1 ); Q_EXTERN qboolean filter Q_ASSIGN( qfalse ); Q_EXTERN qboolean dark Q_ASSIGN( qfalse ); Q_EXTERN qboolean sunOnly Q_ASSIGN( qfalse ); @@ -2209,6 +2269,7 @@ Q_EXTERN qboolean floodlight_lowquality Q_ASSIGN( qfalse ); Q_EXTERN vec3_t floodlightRGB; Q_EXTERN float floodlightIntensity Q_ASSIGN( 512.0f ); Q_EXTERN float floodlightDistance Q_ASSIGN( 1024.0f ); +Q_EXTERN float floodlightDirectionScale Q_ASSIGN( 1.0f ); Q_EXTERN qboolean dump Q_ASSIGN( qfalse ); Q_EXTERN qboolean debug Q_ASSIGN( qfalse ); @@ -2223,6 +2284,7 @@ Q_EXTERN float maxMapDistance Q_ASSIGN( 0 ); /* for run time tweaking of light sources */ Q_EXTERN float pointScale Q_ASSIGN( 7500.0f ); +Q_EXTERN float spotScale Q_ASSIGN( 7500.0f ); Q_EXTERN float areaScale Q_ASSIGN( 0.25f ); Q_EXTERN float skyScale Q_ASSIGN( 1.0f ); Q_EXTERN float bounceScale Q_ASSIGN( 0.25f ); @@ -2239,7 +2301,10 @@ Q_EXTERN qboolean inGrid Q_ASSIGN(0); /* ydnar: lightmap gamma/compensation */ Q_EXTERN float lightmapGamma Q_ASSIGN( 1.0f ); -Q_EXTERN float lightmapExposure Q_ASSIGN( 1.0f ); +Q_EXTERN float lightmapsRGB Q_ASSIGN( qfalse ); +Q_EXTERN float texturesRGB Q_ASSIGN( qfalse ); +Q_EXTERN float colorsRGB Q_ASSIGN( qfalse ); +Q_EXTERN float lightmapExposure Q_ASSIGN( 0.0f ); Q_EXTERN float lightmapCompensate Q_ASSIGN( 1.0f ); /* ydnar: for runtime tweaking of falloff tolerance */ @@ -2250,6 +2315,7 @@ Q_EXTERN float linearScale Q_ASSIGN( 1.0f / 8000.0f ); // for .ase conversion Q_EXTERN qboolean shadersAsBitmap Q_ASSIGN( qfalse ); +Q_EXTERN qboolean lightmapsAsTexcoord Q_ASSIGN( qfalse ); Q_EXTERN light_t *lights; Q_EXTERN int numPointLights; @@ -2389,7 +2455,8 @@ abstracted bsp globals Q_EXTERN int numEntities Q_ASSIGN( 0 ); Q_EXTERN int numBSPEntities Q_ASSIGN( 0 ); -Q_EXTERN entity_t entities[ MAX_MAP_ENTITIES ]; +Q_EXTERN int allocatedEntities Q_ASSIGN( 0 ); +Q_EXTERN entity_t* entities Q_ASSIGN(NULL); Q_EXTERN int numBSPModels Q_ASSIGN( 0 ); Q_EXTERN int allocatedBSPModels Q_ASSIGN( 0 ); @@ -2443,10 +2510,11 @@ Q_EXTERN int numBSPVisBytes Q_ASSIGN( 0 ); Q_EXTERN byte bspVisBytes[ MAX_MAP_VISIBILITY ]; Q_EXTERN int numBSPDrawVerts Q_ASSIGN( 0 ); -Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL ); +Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL ); Q_EXTERN int numBSPDrawIndexes Q_ASSIGN( 0 ); -Q_EXTERN int bspDrawIndexes[ MAX_MAP_DRAW_INDEXES ]; +Q_EXTERN int allocatedBSPDrawIndexes Q_ASSIGN( 0 ); +Q_EXTERN int *bspDrawIndexes Q_ASSIGN(NULL); Q_EXTERN int numBSPDrawSurfaces Q_ASSIGN( 0 ); Q_EXTERN bspDrawSurface_t *bspDrawSurfaces Q_ASSIGN( NULL ); @@ -2466,7 +2534,7 @@ Q_EXTERN bspAdvertisement_t bspAds[ MAX_MAP_ADVERTISEMENTS ]; allocated = def; \ while(reqitem >= allocated && allocated) \ allocated *= 2; \ - if(!allocated || allocated > 2147483647 / sizeof(*ptr)) \ + if(!allocated || allocated > 2147483647 / (int)sizeof(*ptr)) \ { \ Error(#ptr " over 2 GB"); \ } \ @@ -2479,5 +2547,8 @@ Q_EXTERN bspAdvertisement_t bspAds[ MAX_MAP_ADVERTISEMENTS ]; #define AUTOEXPAND_BY_REALLOC_BSP(suffix, def) AUTOEXPAND_BY_REALLOC(bsp##suffix, numBSP##suffix, allocatedBSP##suffix, def) +#define Image_LinearFloatFromsRGBFloat(c) (((c) <= 0.04045f) ? (c) * (1.0f / 12.92f) : (float)pow(((c) + 0.055f)*(1.0f/1.055f), 2.4f)) +#define Image_sRGBFloatFromLinearFloat(c) (((c) < 0.0031308f) ? (c) * 12.92f : 1.055f * (float)pow((c), 1.0f/2.4f) - 0.055f) + /* end marker */ #endif