text: #ifndef IV_SHADEREDITOR
  #define IV_SHADEREDITOR
  
  #ifdef _WIN32
  #pragma once
  #endif // _WIN32
  
  #define pFnClCallback( x ) void(* x )( float *pfl4 )
  #define pFnClCallback_Declare( x ) void x( float *pfl4 )
  
  #define pFnVrCallback( x ) void(* x )( bool * const pbOptions, int * const piOptions,\
  										float * const pflOptions, char ** const pszOptions )
  #define pFnVrCallback_Declare( x ) void x( bool * const pbOptions, int * const piOptions,\
  										float * const pflOptions, char ** const pszOptions )
  
  #ifndef PROCSHADER_DLL
  
  #ifdef SHADER_EDITOR_DLL
  #include "../public/tier1/interface.h"
  #include "view_shared.h"
  #else
  #include "interface.h"
  #include "ShaderEditor/ShaderEditorSystem.h"
  #endif // NOT SHADER_EDITOR_DLL
  
  enum SEDIT_SKYMASK_MODE
  {
  	SKYMASK_OFF = 0,
  	SKYMASK_QUARTER, // render at 1/4 fb size where possible
  	SKYMASK_FULL, // render at full fb size
  };
  
  class CViewSetup_SEdit_Shared
  {
  public:
  	CViewSetup_SEdit_Shared()
  	{
  		Q_memset( this, 0, sizeof( CViewSetup_SEdit_Shared ) );
  	};
  	CViewSetup_SEdit_Shared( const CViewSetup &o )
  	{
  		x = o.x;
  		y = o.y;
  		width = o.width;
  		height = o.height;
  		fov = o.fov;
  		fovViewmodel = o.fovViewmodel;
  		origin = o.origin;
  		angles = o.angles;
  		zNear = o.zNear;
  		zFar = o.zFar;
  		zNearViewmodel = o.zNearViewmodel;
  		zFarViewmodel = o.zFarViewmodel;
  		m_flAspectRatio = o.m_flAspectRatio;
  	};
  	int			x,y,width,height;
  	float		fov,fovViewmodel;
  	Vector		origin;
  	QAngle		angles;
  	float		zNear,zFar,zNearViewmodel,zFarViewmodel;
  	float		m_flAspectRatio;
  };
  
  
  class IVShaderEditor : public IBaseInterface
  {
  public:
  	virtual bool Init( CreateInterfaceFn appSystemFactory, CGlobalVarsBase *pGlobals,
  					void *pSEditMRender,
  					bool bCreateEditor, bool bEnablePrimaryDebug, int iSkymaskMode ) = 0;
  	virtual void Shutdown() = 0;
  	virtual void PrecacheData() = 0;
  
  	// call before Init() to overwrite any paths, pass in NULL for the ones that shouldn't be overwritten
  	virtual void OverridePaths( const char *pszWorkingDirectory,
  		const char *pszCompilePath = NULL,		// abs path to compiler binaries
  		const char *pszLocalCompilePath = NULL,	// local path to compiler binaries, relative to shader source directory
  		const char *pszGamePath = NULL,
  		const char *pszCanvas = NULL,			// path to canvas files
  		const char *pszShaderSource = NULL,		// path to shader source files
  		const char *pszDumps = NULL,			// path to shader configuration files
  		const char *pszUserFunctions = NULL,	// path to custom function bodies
  		const char *pszEditorRoot = NULL ) = 0;	// path to 'shadereditorui' home directory
  
  	// update the lib
  	virtual void OnFrame( float frametime ) = 0;
  	virtual void OnPreRender( void *viewsetup ) = 0;
  	virtual void OnSceneRender() = 0;
  	virtual void OnUpdateSkymask(bool bCombineMode, int x, int y, int w, int h) = 0;
  	virtual void OnPostRender( bool bUpdateFB ) = 0;
  
  	// data callbacks for hlsl constants
  	virtual void RegisterClientCallback( const char *name, pFnClCallback(callback), int numComponents ) = 0;
  	virtual void LockClientCallbacks() = 0;
  
  	// view render callbacks for post processing graphs
  	virtual void RegisterViewRenderCallback( const char *pszVrCName, pFnVrCallback(callback),
  		const char **pszBoolNames = NULL, const bool *pBoolDefaults = NULL, const int numBoolParams = 0,
  		const char **pszIntNames = NULL, const int *pIntDefaults = NULL, const int numIntParams = 0,
  		const char **pszFloatNames = NULL, const float *pFloatDefaults = NULL, const int numFloatParams = 0,
  		const char **pszStringNames = NULL, const char **pStringDefaults = NULL, const int numStringParams = 0 ) = 0;
  	virtual void LockViewRenderCallbacks() = 0;
  
  	// post processing effect manipulation (precached effects accessible)
  	// the index becomes invalid when editing the precache list
  	virtual int			GetPPEIndex( const char *pszName ) = 0; // returns -1 when not found, case insensitive
  	virtual bool		IsPPEEnabled( const int &index ) = 0;
  	virtual void		SetPPEEnabled( const int &index, const bool &bEnabled ) = 0;
  	virtual IMaterial	*GetPPEMaterial( const int &index, const char *pszNodeName ) = 0;
  
  	// Draws a PPE graph right now or adds it to the render queue (r_queued_post_processing!)
  	// Does not push a new RT but uses the current one
  	// If you have 'during scene' nodes, make sure to call it twice in the appropriate places
  	virtual void		DrawPPEOnDemand( const int &index, const bool bInScene = false ) = 0;
  };
  
  #define SHADEREDIT_INTERFACE_VERSION "ShaderEditor005"
  
  #ifdef SHADER_EDITOR_DLL
  class ShaderEditorInterface;
  extern ShaderEditorInterface *shaderEdit;
  #else
  extern IVShaderEditor *shaderEdit;
  #endif // NOT SHADER_EDITOR_DLL
  
  #endif // NOT PROCSHADER_DLL
  
  #endif // NOT IV_SHADEREDITOR