Serious-Engine/Sources/Engine/Graphics/RenderScene.h
2016-03-11 18:20:51 -06:00

87 lines
3.6 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
#ifndef SE_INCL_RENDERSCENE_H
#define SE_INCL_RENDERSCENE_H
#ifdef PRAGMA_ONCE
#pragma once
#endif
#include <Engine/Math/TextureMapping.h>
//#include <Engine/Graphics/Vertex.h>
//////////////////////////////////////////////////////////////////////////////////////////////////////
// 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. */