61 lines
1.9 KiB
C++
61 lines
1.9 KiB
C++
// 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");
|
|
}
|
|
};
|
|
} |