summaryrefslogtreecommitdiff
path: root/public/materialsystem/IShader.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/materialsystem/IShader.h')
-rw-r--r--public/materialsystem/IShader.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/public/materialsystem/IShader.h b/public/materialsystem/IShader.h
new file mode 100644
index 0000000..7815e8a
--- /dev/null
+++ b/public/materialsystem/IShader.h
@@ -0,0 +1,105 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+
+#ifndef ISHADER_H
+#define ISHADER_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+//==================================================================================================
+// **this goes into both platforms which run the translator, either the real Mac client or
+// the Windows client running with r_emulategl mode **
+//
+// size of the VS register bank in ARB / GLSL we expose
+// it's not 256, because you can't use all 256 slots in 10.5.x.
+// use this constant everywhere you might normally use "256" in reference to a parameter array size.
+// The highest shader constant is c218, plus we allocate c219 and c220 for two clip planes
+#define DXABSTRACT_VS_PARAM_SLOTS 228
+#define DXABSTRACT_VS_FIRST_BONE_SLOT VERTEX_SHADER_MODEL
+#define DXABSTRACT_VS_LAST_BONE_SLOT (VERTEX_SHADER_SHADER_SPECIFIC_CONST_13-1)
+
+// user clip plane 0 goes in DXABSTRACT_VS_CLIP_PLANE_BASE... plane 1 goes in the slot after that
+// dxabstract uses these constants to check plane index limit and to deliver planes to shader for DP4 -> oCLP[n]
+#define DXABSTRACT_VS_CLIP_PLANE_BASE (DXABSTRACT_VS_PARAM_SLOTS-2)
+
+//==================================================================================================
+
+
+#include "materialsystem/imaterialsystem.h"
+#include "materialsystem/ishaderapi.h"
+#include "materialsystem/ishadersystem_declarations.h"
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+class IMaterialVar;
+class IShaderShadow;
+class IShaderDynamicAPI;
+class IShaderInit;
+class CBasePerMaterialContextData;
+
+//-----------------------------------------------------------------------------
+// Information about each shader parameter
+//-----------------------------------------------------------------------------
+struct ShaderParamInfo_t
+{
+ const char *m_pName;
+ const char *m_pHelp;
+ ShaderParamType_t m_Type;
+ const char *m_pDefaultValue;
+ int m_nFlags;
+};
+
+
+
+#define VERTEX_SHADER_BONE_TRANSFORM( k ) ( VERTEX_SHADER_MODEL + 3 * (k) )
+
+
+// The public methods exposed by each shader
+//-----------------------------------------------------------------------------
+abstract_class IShader
+{
+public:
+ // Returns the shader name
+ virtual char const* GetName( ) const = 0;
+
+ // returns the shader fallbacks
+ virtual char const* GetFallbackShader( IMaterialVar** params ) const = 0;
+
+ // Shader parameters
+ virtual int GetNumParams( ) const = 0;
+
+ // These functions must be implemented by the shader
+ virtual void InitShaderParams( IMaterialVar** ppParams, const char *pMaterialName ) = 0;
+ virtual void InitShaderInstance( IMaterialVar** ppParams, IShaderInit *pShaderInit, const char *pMaterialName, const char *pTextureGroupName ) = 0;
+ virtual void DrawElements( IMaterialVar **params, int nModulationFlags,
+ IShaderShadow* pShaderShadow, IShaderDynamicAPI* pShaderAPI, VertexCompressionType_t vertexCompression, CBasePerMaterialContextData **pContextDataPtr ) = 0;
+
+ virtual char const* GetParamName( int paramIndex ) const = 0;
+ virtual char const* GetParamHelp( int paramIndex ) const = 0;
+ virtual ShaderParamType_t GetParamType( int paramIndex ) const = 0;
+ virtual char const* GetParamDefault( int paramIndex ) const = 0;
+
+ // FIXME: Figure out a better way to do this?
+ virtual int ComputeModulationFlags( IMaterialVar** params, IShaderDynamicAPI* pShaderAPI ) = 0;
+ virtual bool NeedsPowerOfTwoFrameBufferTexture( IMaterialVar **params, bool bCheckSpecificToThisFrame = true ) const = 0;
+ virtual bool NeedsFullFrameBufferTexture( IMaterialVar **params, bool bCheckSpecificToThisFrame ) const = 0;
+ virtual bool IsTranslucent( IMaterialVar **params ) const = 0;
+
+ virtual int GetParamFlags( int paramIndex ) const = 0;
+
+ virtual int GetFlags() const = 0;
+
+ // FIXME: Remove GetParamName, etc. above
+// virtual const ShaderParamInfo_t& GetParamInfo( int paramIndex ) const = 0;
+};
+
+#endif // ISHADER_H