-// 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