//========= Copyright 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $Workfile: $ // $NoKeywords: $ //=============================================================================// #if !defined( IVRENDERVIEWV11_H ) #define IVRENDERVIEWV11_H #ifdef _WIN32 #pragma once #endif #include "basetypes.h" #include "vplane.h" #include "interface.h" #include "materialsystem/imaterialsystem.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class CViewSetupV1; class CEngineSprite; class IClientEntity; class IMaterial; struct model_t; class IClientRenderable; namespace VRenderViewV11 { //----------------------------------------------------------------------------- // Flags used by DrawWorldLists //----------------------------------------------------------------------------- enum { DRAWWORLDLISTS_DRAW_STRICTLYABOVEWATER = 0x1, DRAWWORLDLISTS_DRAW_STRICTLYUNDERWATER = 0x2, DRAWWORLDLISTS_DRAW_INTERSECTSWATER = 0x4, DRAWWORLDLISTS_DRAW_WATERSURFACE = 0x8, DRAWWORLDLISTS_DRAW_SKYBOX = 0x10, DRAWWORLDLISTS_DRAW_CLIPSKYBOX = 0x20, DRAWWORLDLISTS_MAINTAIN_RENDER_LISTS = 0x80000000, }; 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 }; typedef VPlane Frustum[FRUSTUM_NUMPLANES]; //----------------------------------------------------------------------------- // Leaf index //----------------------------------------------------------------------------- typedef unsigned short LeafIndex_t; typedef short LeafFogVolume_t; enum { INVALID_LEAF_INDEX = (LeafIndex_t)~0 }; //----------------------------------------------------------------------------- // Describes the leaves to be rendered this view, set by BuildWorldLists //----------------------------------------------------------------------------- struct WorldListInfo_t { int m_ViewFogVolume; int m_LeafCount; LeafIndex_t* m_pLeafList; LeafFogVolume_t* m_pLeafFogVolume; }; //----------------------------------------------------------------------------- // Describes the fog volume for a particular point //----------------------------------------------------------------------------- struct VisibleFogVolumeInfo_t { int m_nVisibleFogVolume; int m_nVisibleFogVolumeLeaf; bool m_bEyeInFogVolume; float m_flDistanceToWater; float m_flWaterHeight; IMaterial *m_pFogVolumeMaterial; }; //----------------------------------------------------------------------------- // Vertex format for brush models //----------------------------------------------------------------------------- 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 ); }; //----------------------------------------------------------------------------- // interface for asking about the Brush surfaces from the client DLL //----------------------------------------------------------------------------- abstract_class IBrushSurface { public: // Computes texture coordinates + lightmap coordinates given a world position virtual void ComputeTextureCoordinate( Vector const& worldPos, Vector2D& texCoord ) = 0; virtual void ComputeLightmapCoordinate( Vector const& worldPos, Vector2D& lightmapCoord ) = 0; // Gets the vertex data for this surface virtual int GetVertexCount() const = 0; virtual void GetVertexData( BrushVertex_t* pVerts ) = 0; // Gets at the material properties for this surface virtual IMaterial* GetMaterial() = 0; }; //----------------------------------------------------------------------------- // interface for installing a new renderer for brush surfaces //----------------------------------------------------------------------------- abstract_class IBrushRenderer { public: // Draws the surface; returns true if decals should be rendered on this surface virtual bool RenderBrushModelSurface( IClientEntity* pBaseEntity, IBrushSurface* pBrushSurface ) = 0; }; #define MAX_VIS_LEAVES 32 //----------------------------------------------------------------------------- // Purpose: Interface to client .dll to set up a rendering pass over world // The client .dll can call Render multiple times to overlay one or more world // views on top of one another //----------------------------------------------------------------------------- abstract_class IVRenderView { public: // Draw normal brush model. // If pMaterialOverride is non-null, then all the faces of the bmodel will // set this material rather than their regular material. virtual void DrawBrushModel( IClientEntity *baseentity, model_t *model, const Vector& origin, const QAngle& angles, bool sort ) = 0; // Draw brush model that has no origin/angles change ( uses identity transform ) // FIXME, Material proxy IClientEntity *baseentity is unused right now, use DrawBrushModel for brushes with // proxies for now. virtual void DrawIdentityBrushModel( model_t *model ) = 0; // Mark this dynamic light as having changed this frame ( so light maps affected will be recomputed ) virtual void TouchLight( struct dlight_t *light ) = 0; // Draw 3D Overlays virtual void Draw3DDebugOverlays( void ) = 0; // Sets global blending fraction virtual void SetBlend( float blend ) = 0; virtual float GetBlend( void ) = 0; // Sets global color modulation virtual void SetColorModulation( float const* blend ) = 0; virtual void GetColorModulation( float* blend ) = 0; // Wrap entire scene drawing virtual void SceneBegin( void ) = 0; virtual void SceneEnd( void ) = 0; // Gets the fog volume for a particular point virtual void GetVisibleFogVolume( const Vector& eyePoint, VisibleFogVolumeInfo_t *pInfo ) = 0; // Wraps world drawing // If iForceViewLeaf is not -1, then it uses the specified leaf as your starting area for setting up area portal culling. // This is used by water since your reflected view origin is often in solid space, but we still want to treat it as though // the first portal we're looking out of is a water portal, so our view effectively originates under the water. virtual void BuildWorldLists( WorldListInfo_t* pInfo, bool updateLightmaps, int iForceViewLeaf ) = 0; virtual void DrawWorldLists( unsigned long flags, float waterZAdjust ) = 0; // Optimization for top view virtual void DrawTopView( bool enable ) = 0; virtual void TopViewBounds( Vector2D const& mins, Vector2D const& maxs ) = 0; // Draw lights virtual void DrawLights( void ) = 0; // FIXME: This function is a stub, doesn't do anything in the engine right now virtual void DrawMaskEntities( void ) = 0; // Draw surfaces with alpha virtual void DrawTranslucentSurfaces( int sortIndex, unsigned long flags ) = 0; // Draw Particles ( just draws the linefine for debugging map leaks ) virtual void DrawLineFile( void ) = 0; // Draw lightmaps virtual void DrawLightmaps( void ) = 0; // Wraps view render sequence, sets up a view virtual void ViewSetupVis( bool novis, int numorigins, const Vector origin[] ) = 0; // Return true if any of these leaves are visible in the current PVS. virtual bool AreAnyLeavesVisible( int *leafList, int nLeaves ) = 0; virtual void ViewSetup3D( const CViewSetupV1 *view, Frustum frustumPlanes ) = 0; virtual void ViewSetup2D( const CViewSetupV1 *view ) = 0; virtual void VguiPaint( void ) = 0; // Sets up view fade parameters virtual void ViewDrawFade( byte *color, IMaterial *pMaterial ) = 0; // Sets up the projection matrix for the specified field of view virtual void SetProjectionMatrix( float fov, float zNear, float zFar ) = 0; // Determine lighting at specified position virtual colorVec GetLightAtPoint( Vector& pos ) = 0; // Whose eyes are we looking through? virtual int GetViewEntity( void ) = 0; // Get engine field of view setting virtual float GetFieldOfView( void ) = 0; // 1 == ducking, 0 == not virtual unsigned char **GetAreaBits( void ) = 0; // Set up fog for a particular leaf virtual void SetFogVolumeState( int nVisibleFogVolume, bool bUseHeightFog ) = 0; // Installs a brush surface draw override method, null means use normal renderer virtual void InstallBrushSurfaceRenderer( IBrushRenderer* pBrushRenderer ) = 0; // Draw brush model shadow virtual void DrawBrushModelShadow( IClientRenderable *pRenderable ) = 0; // Does the leaf contain translucent surfaces? virtual bool LeafContainsTranslucentSurfaces( 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; }; } // end namespace VRenderViewV11 #define VENGINE_RENDERVIEW_INTERFACE_VERSION_11 "VEngineRenderView011" #endif // IVRENDERVIEWV11_H
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 5821 | Knut Wikstrom |
Added Valve Source code. This is NOT to be commited to other than new code from Valve. |