diff options
Diffstat (limited to 'materialsystem/IShaderSystem.h')
| -rw-r--r-- | materialsystem/IShaderSystem.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/materialsystem/IShaderSystem.h b/materialsystem/IShaderSystem.h new file mode 100644 index 0000000..81f3a8e --- /dev/null +++ b/materialsystem/IShaderSystem.h @@ -0,0 +1,104 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Header: $ +// $NoKeywords: $ +// An interface that should not ever be accessed directly from shaders +// but instead is visible only to shaderlib. +//===========================================================================// + +#ifndef ISHADERSYSTEM_H +#define ISHADERSYSTEM_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "interface.h" +#include <materialsystem/IShader.h> + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +enum Sampler_t; +class ITexture; +class IShader; + + +//----------------------------------------------------------------------------- +// The Shader system interface version +//----------------------------------------------------------------------------- +#define SHADERSYSTEM_INTERFACE_VERSION "ShaderSystem002" + + +//----------------------------------------------------------------------------- +// Modulation flags +//----------------------------------------------------------------------------- +enum +{ + SHADER_USING_COLOR_MODULATION = 0x1, + SHADER_USING_ALPHA_MODULATION = 0x2, + SHADER_USING_FLASHLIGHT = 0x4, + SHADER_USING_FIXED_FUNCTION_BAKED_LIGHTING = 0x8, + SHADER_USING_EDITOR = 0x10, +}; + + +//----------------------------------------------------------------------------- +// The shader system (a singleton) +//----------------------------------------------------------------------------- +abstract_class IShaderSystem +{ +public: + virtual ShaderAPITextureHandle_t GetShaderAPITextureBindHandle( ITexture *pTexture, int nFrameVar, int nTextureChannel = 0 ) =0; + + // Binds a texture + virtual void BindTexture( Sampler_t sampler1, ITexture *pTexture, int nFrameVar = 0 ) = 0; + virtual void BindTexture( Sampler_t sampler1, Sampler_t sampler2, ITexture *pTexture, int nFrameVar = 0 ) = 0; + + // Takes a snapshot + virtual void TakeSnapshot( ) = 0; + + // Draws a snapshot + virtual void DrawSnapshot( bool bMakeActualDrawCall = true ) = 0; + + // Are we using graphics? + virtual bool IsUsingGraphics() const = 0; + + // Are we using graphics? + virtual bool CanUseEditorMaterials() const = 0; +}; + + +//----------------------------------------------------------------------------- +// The Shader plug-in DLL interface version +//----------------------------------------------------------------------------- +#define SHADER_DLL_INTERFACE_VERSION "ShaderDLL004" + + +//----------------------------------------------------------------------------- +// The Shader interface versions +//----------------------------------------------------------------------------- +abstract_class IShaderDLLInternal +{ +public: + // Here's where the app systems get to learn about each other + virtual bool Connect( CreateInterfaceFn factory, bool bIsMaterialSystem ) = 0; + virtual void Disconnect( bool bIsMaterialSystem ) = 0; + + // Returns the number of shaders defined in this DLL + virtual int ShaderCount() const = 0; + + // Returns information about each shader defined in this DLL + virtual IShader *GetShader( int nShader ) = 0; +}; + + +//----------------------------------------------------------------------------- +// Singleton interface +//----------------------------------------------------------------------------- +IShaderDLLInternal *GetShaderDLLInternal(); + + +#endif // ISHADERSYSTEM_H |