// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "display/shader/Shader.hpp" namespace Dawn { class SimpleTexturedShaderProgram : public ShaderProgram { public: shaderparameter_t paramProjection; shaderparameter_t paramView; shaderparameter_t paramModel; shaderparameter_t paramColor; shaderparameter_t paramTexture; shaderparameter_t paramHasTexture; void compile() override { this->compileShader( // Vertex Shader "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "layout (location = 1) in vec2 aTexCoord;\n" "uniform mat4 u_Proj;\n" "uniform mat4 u_View;\n" "uniform mat4 u_Model;\n" "out vec2 o_TextCoord;\n" "void main() {\n" "gl_Position = u_Proj * u_View * u_Model * vec4(aPos, 1.0);\n" "o_TextCoord = vec2(aTexCoord.x, aTexCoord.y);\n" "}", // Fragment Shader "#version 330 core\n" "in vec2 o_TextCoord;\n" "out vec4 o_Color;\n" "uniform vec4 u_Color;\n" "uniform bool u_HasTexture;\n" "uniform sampler2D u_Text;\n" "void main() {\n" "if(u_HasTexture) {\n" "o_Color = texture(u_Text, o_TextCoord) * u_Color;\n" "} else {\n" "o_Color = u_Color;" "}\n" "}\n" ); this->paramProjection = this->getParameterByName("u_Proj"); this->paramView = this->getParameterByName("u_View"); this->paramModel = this->getParameterByName("u_Model"); this->paramColor = this->getParameterByName("u_Color"); this->paramTexture = this->getParameterByName("u_Text"); this->paramHasTexture = this->getParameterByName("u_HasTexture"); } }; }