#pragma once; #include "gl_uniform.h" class FShader { friend class FShaderManager; friend class FRenderState; unsigned int hVertProg = 0; unsigned int hFragProg = 0; protected: unsigned int hShader = 0; #if 0 FName mName; int projectionmatrix_index; int viewmatrix_index; int modelmatrix_index; int texturematrix_index; bool currentTextureMatrixState = false; bool currentModelMatrixState = false; #endif public: FShader() = default; virtual ~FShader(); virtual bool Load(const char * name, const char * vert_prog_lump, const char * fragprog); //, const char * fragprog2, const char *defines); bool Bind(); unsigned int GetHandle() const { return hShader; } }; class PolymostShader : public FShader { public: FBufferedUniform2f Clamp; FBufferedUniform1f Shade; FBufferedUniform1f NumShades; FBufferedUniform1f VisFactor; FBufferedUniform1f UseColorOnly; FBufferedUniform1f UsePalette; FBufferedUniform1f UseDetailMapping; FBufferedUniform1f UseGlowMapping; FBufferedUniform1f NPOTEmulation; FBufferedUniform1f NPOTEmulationFactor; FBufferedUniform1f NPOTEmulationXOffset; FBufferedUniform1f Brightness; FBufferedUniform4f FogColor; FBufferedUniform1f ShadeInterpolate; FUniformMatrix4f RotMatrix; FUniformMatrix4f ModelMatrix; FUniformMatrix4f ProjectionMatrix; FUniformMatrix4f DetailMatrix; FUniformMatrix4f TextureMatrix; public: PolymostShader() = default; virtual bool Load(const char * name, const char * vert_prog_lump, const char * fragprog); //, const char * fragprog2, const char *defines); }; class SurfaceShader : public FShader { public: SurfaceShader() = default; virtual bool Load(const char* name, const char* vert_prog_lump, const char* fragprog); //, const char * fragprog2, const char *defines); };