idk shaders
This commit is contained in:
@ -8,5 +8,4 @@ target_sources(${DAWN_TARGET_NAME}
|
|||||||
PRIVATE
|
PRIVATE
|
||||||
ShaderProgram.cpp
|
ShaderProgram.cpp
|
||||||
SimpleTexturedShader.cpp
|
SimpleTexturedShader.cpp
|
||||||
SimpleTexturedShaderProgram.cpp
|
|
||||||
)
|
)
|
@ -3,11 +3,11 @@
|
|||||||
// This software is released under the MIT License.
|
// This software is released under the MIT License.
|
||||||
// https://opensource.org/licenses/MIT
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
#include "SimpleTexturedShaderProgram.hpp"
|
#include "SimpleBillboardedShader.hpp"
|
||||||
|
|
||||||
using namespace Dawn;
|
using namespace Dawn;
|
||||||
|
|
||||||
void SimpleTexturedShaderProgram::compile() {
|
void SimpleBillboardedShaderProgram::compile() {
|
||||||
#if DAWN_OPENGL_GLSL
|
#if DAWN_OPENGL_GLSL
|
||||||
this->compileShader(
|
this->compileShader(
|
||||||
{
|
{
|
||||||
@ -25,7 +25,10 @@ void SimpleTexturedShaderProgram::compile() {
|
|||||||
|
|
||||||
"out vec2 o_TextCoord;\n"
|
"out vec2 o_TextCoord;\n"
|
||||||
"void main() {\n"
|
"void main() {\n"
|
||||||
"gl_Position = u_Proj * u_View * u_Model * vec4(aPos, 1.0);\n"
|
"vec3 camRight = vec3(view[0][0], view[1][0], view[2][0]);\n"
|
||||||
|
"vec3 camUp = vec3(view[0][1], view[1][1], view[2][1]);\n"
|
||||||
|
"vec3 billboardPos = view[3].xyz + position.x * camRight + position.y * camUp;\n"
|
||||||
|
"gl_Position = u_Proj * u_View * u_Model * vec4(billboardPos, 1.0);\n"
|
||||||
"o_TextCoord = vec2(aTexCoord.x, aTexCoord.y);\n"
|
"o_TextCoord = vec2(aTexCoord.x, aTexCoord.y);\n"
|
||||||
"}",
|
"}",
|
||||||
|
|
||||||
@ -45,45 +48,6 @@ void SimpleTexturedShaderProgram::compile() {
|
|||||||
"}\n"
|
"}\n"
|
||||||
"}\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
|
#endif
|
||||||
|
|
||||||
this->paramProjection = this->getParameterByName("u_Proj");
|
this->paramProjection = this->getParameterByName("u_Proj");
|
34
src/dawnopengl/display/shader/SimpleBillboardedShader.hpp
Normal file
34
src/dawnopengl/display/shader/SimpleBillboardedShader.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// 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 SimpleBillboardedShader : public ShaderProgram {
|
||||||
|
public:
|
||||||
|
shaderparameter_t paramProjection;
|
||||||
|
shaderparameter_t paramView;
|
||||||
|
shaderparameter_t paramModel;
|
||||||
|
shaderparameter_t paramColor;
|
||||||
|
shaderparameter_t paramTexture;
|
||||||
|
shaderparameter_t paramHasTexture;
|
||||||
|
|
||||||
|
void compile() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SimpleBillboardedShader : public Shader {
|
||||||
|
public:
|
||||||
|
SimpleBillboardedShaderProgram program;
|
||||||
|
|
||||||
|
void compile() override;
|
||||||
|
|
||||||
|
std::vector<struct ShaderPassItem> getPassItems(
|
||||||
|
Mesh *mesh,
|
||||||
|
Material *material,
|
||||||
|
Camera *camera
|
||||||
|
) override;
|
||||||
|
};
|
||||||
|
}
|
@ -9,6 +9,95 @@
|
|||||||
|
|
||||||
using namespace Dawn;
|
using namespace Dawn;
|
||||||
|
|
||||||
|
void SimpleTexturedShaderProgram::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");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SimpleTexturedShader::compile() {
|
void SimpleTexturedShader::compile() {
|
||||||
this->program.compile();
|
this->program.compile();
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,21 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "display/shader/Shader.hpp"
|
#include "display/shader/Shader.hpp"
|
||||||
#include "SimpleTexturedShaderProgram.hpp"
|
|
||||||
#include "scene/components/display/material/SimpleTexturedMaterial.hpp"
|
#include "scene/components/display/material/SimpleTexturedMaterial.hpp"
|
||||||
|
|
||||||
namespace Dawn {
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
class SimpleTexturedShader : public Shader {
|
class SimpleTexturedShader : public Shader {
|
||||||
public:
|
public:
|
||||||
SimpleTexturedShaderProgram program;
|
SimpleTexturedShaderProgram program;
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
// 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 ;
|
|
||||||
};
|
|
||||||
}
|
|
@ -4,7 +4,7 @@
|
|||||||
// https://opensource.org/licenses/MIT
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "SimpleTexturedShaderProgram.hpp"
|
#include "SimpleTexturedShader.hpp"
|
||||||
|
|
||||||
#define UI_SHADER_PROGRAM_PRIORITY 100
|
#define UI_SHADER_PROGRAM_PRIORITY 100
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user