summaryrefslogtreecommitdiff
path: root/public/engine/ivmodelrender.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/engine/ivmodelrender.h')
-rw-r--r--public/engine/ivmodelrender.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/public/engine/ivmodelrender.h b/public/engine/ivmodelrender.h
new file mode 100644
index 0000000..fc10350
--- /dev/null
+++ b/public/engine/ivmodelrender.h
@@ -0,0 +1,185 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#ifndef IVMODELRENDER_H
+#define IVMODELRENDER_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "interface.h"
+#include "mathlib/mathlib.h"
+#include "istudiorender.h"
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+struct mstudioanimdesc_t;
+struct mstudioseqdesc_t;
+struct model_t;
+class IClientRenderable;
+class Vector;
+struct studiohdr_t;
+class IMaterial;
+class CStudioHdr;
+
+FORWARD_DECLARE_HANDLE( LightCacheHandle_t );
+
+
+//-----------------------------------------------------------------------------
+// Model rendering state
+//-----------------------------------------------------------------------------
+struct DrawModelState_t
+{
+ studiohdr_t* m_pStudioHdr;
+ studiohwdata_t* m_pStudioHWData;
+ IClientRenderable* m_pRenderable;
+ const matrix3x4_t *m_pModelToWorld;
+ StudioDecalHandle_t m_decals;
+ int m_drawFlags;
+ int m_lod;
+};
+
+
+//-----------------------------------------------------------------------------
+// Model Rendering + instance data
+//-----------------------------------------------------------------------------
+
+// change this when the new version is incompatable with the old
+#define VENGINE_HUDMODEL_INTERFACE_VERSION "VEngineModel016"
+
+typedef unsigned short ModelInstanceHandle_t;
+
+enum
+{
+ MODEL_INSTANCE_INVALID = (ModelInstanceHandle_t)~0
+};
+
+struct ModelRenderInfo_t
+{
+ Vector origin;
+ QAngle angles;
+ IClientRenderable *pRenderable;
+ const model_t *pModel;
+ const matrix3x4_t *pModelToWorld;
+ const matrix3x4_t *pLightingOffset;
+ const Vector *pLightingOrigin;
+ int flags;
+ int entity_index;
+ int skin;
+ int body;
+ int hitboxset;
+ ModelInstanceHandle_t instance;
+
+ ModelRenderInfo_t()
+ {
+ pModelToWorld = NULL;
+ pLightingOffset = NULL;
+ pLightingOrigin = NULL;
+ }
+};
+
+struct StaticPropRenderInfo_t
+{
+ const matrix3x4_t *pModelToWorld;
+ const model_t *pModel;
+ IClientRenderable *pRenderable;
+ Vector *pLightingOrigin;
+ short skin;
+ ModelInstanceHandle_t instance;
+};
+
+// UNDONE: Move this to hud export code, subsume previous functions
+abstract_class IVModelRender
+{
+public:
+ virtual int DrawModel( int flags,
+ IClientRenderable *pRenderable,
+ ModelInstanceHandle_t instance,
+ int entity_index,
+ const model_t *model,
+ Vector const& origin,
+ QAngle const& angles,
+ int skin,
+ int body,
+ int hitboxset,
+ const matrix3x4_t *modelToWorld = NULL,
+ const matrix3x4_t *pLightingOffset = NULL ) = 0;
+
+ // This causes a material to be used when rendering the model instead
+ // of the materials the model was compiled with
+ virtual void ForcedMaterialOverride( IMaterial *newMaterial, OverrideType_t nOverrideType = OVERRIDE_NORMAL ) = 0;
+
+ virtual void SetViewTarget( const CStudioHdr *pStudioHdr, int nBodyIndex, const Vector& target ) = 0;
+
+ // Creates, destroys instance data to be associated with the model
+ virtual ModelInstanceHandle_t CreateInstance( IClientRenderable *pRenderable, LightCacheHandle_t *pCache = NULL ) = 0;
+ virtual void DestroyInstance( ModelInstanceHandle_t handle ) = 0;
+
+ // Associates a particular lighting condition with a model instance handle.
+ // FIXME: This feature currently only works for static props. To make it work for entities, etc.,
+ // we must clean up the lightcache handles as the model instances are removed.
+ // At the moment, since only the static prop manager uses this, it cleans up all LightCacheHandles
+ // at level shutdown.
+ virtual void SetStaticLighting( ModelInstanceHandle_t handle, LightCacheHandle_t* pHandle ) = 0;
+ virtual LightCacheHandle_t GetStaticLighting( ModelInstanceHandle_t handle ) = 0;
+
+ // moves an existing InstanceHandle to a nex Renderable to keep decals etc. Models must be the same
+ virtual bool ChangeInstance( ModelInstanceHandle_t handle, IClientRenderable *pRenderable ) = 0;
+
+ // Creates a decal on a model instance by doing a planar projection
+ // along the ray. The material is the decal material, the radius is the
+ // radius of the decal to create.
+ virtual void AddDecal( ModelInstanceHandle_t handle, Ray_t const& ray,
+ Vector const& decalUp, int decalIndex, int body, bool noPokeThru = false, int maxLODToDecal = ADDDECAL_TO_ALL_LODS ) = 0;
+
+ // Removes all the decals on a model instance
+ virtual void RemoveAllDecals( ModelInstanceHandle_t handle ) = 0;
+
+ // Remove all decals from all models
+ virtual void RemoveAllDecalsFromAllModels() = 0;
+
+ // Shadow rendering, DrawModelShadowSetup returns the address of the bone-to-world array, NULL in case of error
+ virtual matrix3x4_t* DrawModelShadowSetup( IClientRenderable *pRenderable, int body, int skin, DrawModelInfo_t *pInfo, matrix3x4_t *pCustomBoneToWorld = NULL ) = 0;
+ virtual void DrawModelShadow( IClientRenderable *pRenderable, const DrawModelInfo_t &info, matrix3x4_t *pCustomBoneToWorld = NULL ) = 0;
+
+ // This gets called when overbright, etc gets changed to recompute static prop lighting.
+ virtual bool RecomputeStaticLighting( ModelInstanceHandle_t handle ) = 0;
+
+ virtual void ReleaseAllStaticPropColorData( void ) = 0;
+ virtual void RestoreAllStaticPropColorData( void ) = 0;
+
+ // Extended version of drawmodel
+ virtual int DrawModelEx( ModelRenderInfo_t &pInfo ) = 0;
+
+ virtual int DrawModelExStaticProp( ModelRenderInfo_t &pInfo ) = 0;
+
+ virtual bool DrawModelSetup( ModelRenderInfo_t &pInfo, DrawModelState_t *pState, matrix3x4_t *pCustomBoneToWorld, matrix3x4_t** ppBoneToWorldOut ) = 0;
+ virtual void DrawModelExecute( const DrawModelState_t &state, const ModelRenderInfo_t &pInfo, matrix3x4_t *pCustomBoneToWorld = NULL ) = 0;
+
+ // Sets up lighting context for a point in space
+ virtual void SetupLighting( const Vector &vecCenter ) = 0;
+
+ // doesn't support any debug visualization modes or other model options, but draws static props in the
+ // fastest way possible
+ virtual int DrawStaticPropArrayFast( StaticPropRenderInfo_t *pProps, int count, bool bShadowDepth ) = 0;
+
+ // Allow client to override lighting state
+ virtual void SuppressEngineLighting( bool bSuppress ) = 0;
+
+ virtual void SetupColorMeshes( int nTotalVerts ) = 0;
+
+ virtual void AddColoredDecal( ModelInstanceHandle_t handle, Ray_t const& ray,
+ Vector const& decalUp, int decalIndex, int body, Color cColor, bool noPokeThru = false, int maxLODToDecal = ADDDECAL_TO_ALL_LODS ) = 0;
+
+ virtual void GetMaterialOverride( IMaterial** ppOutForcedMaterial, OverrideType_t* pOutOverrideType ) = 0;
+};
+
+
+#endif // IVMODELRENDER_H