Serious-Engine/Sources/Engine/Rendering/Render.h
Ryan C. Gordon 1a2ccb8f50 Merge github.com:Croteam-Official/Serious-Engine
Conflicts:
	Sources/Ecc/Parser.cpp
	Sources/Ecc/Scanner.cpp
	Sources/Engine/Base/Scanner.cpp
	Sources/Engine/GameAgent/GameAgent.cpp
	Sources/Engine/Graphics/Gfx_wrapper.h
	Sources/Engine/Network/Network.cpp
	Sources/Engine/Sound/SoundDecoder.h
	Sources/Engine/Templates/HashTableTemplate.cpp
	Sources/Engine/Terrain/Terrain.h
	Sources/EntitiesMP/ParticleCloudsHolder.es
	Sources/EntitiesMP/ParticleCloudsMarker.es
	Sources/SeriousSam/CDCheck.h
	Sources/SeriousSam/Menu.cpp
	Sources/SeriousSam/MenuGadgets.cpp
	Sources/SeriousSam/SeriousSam.cpp
	Sources/SeriousSam/SplashScreen.cpp
	Sources/SeriousSam/StdH.cpp
	Sources/SeriousSam/StdH.h
	Sources/Shaders/StdH.cpp
2016-04-02 23:56:12 -04:00

240 lines
11 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. */
#include <Engine/Entities/Entity.h>
#include <Engine/Brushes/Brush.h>
/*
* Preferences for rendering world (another class is used for rendering models).
*/
class ENGINE_API CWorldRenderPrefs {
public:
enum FillType {
FT_NONE, // do not draw this element
FT_INKCOLOR, // draw all in same color
FT_POLYGONCOLOR, // draw in colors of corresponding polygons
FT_SECTORCOLOR, // draw in colors of corresponding sectors
FT_TEXTURE, // draw with texture
};
enum SelectionType {
ST_NONE, // no selection is drawn
ST_ENTITIES, // selected entities are marked
ST_POLYGONS, // selected polygons are marked
ST_SECTORS, // selected sectors are marked
ST_VERTICES, // selected vertices are marked
};
enum ShadowsType {
SHT_NONE = 0, // do not use any shadows
SHT_NOAUTOCALCULATE, // use shadows, but don't auto recalculate
SHT_FULL = 255, // use full shadows
};
enum LensFlaresType {
LFT_NONE = 0, // do not render lens flares at all
LFT_SINGLE_FLARE, // render only single flare without reflections
LFT_REFLECTIONS, // render flares and reflections
LFT_REFLECTIONS_AND_GLARE, // render flare, reflections and glare
};
public:
BOOL wrp_bHiddenLinesOn; // set if hidden lines should be drawn
BOOL wrp_bShowTargetsOn; // set if lines to target entities should be drawn
BOOL wrp_bShowEntityNames;// set if entity names should be typed
BOOL wrp_bEditorModelsOn; // set if editor models should be drawn
BOOL wrp_bFieldBrushesOn; // set if field brushes should be drawn
BOOL wrp_bBackgroundTextureOn; // set if background texture should be drawn
BOOL wrp_bShowVisTweaksOn; // set if visibility tweaks for selected sectors should be shown
BOOL wrp_bDisableVisTweaks; // set if entities utilitizing visibility tweaks should be shown allways
BOOL wrp_bAutoMipBrushingOn; // set if mip brushing should be automatic
FLOAT wrp_fManualMipBrushingFactor; // mip factor for manual mip brushing
FLOAT wrp_fFarClipPlane; // far clip plane
BOOL wrp_bApplyFarClipPlaneInIsometricProjection; // if far clip plane should be applied in isometric projections
enum FillType wrp_ftVertices; // fill type for vertices
COLOR wrp_colVertices; // color used for drawing vertices in ink-color mode
enum FillType wrp_ftEdges; // fill type for edges
COLOR wrp_colEdges; // color used for drawing edges in ink-color mode
enum FillType wrp_ftPolygons; // fill type for polygons
COLOR wrp_colPolygons; // color used for drawing polygons in ink-color mode
enum ShadowsType wrp_shtShadows; // degree of using shadows
enum LensFlaresType wrp_lftLensFlares; // degree of using lens flares
BOOL wrp_abTextureLayers[3]; // set for texture layers that are rendered
BOOL wrp_bFogOn; // set if fog should be rendered
BOOL wrp_bHazeOn; // set if haze should be rendered
BOOL wrp_bMirrorsOn; // set if mirrors should be rendered
FLOAT wrp_fMinimumRenderRange; // range (in meters) around viewer that is always drawn
CModelObject *wrp_pmoSelectedEntity; // model used for marking selected entities
CModelObject *wrp_pmoSelectedPortal; // model used for marking selected portals
CModelObject *wrp_pmoEmptyBrush; // model used for marking brushes with no sectors
enum SelectionType wrp_stSelection; // what kind of selection is shown
public:
/* Constructor -- sets default values. */
CWorldRenderPrefs(void);
/* Test if drawing of hidden edges is turned on. */
inline BOOL IsHiddenLinesOn(void) { return wrp_bHiddenLinesOn; };
/* Set drawing of hidden edges on or off. */
inline void SetHiddenLinesOn(BOOL bOn) { wrp_bHiddenLinesOn = bOn; };
/* Test if drawing of lines to target entities is turned on. */
inline BOOL IsShowTargetsOn(void) { return wrp_bShowTargetsOn; };
/* Set drawing of lines to target entities on or off. */
inline void SetShowTargetsOn(BOOL bOn) { wrp_bShowTargetsOn = bOn; };
/* Test if typing of entity names is turned on. */
inline BOOL IsShowEntityNamesOn(void) { return wrp_bShowEntityNames; };
/* Set typing of entity names on or off. */
inline void SetShowEntityNamesOn(BOOL bOn) { wrp_bShowEntityNames = bOn; };
/* Test if drawing of editor models is turned on. */
inline BOOL IsEditorModelsOn(void) { return wrp_bEditorModelsOn; };
/* Set drawing of editor models on or off. */
inline void SetEditorModelsOn(BOOL bOn) { wrp_bEditorModelsOn = bOn; };
/* Test if drawing of editor models is turned on. */
inline BOOL IsFieldBrushesOn(void) { return wrp_bFieldBrushesOn; };
/* Set drawing of editor models on or off. */
inline void SetFieldBrushesOn(BOOL bOn) { wrp_bFieldBrushesOn = bOn; };
/* Test if drawing background texture is on. */
inline BOOL IsBackgroundTextureOn(void) { return wrp_bBackgroundTextureOn; };
/* Set drawing of background texture on or off. */
inline void SetBackgroundTextureOn(BOOL bOn) { wrp_bBackgroundTextureOn = bOn; };
/* Test if drawing visibility tweaks for selected sectors is on. */
inline BOOL IsVisTweaksOn(void) { return wrp_bShowVisTweaksOn; };
/* Set drawing of visibility tweaks for selected sectors on or off. */
inline void SetVisTweaksOn(BOOL bOn) { wrp_bShowVisTweaksOn = bOn; };
/* Test if visibility tweaks are off. */
inline BOOL IsVisTweaksDisabled(void) { return wrp_bDisableVisTweaks; };
/* Set disabling of visibility tweaks on or off. */
inline void DisableVisTweaks(BOOL bOn) { wrp_bDisableVisTweaks = bOn; };
/* Test if drawing fog is on. */
inline BOOL IsFogOn(void) { return wrp_bFogOn; };
/* Set drawing of fog on or off. */
inline void SetFogOn(BOOL bOn) { wrp_bFogOn = bOn; };
/* Test if drawing haze is on. */
inline BOOL IsHazeOn(void) { return wrp_bHazeOn; };
/* Set drawing of haze on or off. */
inline void SetHazeOn(BOOL bOn) { wrp_bHazeOn = bOn; };
/* Test if drawing mirrors is on. */
inline BOOL IsMirrorsOn(void) { return wrp_bMirrorsOn; };
/* Set drawing of mirrors on or off. */
inline void SetMirrorsOn(BOOL bOn) { wrp_bMirrorsOn = bOn; };
/* Test if mip brushing should be automatic. */
inline BOOL IsAutoMipBrushingOn(void) { return wrp_bAutoMipBrushingOn; };
/* Set mip brushing should to automatic or manual. */
inline void SetAutoMipBrushingOn(BOOL bOn) { wrp_bAutoMipBrushingOn = bOn; };
/* Set/get mip factor for manual mip brushing. */
inline void SetManualMipBrushingFactor(FLOAT fFactor) { wrp_fManualMipBrushingFactor = fFactor; };
inline FLOAT GetManualMipBrushingFactor(void) { return wrp_fManualMipBrushingFactor; };
/* Test if texture layer is shown. */
inline BOOL IsTextureLayerOn(INDEX iTexture) {
ASSERT(iTexture>=0 && iTexture<3);
return wrp_abTextureLayers[iTexture];
};
/* Set texture layer shown/hidden. */
inline void SetTextureLayerOn(BOOL bOn, INDEX iTexture) {
ASSERT(iTexture>=0 && iTexture<3);
wrp_abTextureLayers[iTexture] = bOn;
};
// Get mip brushing factor relevant for given distance mip factor
FLOAT GetCurrentMipBrushingFactor(FLOAT fDistanceMipFactor);
/* Set/get the fill type for vertices. */
inline void SetVerticesFillType(enum FillType ft) { wrp_ftVertices = ft; };
inline enum FillType GetVerticesFillType(void) { return wrp_ftVertices; };
/* Set/get the ink color for vertices. */
inline void SetVerticesInkColor(COLOR color) { wrp_colVertices = color; };
inline COLOR GetVerticesInkColor(void) { return wrp_colVertices; };
/* Set/get the fill type for edges. */
inline void SetEdgesFillType(enum FillType ft) { wrp_ftEdges = ft; };
inline enum FillType GetEdgesFillType(void) { return wrp_ftEdges; };
/* Set/get the ink color for edges. */
inline void SetEdgesInkColor(COLOR color) { wrp_colEdges = color; };
inline COLOR GetEdgesInkColor(void) { return wrp_colEdges; };
/* Set/get the fill type for polygons. */
inline void SetPolygonsFillType(enum FillType ft) { wrp_ftPolygons= ft; };
inline enum FillType GetPolygonsFillType(void) { return wrp_ftPolygons; };
/* Set/get the ink color for polygons. */
inline void SetPolygonsInkColor(COLOR color) { wrp_colPolygons = color; };
inline COLOR GetPolygonsInkColor(void) { return wrp_colPolygons; };
/* Set/get the brush shadow quality. */
inline void SetShadowsType( enum ShadowsType sht) { wrp_shtShadows = sht; };
inline enum ShadowsType GetShadowsType(void) { return wrp_shtShadows; };
/* Set/get the lens flare quality. */
inline void SetLensFlaresType( enum LensFlaresType lft) { wrp_lftLensFlares = lft; };
inline enum LensFlaresType GetLensFlares(void) { return wrp_lftLensFlares; };
/* Set/get range (in meters) around viewer that is always drawn. */
inline void SetMinimumRenderRange(FLOAT fRange) { wrp_fMinimumRenderRange = fRange; };
inline FLOAT GetMinimumRenderRange(void) { return wrp_fMinimumRenderRange; };
/* Set/get model object used for marking selected models. */
inline void SetSelectedEntityModel(CModelObject *pmoSelection) { wrp_pmoEmptyBrush = wrp_pmoSelectedEntity = pmoSelection; };
inline CModelObject *GetSelectedEntityModel(void) { return wrp_pmoSelectedEntity; };
/* Set/get model object used for marking selected portals. */
inline void SetSelectedPortalModel(CModelObject *pmoSelection) { wrp_pmoSelectedPortal = pmoSelection; };
inline CModelObject *GetSelectedPortalModel(void) { return wrp_pmoSelectedPortal; };
/* Set/get model object used for marking empty brushes. */
inline void SetEmptyBrushModel(CModelObject *pmoBrush) { wrp_pmoEmptyBrush = pmoBrush; };
inline CModelObject *GetEmptyBrushModel(void) { return wrp_pmoEmptyBrush; };
/* Set/get the selection type. */
inline void SetSelectionType(enum SelectionType st) { wrp_stSelection = st; };
inline enum SelectionType GetSelectionType(void) { return wrp_stSelection; };
};
// global instance used in rendering
ENGINE_API extern CWorldRenderPrefs _wrpWorldRenderPrefs;
// variables for selection on rendering
ENGINE_API extern CBrushVertexSelection *_pselbvxtSelectOnRender;
ENGINE_API extern CEntitySelection *_pselenSelectOnRender;
ENGINE_API extern CStaticStackArray<PIX2D> *_pavpixSelectLasso;
ENGINE_API extern PIX2D _vpixSelectNearPoint;
ENGINE_API extern BOOL _bSelectAlternative;
ENGINE_API extern PIX _pixDeltaAroundVertex;
ENGINE_API extern CBrushSectorSelection *_pselbscVisTweaks;
/*
* Rendering interface
*/
// Render a world with some viewer, projection and drawport. (viewer may be NULL)
ENGINE_API extern void RenderView(CWorld &woWorld, CEntity &enViewer,
CAnyProjection3D &prProjection, CDrawPort &dpDrawport);
// shading info for viewer of last rendered view
ENGINE_API extern FLOAT3D _vViewerLightDirection;
ENGINE_API extern COLOR _colViewerLight;
ENGINE_API extern COLOR _colViewerAmbient;