// SPDX-License-Identifier: MIT // // EmulationStation Desktop Edition // Shader_GL21.h // // OpenGL 2.1 GLSL shader functions. // #ifndef ES_CORE_RENDERER_SHADER_GL21_H #define ES_CORE_RENDERER_SHADER_GL21_H #define GL_GLEXT_PROTOTYPES #include "math/Transform4x4f.h" #if defined(_WIN64) #include #endif #include #include #include #include #include namespace Renderer { class Shader { public: Shader(); ~Shader(); // Loads the shader source code only, no compilation done at this point. void loadShaderFile(const std::string& path, GLenum shaderType); // Compilation, shader attachment and linking. bool createProgram(); // Only used for a clean shutdown. void deleteProgram(GLuint programID); // Get references to the variables inside the compiled shaders. void getVariableLocations(GLuint programID); // One-way communication with the compiled shaders. void setModelViewProjectionMatrix(Transform4x4f mvpMatrix); void setTextureSize(std::array shaderVec2); void setTextureCoordinates(std::array shaderVec4); void setColor(std::array shaderVec4); void setSaturation(GLfloat saturation); void setOpacity(GLfloat opacity); void setDimValue(GLfloat dimValue); // Sets the shader program to use the loaded shaders. void activateShaders(); // Sets the shader program to 0 which reverts to the fixed function pipeline. void deactivateShaders(); // Returns the program ID that was generated by glCreateProgram(). GLuint getProgramID(); // Only used for error logging if the shaders fail to compile or link. void printProgramInfoLog(GLuint programID); void printShaderInfoLog(GLuint shaderID, GLenum shaderType); private: GLuint mProgramID; std::vector> shaderVector; // Variables used for communication with the compiled shaders. GLint shaderMVPMatrix; GLint shaderTextureSize; GLint shaderTextureCoord; GLint shaderColor; GLint shaderSaturation; GLint shaderOpacity; GLint shaderDimValue; }; } // Renderer #endif // ES_CORE_RENDERER_SHADER_GL21_H