-// NOTE: how to move all the shader language out of Radiant in a plugin?
-// -> change this _QERShadersTable into an IShadersManager
-// -> let the plugin create an instance of IShadersManager
-// -> make sure Radiant uses this IShadersManager to load / query the shaders
-
-// NOTE: shader and texture names used must be full path, ie. most often with "textures/" prefix
-// (since shaders are defined in .shader files with textures/)
-
-// free all shaders
-// free the shaders, will not free the qtexture_t*
-typedef void ( WINAPI * PFN_FREESHADERS )();
-// reload all the shaders
-// this will free everything (shaders and their textures), then reload all in use stuff
-typedef void ( WINAPI * PFN_RELOADSHADERS )();
-// load all shaders in a given directory
-// this will scan the list of in-memory shaders, and load the related qtexture_t if needed
-typedef int ( WINAPI * PFN_LOADSHADERSFROMDIR )( const char* path );
-// load a shader file (ie a set of shaders)
-// after LoadShaderFile shaders will be in memory, next step is to load the qtexture_t Radiant uses to represent them
-// if a shader with the same name exists, new one will not be loaded - don't use this to refresh the shaders!
-typedef void ( WINAPI * PFN_LOADSHADERFILE )( const char* filename );
-// tell if a given shader exists in our shader table
-// NOTE: this doesn't tell wether it's corresponding qtexture is loaded
-typedef int ( WINAPI * PFN_HASSHADER )( const char* name );
-// return the shader for a given name
-// if the qtexture is not already in memory, will try loading it
-// if the qtexture could not be found, will use default
-// will return NULL on shader not found
-typedef IShader* ( WINAPI * PFN_TRYSHADERFORNAME )( const char* name );
-// return the shader for a given name
-// if the qtexture is not already in memory, will try loading it
-// will create a default shader if not found (will use a default texture)
-typedef IShader* ( WINAPI * PFN_SHADERFORNAME )( const char* name );
-// query / load a texture
-// will not try loading a shader, will look for the actual image file ..
-// returns NULL on file not found
-// NOTE: strategy for file lookup:
-// paths must be relative, ie. textures/me/myfile
-// if a 3-letters filename extension (such as .jpg or .tga) is provided, it will get loaded first
-// if not found or no extension, will try loading after adding .tga and .jpg (in this order)
-typedef qtexture_t* ( WINAPI * PFN_TRYTEXTUREFORNAME )( const char* filename );
-// query / load a texture
-// will not try loading a shader, will look for the actual image file ..
-// on file not found will use the "texture not found"
-typedef qtexture_t* ( WINAPI * PFN_TEXTUREFORNAME )( const char* filename );
-// get the number of active shaders
-// these are the shaders currently loaded, that have an associated qtexture_t*
-typedef int ( WINAPI * PFN_GETACTIVESHADERCOUNT )();
-// for stuff that needs to be represented by a plain texture
-// the shader will get a "color" name, use GetColor to get the actual color
-typedef IShader* ( WINAPI * PFN_COLORSHADERFORNAME )( const char* name );
-// reload a shaderfile - update shaders and their display properties/qtexture_t if needed
-// will not reload the texture files
-// will switch to "show in use" atfer use
-// filename must be reletive path of the shader, ex. scripts/gothic_wall.shader
-typedef void ( WINAPI * PFN_RELOADSHADERFILE )( const char* filename );
-// retrieve a shader if exists, without loading the textures for it etc.
-// use this function if you want special info on a shader
-typedef IShader* ( WINAPI * PFN_SHADERFORNAMENOLOAD )( const char* name );
-// force the "in use" flag on all active shaders
-typedef void ( WINAPI * PFN_ACTIVESHADERSSETINUSE )( bool b );
-// sort the shaders in alphabetical order, we use the order in the texture inspector
-typedef void ( WINAPI * PFN_SORTACTIVESHADERS )();
-// check if there exists an active shader with the given texture name (loaded or not, doesn't matter)
-// (used to detect the textures we need to create a default shader for .. while scanning a directory)
-typedef IShader* ( WINAPI * PFN_ACTIVESHADERFORTEXTURENAME )( char * );
-// create a shader to wrap around a texture name, we use this when loading a texture directory and some textures
-// are not present as shaders
-typedef IShader* ( WINAPI * PFN_CREATESHADERFORTEXTURENAME )( const char* name );
-// switch the IsDisplayed flag on all the active shaders
-typedef void ( WINAPI * PFN_ACTIVESHADERSSETDISPLAYED )( bool b );
-// retrieve an active shader based on index
-typedef IShader* ( WINAPI * PFN_ACTIVESHADERFORINDEX )( int i );
-// will cleanup a texture name and force it to the right format
-// the debug version is painfully slow, but will detect more problems
-// the idea being to avoid loading the same file several time because of uppercase/lowercase etc.
-typedef const char* ( WINAPI * PFN_CLEANTEXTURENAME )( const char* name, bool bAddTexture );
-
-struct _QERShadersTable
-{
- int m_nSize;
- PFN_FREESHADERS m_pfnFreeShaders;
- PFN_RELOADSHADERS m_pfnReloadShaders;
- PFN_LOADSHADERSFROMDIR m_pfnLoadShadersFromDir;
- PFN_LOADSHADERFILE m_pfnLoadShaderFile;
- PFN_RELOADSHADERFILE m_pfnReloadShaderFile;
- PFN_HASSHADER m_pfnHasShader;
- PFN_TRYSHADERFORNAME m_pfnTry_Shader_ForName;
- PFN_SHADERFORNAME m_pfnShader_ForName;
- PFN_TRYTEXTUREFORNAME m_pfnTry_Texture_ForName;
- PFN_TEXTUREFORNAME m_pfnTexture_ForName;
- PFN_GETACTIVESHADERCOUNT m_pfnGetActiveShaderCount;
- PFN_COLORSHADERFORNAME m_pfnColorShader_ForName;
- PFN_SHADERFORNAMENOLOAD m_pfnShader_ForName_NoLoad;
- PFN_ACTIVESHADERSSETINUSE m_pfnActiveShaders_SetInUse;
- PFN_SORTACTIVESHADERS m_pfnSortActiveShaders;
- PFN_ACTIVESHADERFORTEXTURENAME m_pfnActiveShader_ForTextureName;
- PFN_CREATESHADERFORTEXTURENAME m_pfnCreateShader_ForTextureName;
- PFN_ACTIVESHADERSSETDISPLAYED m_pfnActiveShaders_SetDisplayed;
- PFN_ACTIVESHADERFORINDEX m_pfnActiveShader_ForIndex;
- PFN_CLEANTEXTURENAME m_pfnCleanTextureName;