Added IRenderable, removed shader programs and allow more nuanced control of render passes, UI items are now rendered same as other scene item components.

This commit is contained in:
2023-05-29 15:52:08 -07:00
parent 117262267c
commit 96dd33c6b8
30 changed files with 419 additions and 600 deletions

View File

@ -22,6 +22,8 @@ void SimpleBillboardedMaterial::onDispose() {
this->getGame()->renderManager.getShaderManager()->releaseShader<SimpleBillboardedShader>(this->shaderLock);
}
Shader * SimpleBillboardedMaterial::getShader() {
return this->getGame()->renderManager.getShaderManager()->getShader<SimpleBillboardedShader>(this->shaderLock);
std::vector<struct ShaderPassItem> SimpleBillboardedMaterial::getRenderPasses() {
return {
};
}

View File

@ -26,7 +26,6 @@ namespace Dawn {
void onStart() override;
void onDispose() override;
Shader * getShader() override;
std::vector<struct ShaderPassItem> getRenderPasses() override;
};
}

View File

@ -21,6 +21,37 @@ void SimpleTexturedMaterial::onDispose() {
this->getGame()->renderManager.getShaderManager()->releaseShader<SimpleTexturedShader>(this->shaderLock);
}
Shader * SimpleTexturedMaterial::getShader() {
return this->getGame()->renderManager.getShaderManager()->getShader<SimpleTexturedShader>(this->shaderLock);
std::vector<struct ShaderPassItem> SimpleTexturedMaterial::getRenderPasses() {
auto mesh = this->item->getComponent<MeshRenderer>();
auto shader = this->getGame()->renderManager.getShaderManager()->getShader<SimpleTexturedShader>(this->shaderLock);
auto camera = this->getGame()->renderManager.getRenderPipeline()->camera;
assertNotNull(mesh);
assertNotNull(mesh->mesh);
assertNotNull(shader);
assertNotNull(camera);
struct ShaderPassItem onlyPass;
onlyPass.mesh = mesh->mesh;
onlyPass.shader = shader;
onlyPass.colorValues[shader->paramColor] = this->color;
onlyPass.matrixValues[shader->paramModel] = this->transform->getWorldTransform();
onlyPass.matrixValues[shader->paramView] = camera->transform->getWorldTransform();
onlyPass.matrixValues[shader->paramProjection] = camera->getProjection();
onlyPass.renderFlags = (
RENDER_MANAGER_RENDER_FLAG_BLEND |
RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST
);
if(this->texture != nullptr) {
onlyPass.boolValues[shader->paramHasTexture] = true;
onlyPass.textureSlots[0] = this->texture;
onlyPass.textureValues[shader->paramTexture] = 0;
} else {
onlyPass.boolValues[shader->paramHasTexture] = false;
}
std::vector<struct ShaderPassItem> passes;
passes.push_back(onlyPass);
return passes;
}

View File

@ -5,6 +5,7 @@
#pragma once
#include "scene/components/display/Material.hpp"
#include "scene/components/display/mesh/MeshRenderer.hpp"
namespace Dawn {
class SimpleTexturedMaterial : public Material {
@ -26,7 +27,6 @@ namespace Dawn {
void onStart() override;
void onDispose() override;
Shader * getShader() override;
std::vector<struct ShaderPassItem> getRenderPasses() override;
};
}