The fruits of my labor

This commit is contained in:
2023-01-20 00:00:36 -08:00
parent 97fd59f28d
commit 3ee07af4db
55 changed files with 563 additions and 459 deletions

View File

@ -14,13 +14,13 @@ RenderManager::RenderManager(DawnGame *game) :
backBuffer(*this),
renderPipeline(this)
{
this->uiShader = new UIShader();
}
void RenderManager::init() {
this->renderPipeline.init();
this->simpleShader.compile();
this->uiShader->compile();
this->uiShaderProgram.compile();
// Prepare the initial values
glEnable(GL_TEXTURE_2D);
@ -37,10 +37,6 @@ RenderPipeline * RenderManager::getRenderPipeline() {
return &this->renderPipeline;
}
UIShader * RenderManager::getUIShader() {
return this->uiShader;
}
void RenderManager::setRenderFlags(renderflag_t flags) {
this->renderFlags = flags;
@ -62,5 +58,4 @@ void RenderManager::update() {
}
RenderManager::~RenderManager() {
delete this->uiShader;
}

View File

@ -7,6 +7,7 @@
#include "display/_RenderManager.hpp"
#include "display/BackBufferRenderTarget.hpp"
#include "display/shader/SimpleTexturedShader.hpp"
#include "display/shader/UIShaderProgram.hpp"
#include "display/RenderPipeline.hpp"
namespace Dawn {
@ -17,7 +18,7 @@ namespace Dawn {
public:
BackBufferRenderTarget backBuffer;
SimpleTexturedShader simpleShader;
UIShader *uiShader;
UIShaderProgram uiShaderProgram;
/**
* Construct a new RenderManager for a game instance.
@ -26,7 +27,6 @@ namespace Dawn {
RenderTarget * getBackBuffer() override;
RenderPipeline * getRenderPipeline() override;
UIShader * getUIShader() override;
void setRenderFlags(renderflag_t renderFlags) override;
void init() override;
void update() override;

View File

@ -7,4 +7,5 @@
target_sources(${DAWN_TARGET_NAME}
PRIVATE
ShaderProgram.cpp
SimpleTexturedShader.cpp
)

View File

@ -11,16 +11,25 @@ void SimpleTexturedShader::compile() {
this->program.compile();
}
std::vector<struct ShaderPass> SimpleTexturedShader::getItemPasses(
MeshRenderer *mesh, Material *material
std::vector<struct ShaderPassItem> SimpleTexturedShader::getPassItems(
Mesh *mesh,
Material *material,
Camera *camera
) {
SimpleTexturedMaterial *simpleMaterial = dynamic_cast<SimpleTexturedMaterial*>(material);
assertNotNull(simpleMaterial);
struct ShaderPass onlyPass;
struct ShaderPassItem onlyPass;
onlyPass.mesh = mesh;
onlyPass.shaderProgram = &program;
onlyPass.colorValues[program.paramColor] = simpleMaterial->color;
onlyPass.matrixValues[program.paramModel] = mesh->transform->getWorldTransform();
onlyPass.matrixValues[program.paramModel] = material->transform->getWorldTransform();
onlyPass.matrixValues[program.paramView] = camera->transform->getWorldTransform();
onlyPass.matrixValues[program.paramProjection] = camera->projection;
onlyPass.renderFlags = (
RENDER_MANAGER_RENDER_FLAG_BLEND |
RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST
);
if(simpleMaterial->texture != nullptr) {
onlyPass.boolValues[program.paramHasTexture] = true;
@ -30,14 +39,7 @@ std::vector<struct ShaderPass> SimpleTexturedShader::getItemPasses(
onlyPass.boolValues[program.paramHasTexture] = false;
}
std::vector<struct ShaderPass> passes;
std::vector<struct ShaderPassItem> passes;
passes.push_back(onlyPass);
return passes;
}
void SimpleTexturedShader::setGlobalParameters(
glm::mat4 cameraProjection, glm::mat4 cameraView
) {
this->program.setMatrix(this->program.paramProjection, cameraProjection);
this->program.setMatrix(this->program.paramView, cameraView);
}

View File

@ -16,12 +16,10 @@ namespace Dawn {
public:
void compile() override;
std::vector<struct ShaderPass> getItemPasses(
MeshRenderer *mesh, Material *material
) override;
void setGlobalParameters(
glm::mat4 cameraProjection, glm::mat4 cameraView
std::vector<struct ShaderPassItem> getPassItems(
Mesh *mesh,
Material *material,
Camera *camera
) override;
};
}

View File

@ -1,12 +0,0 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "SimpleTexturedShader.hpp"
namespace Dawn {
class UIShader : public SimpleTexturedShader {
};
}

View File

@ -0,0 +1,43 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "SimpleTexturedShaderProgram.hpp"
#define UI_SHADER_PROGRAM_PRIORITY 100
namespace Dawn {
class UIShaderProgram : public SimpleTexturedShaderProgram {
public:
struct ShaderPassItem getUIPassItem(
glm::mat4 projection,
glm::mat4 view,
glm::mat4 transform,
Texture *texture,
struct Color color,
Mesh *mesh,
float_t z
) {
struct ShaderPassItem item;
item.shaderProgram = this;
item.colorValues[this->paramColor] = color;
if(texture == nullptr) {
item.boolValues[this->paramHasTexture] = false;
} else {
item.textureSlots[0] = texture;
item.textureValues[this->paramTexture] = 0;
item.boolValues[this->paramHasTexture] = true;
}
item.matrixValues[this->paramProjection] = projection;
item.matrixValues[this->paramView] = view;
item.matrixValues[this->paramModel] = transform;
item.priority = UI_SHADER_PROGRAM_PRIORITY;
item.w = z;
item.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND;
item.mesh = mesh;
return item;
}
};
}