/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ #ifndef SE_INCL_RENDERSCENE_H #define SE_INCL_RENDERSCENE_H #ifdef PRAGMA_ONCE #pragma once #endif #include //#include ////////////////////////////////////////////////////////////////////////////////////////////////////// // WORLD RENDER CONSTANTS // scene polygon flags #define SPOF_SELECTED (1UL<< 0) // is polygon currently selected or not? #define SPOF_TRANSPARENT (1UL<< 1) // polygon has alpha keying #define SPOF_RENDERFOG (1UL<< 9) // polygon has fog #define SPOF_RENDERHAZE (1UL<<10) // polygon has haze #define SPOF_BACKLIGHT (1UL<<31) // used internaly // scene texture flags #define STXF_CLAMPU (0x01) // clamp u coordinate in texture #define STXF_CLAMPV (0x02) // clamp v coordinate in texture #define STXF_REFLECTION (0x04) // clamp v coordinate in texture #define STXF_AFTERSHADOW (0x08) // texture is to be applied after shadow #define STXF_BLEND_OPAQUE (0x00) // opaque texture (just put it on screen) #define STXF_BLEND_ALPHA (0x10) // alpha blend with screen #define STXF_BLEND_ADD (0x20) // add to screen #define STXF_BLEND_SHADE (0x30) // darken or brighten (same as used by shadow maps) #define STXF_BLEND_MASK (0x70) /* * RENDER SCENE structures (for world purposes) */ // structure that holds information about a polygon that is fully on partially visible struct ScenePolygon { ScenePolygon *spo_pspoSucc; // next polygon in list INDEX spo_iVtx0; // first vertex in arrays INDEX spo_ctVtx; // number of vertices in arrays INDEX *spo_piElements; // array of triangle elements INDEX spo_ctElements; // element count // texture and shadow parameters: 0, 1, 2 are texture maps, 3 is shadow CMappingVectors spo_amvMapping[4]; // texture colors and alpha COLOR spo_acolColors[4]; // texture flags UBYTE spo_aubTextureFlags[4]; // current mip factors for each texture // textures and shadowmap class CTextureObject *spo_aptoTextures[3]; class CShadowMap *spo_psmShadowMap; // internal for rendering INDEX spo_iVtx0Pass; // index of first coordinate in per-pass arrays COLOR spo_cColor; // polygon color (for flat or shadow modes) ULONG spo_ulFlags; // polygon flags (selected or not? ...) FLOAT spo_fNearestZ; // Z coord of nearest vertex to viewer void *spo_pvPolygon; // user data for high level renderer (brush polygon) }; // renders whole scene (all visible polygons) to screen drawport void RenderScene( CDrawPort *pDP, ScenePolygon *pspoFirst, CAnyProjection3D &prProjection, COLOR colSelection, BOOL bTranslucent); // renders only scene z-buffer void RenderSceneZOnly( CDrawPort *pDP, ScenePolygon *pspoFirst, CAnyProjection3D &prProjection); // renders flat background of the scene void RenderSceneBackground(CDrawPort *pDP, COLOR col); #endif /* include-once check. */