First working example
This commit is contained in:
		| @@ -7,9 +7,9 @@ | ||||
| #include "display/_RenderManager.hpp" | ||||
| #include "display/BackBufferRenderTarget.hpp" | ||||
| #include "display/shader/ShaderManager.hpp" | ||||
| #include "display/shader/SimpleTexturedShader.hpp" | ||||
| #include "display/shader/FontShader.hpp" | ||||
| #include "display/shader/UIShader.hpp" | ||||
| #include "display/shader/shaders/SimpleTexturedShader.hpp" | ||||
| #include "display/shader/shaders/FontShader.hpp" | ||||
| #include "display/shader/shaders/UIShader.hpp" | ||||
| #include "display/RenderPipeline.hpp" | ||||
| #include "display/font/FontManager.hpp" | ||||
| #include "display/font/ExampleFont.hpp" | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| target_sources(${DAWN_TARGET_NAME} | ||||
|   PRIVATE | ||||
|     Shader.cpp | ||||
|     FontShader.cpp | ||||
|     SimpleTexturedShader.cpp | ||||
|     SimpleBillboardedShader.cpp | ||||
| ) | ||||
| ) | ||||
|  | ||||
| add_subdirectory(buffers) | ||||
| add_subdirectory(shaders) | ||||
| @@ -13,7 +13,7 @@ namespace Dawn { | ||||
|   typedef GLuint shaderbufferlocation_t; | ||||
|    | ||||
|   template<typename T> | ||||
|   class ShaderParameterBuffer : public IShaderParameterBuffer<T, shaderbufferslot_t> { | ||||
|   class ShaderParameterBuffer : public IShaderParameterBuffer<shaderbufferslot_t> { | ||||
|     protected: | ||||
|       shaderbufferlocation_t id = -1; | ||||
|       size_t size; | ||||
| @@ -29,7 +29,14 @@ namespace Dawn { | ||||
|         glBufferData(GL_UNIFORM_BUFFER, this->size, NULL, GL_DYNAMIC_DRAW); | ||||
|       } | ||||
|  | ||||
|       void buffer(T *data) override { | ||||
|       /** | ||||
|        * Basic buffer method. Buffers the entire contents of the data struct to | ||||
|        * this shader parameter buffer. | ||||
|        *  | ||||
|        * @param data Data to buffer to the parameter. | ||||
|        */ | ||||
|       void buffer(T *data) { | ||||
|         this->bind(0); | ||||
|         this->bufferRaw((void*)data); | ||||
|       } | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								src/dawnopengl/display/shader/buffers/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/dawnopengl/display/shader/buffers/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| # Copyright (c) 2023 Dominic Masters | ||||
| #  | ||||
| # This software is released under the MIT License. | ||||
| # https://opensource.org/licenses/MIT | ||||
|  | ||||
| # Sources | ||||
| target_sources(${DAWN_TARGET_NAME} | ||||
|   PRIVATE | ||||
| ) | ||||
| @@ -0,0 +1,30 @@ | ||||
| // Copyright (c) 2023 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #pragma once | ||||
| #include "display/shader/ShaderParameterBuffer.hpp" | ||||
|  | ||||
| namespace Dawn { | ||||
|   struct RenderPipelineShaderBufferData { | ||||
|     glm::mat4 view; | ||||
|     glm::mat4 projection; | ||||
|   }; | ||||
|  | ||||
|   class RenderPipelineShaderBuffer : public ShaderParameterBuffer<struct RenderPipelineShaderBufferData> { | ||||
|     public: | ||||
|       static std::string getShaderUniformName() { | ||||
|         return "ub_RenderPipeline"; | ||||
|       } | ||||
|  | ||||
|       static std::string getShaderUniform() { | ||||
|         return std::string( | ||||
|           "layout (std140) uniform ub_RenderPipeline {\n" | ||||
|             "mat4 u_View;\n" | ||||
|             "mat4 u_Projection;\n" | ||||
|           "};" | ||||
|         ); | ||||
|       } | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/dawnopengl/display/shader/shaders/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/dawnopengl/display/shader/shaders/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| # Copyright (c) 2023 Dominic Masters | ||||
| #  | ||||
| # This software is released under the MIT License. | ||||
| # https://opensource.org/licenses/MIT | ||||
|  | ||||
| # Sources | ||||
| target_sources(${DAWN_TARGET_NAME} | ||||
|   PRIVATE | ||||
|     FontShader.cpp | ||||
|     SimpleTexturedShader.cpp | ||||
|     SimpleBillboardedShader.cpp | ||||
| ) | ||||
| @@ -1,96 +1,98 @@ | ||||
| // Copyright (c) 2023 Dominic Masters
 | ||||
| // 
 | ||||
| // This software is released under the MIT License.
 | ||||
| // https://opensource.org/licenses/MIT
 | ||||
| 
 | ||||
| #include "SimpleTexturedShader.hpp" | ||||
| 
 | ||||
| using namespace Dawn; | ||||
| 
 | ||||
| void SimpleTexturedShader::compile() { | ||||
|   #if DAWN_OPENGL_GLSL | ||||
|     this->compileShader( | ||||
|       { | ||||
|         { "aPos", 0 }, | ||||
|         { "aTexCoord", 1 } | ||||
|       }, | ||||
|       // 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" | ||||
|     ); | ||||
|   #elif DAWN_OPENGL_HLSL | ||||
|     this->compileShader( | ||||
|       { | ||||
|         { "aPos", 0 }, | ||||
|         { "aTexCoord", 1 } | ||||
|       }, | ||||
|       // Vertex Shader
 | ||||
|       "uniform float4x4 u_Proj;\n" | ||||
|       "uniform float4x4 u_View;\n" | ||||
|       "uniform float4x4 u_Model;\n" | ||||
|       "void main(" | ||||
|         "float3 aPos,\n" | ||||
|         "float2 aTexCoord,\n" | ||||
|         "float2 out o_TextCoord : TEXCOORD0,\n" | ||||
|         "float4 out gl_Position : POSITION\n" | ||||
|       ") {\n"  | ||||
|         "o_TextCoord = aTexCoord;\n" | ||||
|         "gl_Position = mul(mul(mul(float4(aPos, 1.0), u_Model), u_View), u_Proj);\n" | ||||
|       "}", | ||||
| 
 | ||||
|       // Fragment Shader
 | ||||
|       "uniform float4 u_Color;\n" | ||||
|       "uniform bool u_HasTexture;\n" | ||||
|       "uniform sampler2D u_Text : TEXUNIT0;\n" | ||||
| 
 | ||||
|       "float4 main(\n" | ||||
|         "float2 o_TextCoord : TEXCOORD0\n" | ||||
|       ") {\n" | ||||
|         "float4 o_Color;\n" | ||||
|         "if(u_HasTexture) {\n" | ||||
|           "o_Color = mul(tex2D(u_Text, o_TextCoord), u_Color);\n" | ||||
|         "} else {\n" | ||||
|           "o_Color = u_Color;\n" | ||||
|         "}\n" | ||||
|         "return o_Color;\n" | ||||
|       "}\n" | ||||
|     ); | ||||
|   #else | ||||
|     #error Shader Type must be either GLSL or HLSL | ||||
|   #endif | ||||
| 
 | ||||
|   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"); | ||||
| // Copyright (c) 2023 Dominic Masters
 | ||||
| // 
 | ||||
| // This software is released under the MIT License.
 | ||||
| // https://opensource.org/licenses/MIT
 | ||||
| 
 | ||||
| #include "SimpleTexturedShader.hpp" | ||||
| 
 | ||||
| using namespace Dawn; | ||||
| 
 | ||||
| void SimpleTexturedShader::compile() { | ||||
|   #if DAWN_OPENGL_GLSL | ||||
|     this->compileShader( | ||||
|       { | ||||
|         { "aPos", 0 }, | ||||
|         { "aTexCoord", 1 } | ||||
|       }, | ||||
|       // Vertex Shader
 | ||||
|       "#version 330 core\n" | ||||
|       "layout (location = 0) in vec3 aPos;\n" | ||||
|       "layout (location = 1) in vec2 aTexCoord;\n" + | ||||
| 
 | ||||
|       RenderPipelineShaderBuffer::getShaderUniform() + "" | ||||
| 
 | ||||
|       // "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_Projection * 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" | ||||
|     ); | ||||
|   #elif DAWN_OPENGL_HLSL | ||||
|     this->compileShader( | ||||
|       { | ||||
|         { "aPos", 0 }, | ||||
|         { "aTexCoord", 1 } | ||||
|       }, | ||||
|       // Vertex Shader
 | ||||
|       "uniform float4x4 u_Proj;\n" | ||||
|       "uniform float4x4 u_View;\n" | ||||
|       "uniform float4x4 u_Model;\n" | ||||
|       "void main(" | ||||
|         "float3 aPos,\n" | ||||
|         "float2 aTexCoord,\n" | ||||
|         "float2 out o_TextCoord : TEXCOORD0,\n" | ||||
|         "float4 out gl_Position : POSITION\n" | ||||
|       ") {\n"  | ||||
|         "o_TextCoord = aTexCoord;\n" | ||||
|         "gl_Position = mul(mul(mul(float4(aPos, 1.0), u_Model), u_View), u_Proj);\n" | ||||
|       "}", | ||||
| 
 | ||||
|       // Fragment Shader
 | ||||
|       "uniform float4 u_Color;\n" | ||||
|       "uniform bool u_HasTexture;\n" | ||||
|       "uniform sampler2D u_Text : TEXUNIT0;\n" | ||||
| 
 | ||||
|       "float4 main(\n" | ||||
|         "float2 o_TextCoord : TEXCOORD0\n" | ||||
|       ") {\n" | ||||
|         "float4 o_Color;\n" | ||||
|         "if(u_HasTexture) {\n" | ||||
|           "o_Color = mul(tex2D(u_Text, o_TextCoord), u_Color);\n" | ||||
|         "} else {\n" | ||||
|           "o_Color = u_Color;\n" | ||||
|         "}\n" | ||||
|         "return o_Color;\n" | ||||
|       "}\n" | ||||
|     ); | ||||
|   #else | ||||
|     #error Shader Type must be either GLSL or HLSL | ||||
|   #endif | ||||
| 
 | ||||
|   this->paramModel = this->getParameterByName("u_Model"); | ||||
|   this->paramColor = this->getParameterByName("u_Color"); | ||||
|   this->paramTexture = this->getParameterByName("u_Text"); | ||||
|   this->paramHasTexture = this->getParameterByName("u_HasTexture"); | ||||
| 
 | ||||
|   this->bufferRenderPipeline = this->getBufferLocationByName(RenderPipelineShaderBuffer::getShaderUniformName()); | ||||
| } | ||||
| @@ -1,21 +1,24 @@ | ||||
| // Copyright (c) 2023 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 SimpleTexturedShader : public Shader { | ||||
|     public: | ||||
|       shaderparameter_t paramProjection; | ||||
|       shaderparameter_t paramView; | ||||
|       shaderparameter_t paramModel; | ||||
|       shaderparameter_t paramColor; | ||||
|       shaderparameter_t paramTexture; | ||||
|       shaderparameter_t paramHasTexture; | ||||
| 
 | ||||
|       void compile() override; | ||||
|   }; | ||||
| // Copyright (c) 2023 Dominic Masters
 | ||||
| // 
 | ||||
| // This software is released under the MIT License.
 | ||||
| // https://opensource.org/licenses/MIT
 | ||||
| 
 | ||||
| #pragma once | ||||
| #include "display/shader/buffers/RenderPipelineShaderBuffer.hpp" | ||||
| #include "display/shader/Shader.hpp" | ||||
| 
 | ||||
| namespace Dawn { | ||||
|   class SimpleTexturedShader : public Shader { | ||||
|     public: | ||||
|       shaderparameter_t paramProjection; | ||||
|       shaderparameter_t paramView; | ||||
|        | ||||
|       shaderparameter_t paramModel; | ||||
|       shaderparameter_t paramColor; | ||||
|       shaderparameter_t paramTexture; | ||||
|       shaderparameter_t paramHasTexture; | ||||
|       shaderbufferlocation_t bufferRenderPipeline; | ||||
| 
 | ||||
|       void compile() override; | ||||
|   }; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user