Seaside/SpyCustom/sdk/ivrenderview.h

310 lines
9.9 KiB
C
Raw Normal View History

2021-06-16 18:46:33 +03:00
#if !defined( IVRENDERVIEW_H )
#define IVRENDERVIEW_H
#ifdef _WIN32
#pragma once
#endif
#include "basetypes.h"
#include "vplane.h"
#include "interface.h"
#include "imaterialsystem.h"
#include "const.h"
#include "vertexcolor.h"
#include "refcount.h"
class CViewSetup;
class CEngineSprite;
class IClientEntity;
class IMaterial;
struct model_t;
class IClientRenderable;
class IMatRenderContext;
class CVolumeCuller;
enum
{
DRAWWORLDLISTS_DRAW_STRICTLYABOVEWATER = 0x001,
DRAWWORLDLISTS_DRAW_STRICTLYUNDERWATER = 0x002,
DRAWWORLDLISTS_DRAW_INTERSECTSWATER = 0x004,
DRAWWORLDLISTS_DRAW_WATERSURFACE = 0x008,
DRAWWORLDLISTS_DRAW_SKYBOX = 0x010,
DRAWWORLDLISTS_DRAW_CLIPSKYBOX = 0x020,
DRAWWORLDLISTS_DRAW_SHADOWDEPTH = 0x040,
DRAWWORLDLISTS_DRAW_REFRACTION = 0x080,
DRAWWORLDLISTS_DRAW_REFLECTION = 0x100,
DRAWWORLDLISTS_DRAW_WORLD_GEOMETRY = 0x200,
DRAWWORLDLISTS_DRAW_DECALS_AND_OVERLAYS = 0x400,
DRAWWORLDLISTS_DRAW_SIMPLE_WORLD_MODEL = 0x800,
DRAWWORLDLISTS_DRAW_SIMPLE_WORLD_MODEL_WATER = 0x1000,
DRAWWORLDLISTS_DRAW_SKIP_DISPLACEMENTS = 0x2000,
DRAWWORLDLISTS_DRAW_SSAO = 0x4000,
};
enum
{
MAT_SORT_GROUP_STRICTLY_ABOVEWATER = 0,
MAT_SORT_GROUP_STRICTLY_UNDERWATER,
MAT_SORT_GROUP_INTERSECTS_WATER_SURFACE,
MAT_SORT_GROUP_WATERSURFACE,
MAX_MAT_SORT_GROUPS
};
enum ERenderDepthMode_t
{
DEPTH_MODE_NORMAL = 0,
DEPTH_MODE_SHADOW = 1,
DEPTH_MODE_SSA0 = 2,
DEPTH_MODE_MAX
};
static const char* s_pMatSortGroupsString[] =
{
"Sort: Abovewater",
"Sort: Underwater",
"Sort: IntersectsWater",
"Sort: WaterSurface",
};
typedef VPlane Frustum[FRUSTUM_NUMPLANES];
typedef unsigned short LeafIndex_t;
enum
{
INVALID_LEAF_INDEX = (LeafIndex_t)~0
};
#if 1
struct WorldListLeafData_t
{
LeafIndex_t leafIndex;
int16 waterData;
uint16 firstTranslucentSurface;
uint16 translucentSurfaceCount;
};
#else
struct WorldListLeafData_t
{
uint32 leafIndex;
int32 waterData;
uint32 firstTranslucentSurface;
uint32 translucentSurfaceCount;
};
#endif
struct WorldListInfo_t
{
int m_ViewFogVolume;
int m_LeafCount;
bool m_bHasWater;
WorldListLeafData_t* m_pLeafDataList;
};
class IWorldRenderList : public IRefCounted
{
};
struct VisibleFogVolumeInfo_t
{
int m_nVisibleFogVolume;
int m_nVisibleFogVolumeLeaf;
bool m_bEyeInFogVolume;
float m_flDistanceToWater;
float m_flWaterHeight;
IMaterial* m_pFogVolumeMaterial;
};
struct BrushVertex_t
{
Vector m_Pos;
Vector m_Normal;
Vector m_TangentS;
Vector m_TangentT;
Vector2D m_TexCoord;
Vector2D m_LightmapCoord;
private:
BrushVertex_t(const BrushVertex_t& src);
};
struct VisOverrideData_t
{
Vector m_vecVisOrigin;
float m_fDistToAreaPortalTolerance;
Vector m_vPortalCorners[4];
bool m_bTrimFrustumToPortalCorners;
Vector m_vPortalOrigin;
Vector m_vPortalForward;
float m_flPortalRadius;
};
class IBrushSurface
{
public:
virtual void ComputeTextureCoordinate(Vector const& worldPos, Vector2D& texCoord) = 0;
virtual void ComputeLightmapCoordinate(Vector const& worldPos, Vector2D& lightmapCoord) = 0;
virtual int GetVertexCount() const = 0;
virtual void GetVertexData(BrushVertex_t* pVerts) = 0;
virtual IMaterial* GetMaterial() = 0;
};
class IBrushRenderer
{
public:
virtual bool RenderBrushModelSurface(IClientEntity* pBaseEntity, IBrushSurface* pBrushSurface) = 0;
};
#define MAX_VIS_LEAVES 32
enum DrawBrushModelMode_t
{
DBM_DRAW_ALL = 0,
DBM_DRAW_OPAQUE_ONLY,
DBM_DRAW_TRANSLUCENT_ONLY,
};
struct BrushArrayInstanceData_t
{
matrix3x4a_t* m_pBrushToWorld;
const model_t* m_pBrushModel;
Vector4D m_DiffuseModulation;
ShaderStencilState_t* m_pStencilState;
};
class IVRenderView
{
public:
virtual void DrawBrushModel(
IClientEntity* baseentity,
model_t* model,
const Vector& origin,
const QAngle& angles,
bool bUnused) = 0;
virtual void DrawIdentityBrushModel(IWorldRenderList* pList, model_t* model) = 0;
virtual void TouchLight(struct dlight_t* light) = 0;
virtual void Draw3DDebugOverlays(void) = 0;
virtual void SetBlend(float blend) = 0;
virtual float GetBlend(void) = 0;
virtual void SetColorModulation(float const* blend) = 0;
virtual void GetColorModulation(float* blend) = 0;
virtual void SceneBegin(void) = 0;
virtual void SceneEnd(void) = 0;
virtual void GetVisibleFogVolume(const Vector& eyePoint, const VisOverrideData_t* pVisOverrideData, VisibleFogVolumeInfo_t* pInfo) = 0;
virtual IWorldRenderList* CreateWorldList() = 0;
#if defined(_PS3)
virtual IWorldRenderList* CreateWorldList_PS3(int viewID) = 0;
virtual void BuildWorldLists_PS3_Epilogue(IWorldRenderList* pList, WorldListInfo_t* pInfo, bool bShadowDepth) = 0;
#else
virtual void BuildWorldLists_Epilogue(IWorldRenderList* pList, WorldListInfo_t* pInfo, bool bShadowDepth) = 0;
#endif
virtual void BuildWorldLists(IWorldRenderList* pList, WorldListInfo_t* pInfo, int iForceFViewLeaf, const VisOverrideData_t* pVisData = NULL, bool bShadowDepth = false, float* pReflectionWaterHeight = NULL) = 0;
virtual void DrawWorldLists(IMatRenderContext* pRenderContext, IWorldRenderList* pList, unsigned long flags, float waterZAdjust) = 0;
virtual void GetWorldListIndicesInfo(WorldListIndicesInfo_t* pIndicesInfoOut, IWorldRenderList* pList, unsigned long nFlags) = 0;
virtual void DrawTopView(bool enable) = 0;
virtual void TopViewNoBackfaceCulling(bool bDisable) = 0;
virtual void TopViewNoVisCheck(bool bDisable) = 0;
virtual void TopViewBounds(Vector2D const& mins, Vector2D const& maxs) = 0;
virtual void SetTopViewVolumeCuller(const CVolumeCuller* pVolumeCuller) = 0;
virtual void DrawLights(void) = 0;
virtual void DrawMaskEntities(void) = 0;
virtual void DrawTranslucentSurfaces(IMatRenderContext* pRenderContext, IWorldRenderList* pList, int* pSortList, int sortCount, unsigned long flags) = 0;
virtual void DrawLineFile(void) = 0;
virtual void DrawLightmaps(IWorldRenderList* pList, int pageId) = 0;
virtual void ViewSetupVis(bool novis, int numorigins, const Vector origin[]) = 0;
virtual bool AreAnyLeavesVisible(int* leafList, int nLeaves) = 0;
virtual void VguiPaint(void) = 0;
virtual void ViewDrawFade(byte* color, IMaterial* pMaterial, bool mapFullTextureToScreen = true) = 0;
virtual void OLD_SetProjectionMatrix(float fov, float zNear, float zFar) = 0;
virtual colorVec GetLightAtPoint(Vector& pos) = 0;
virtual int GetViewEntity(void) = 0;
virtual bool IsViewEntity(int entindex) = 0;
virtual float GetFieldOfView(void) = 0;
virtual unsigned char** GetAreaBits(void) = 0;
virtual void SetFogVolumeState(int nVisibleFogVolume, bool bUseHeightFog) = 0;
virtual void InstallBrushSurfaceRenderer(IBrushRenderer* pBrushRenderer) = 0;
virtual void DrawBrushModelShadow(IClientRenderable* pRenderable) = 0;
virtual bool LeafContainsTranslucentSurfaces(IWorldRenderList* pList, int sortIndex, unsigned long flags) = 0;
virtual bool DoesBoxIntersectWaterVolume(const Vector& mins, const Vector& maxs, int leafWaterDataID) = 0;
virtual void SetAreaState(
unsigned char chAreaBits[MAX_AREA_STATE_BYTES],
unsigned char chAreaPortalBits[MAX_AREA_PORTAL_STATE_BYTES]) = 0;
virtual void VGui_Paint(int mode) = 0;
virtual void Push3DView(IMatRenderContext* pRenderContext, const CViewSetup& view, int nFlags, ITexture* pRenderTarget, Frustum frustumPlanes) = 0;
virtual void Push2DView(IMatRenderContext* pRenderContext, const CViewSetup& view, int nFlags, ITexture* pRenderTarget, Frustum frustumPlanes) = 0;
virtual void PopView(IMatRenderContext* pRenderContext, Frustum frustumPlanes) = 0;
virtual void SetMainView(const Vector& vecOrigin, const QAngle& angles) = 0;
enum
{
VIEW_SETUP_VIS_EX_RETURN_FLAGS_USES_RADIAL_VIS = 0x00000001
};
virtual void ViewSetupVisEx(bool novis, int numorigins, const Vector origin[], unsigned int& returnFlags) = 0;
virtual void OverrideViewFrustum(Frustum custom) = 0;
virtual void DrawBrushModelShadowDepth(IClientEntity* baseentity, model_t* model, const Vector& origin, const QAngle& angles, ERenderDepthMode_t DepthMode) = 0;
virtual void UpdateBrushModelLightmap(model_t* model, IClientRenderable* pRenderable) = 0;
virtual void BeginUpdateLightmaps(void) = 0;
virtual void EndUpdateLightmaps() = 0;
virtual void OLD_SetOffCenterProjectionMatrix(float fov, float zNear, float zFar, float flAspectRatio, float flBottom, float flTop, float flLeft, float flRight) = 0;
virtual void OLD_SetProjectionMatrixOrtho(float left, float top, float right, float bottom, float zNear, float zFar) = 0;
virtual void Push3DView(IMatRenderContext* pRenderContext, const CViewSetup& view, int nFlags, ITexture* pRenderTarget, Frustum frustumPlanes, ITexture* pDepthTexture) = 0;
virtual void GetMatricesForView(const CViewSetup& view, VMatrix* pWorldToView, VMatrix* pViewToProjection, VMatrix* pWorldToProjection, VMatrix* pWorldToPixels) = 0;
virtual void DrawBrushModelEx(IClientEntity* baseentity, model_t* model, const Vector& origin, const QAngle& angles, DrawBrushModelMode_t mode) = 0;
virtual bool DoesBrushModelNeedPowerOf2Framebuffer(const model_t* model) = 0;
virtual void DrawBrushModelArray(IMatRenderContext* pContext, int nCount, const BrushArrayInstanceData_t* pInstanceData, int nModelTypeFlags) = 0;
};
#define VENGINE_RENDERVIEW_INTERFACE_VERSION "VEngineRenderView014"
#if defined(_STATIC_LINKED) && defined(CLIENT_DLL)
namespace Client
{
extern IVRenderView* render;
}
#else
extern IVRenderView* render;
#endif
#endif