First pass of new shader manager

This commit is contained in:
2023-04-04 21:49:20 -07:00
parent a52f54b3e6
commit 095a60e5dc
26 changed files with 302 additions and 31 deletions

View File

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

View File

@ -0,0 +1,27 @@
// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "display/shader/SimpleBillboardedShader.hpp"
#include "SimpleBillboardedMaterial.hpp"
#include "game/DawnGame.hpp"
using namespace Dawn;
SimpleBillboardedMaterial::SimpleBillboardedMaterial(SceneItem *i) :
Material(i)
{
}
void SimpleBillboardedMaterial::onStart() {
this->shaderLock = this->getGame()->renderManager.getShaderManager()->lockShader<SimpleBillboardedShader>();
}
void SimpleBillboardedMaterial::onDispose() {
this->getGame()->renderManager.getShaderManager()->releaseShader<SimpleBillboardedShader>(this->shaderLock);
}
Shader * SimpleBillboardedMaterial::getShader() {
return this->getGame()->renderManager.getShaderManager()->getShader<SimpleBillboardedShader>(this->shaderLock);
}

View File

@ -0,0 +1,32 @@
// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "scene/components/display/Material.hpp"
namespace Dawn {
class SimpleBillboardedMaterial : public Material {
private:
shaderlock_t shaderLock = -1;
public:
// @optional
Texture *texture = nullptr;
// @optional
struct Color color = COLOR_WHITE;
/**
* SimpleBillboardMaterial scene item component interface.
*
* @param i Scene Item this interface belongs to.
*/
SimpleBillboardedMaterial(SceneItem *i);
void onStart() override;
void onDispose() override;
Shader * getShader() override;
};
}

View File

@ -13,6 +13,14 @@ SimpleTexturedMaterial::SimpleTexturedMaterial(SceneItem *i) :
{
}
void SimpleTexturedMaterial::onStart() {
this->shaderLock = this->getGame()->renderManager.getShaderManager()->lockShader<SimpleTexturedShader>();
}
void SimpleTexturedMaterial::onDispose() {
this->getGame()->renderManager.getShaderManager()->releaseShader<SimpleTexturedShader>(this->shaderLock);
}
Shader * SimpleTexturedMaterial::getShader() {
return &this->getGame()->renderManager.simpleShader;
return this->getGame()->renderManager.getShaderManager()->getShader<SimpleTexturedShader>(this->shaderLock);
}

View File

@ -8,6 +8,9 @@
namespace Dawn {
class SimpleTexturedMaterial : public Material {
private:
shaderlock_t shaderLock = -1;
public:
// @optional
Texture *texture = nullptr;
@ -20,6 +23,9 @@ namespace Dawn {
* @param i Scene Item this interface belongs to.
*/
SimpleTexturedMaterial(SceneItem *i);
void onStart() override;
void onDispose() override;
Shader * getShader() override;
};