The fruits of my labor
This commit is contained in:
@ -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;
|
||||
}
|
@ -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;
|
||||
|
@ -7,4 +7,5 @@
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
ShaderProgram.cpp
|
||||
SimpleTexturedShader.cpp
|
||||
)
|
@ -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);
|
||||
}
|
@ -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;
|
||||
};
|
||||
}
|
@ -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 {
|
||||
};
|
||||
}
|
43
src/dawnopengl/display/shader/UIShaderProgram.hpp
Normal file
43
src/dawnopengl/display/shader/UIShaderProgram.hpp
Normal 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;
|
||||
}
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user