summaryrefslogtreecommitdiff
path: root/materialsystem/IShaderSystem.h
diff options
context:
space:
mode:
Diffstat (limited to 'materialsystem/IShaderSystem.h')
-rw-r--r--materialsystem/IShaderSystem.h104
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