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:
@ -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 {
|
||||
|
||||
};
|
||||
}
|
@ -26,7 +26,6 @@ namespace Dawn {
|
||||
|
||||
void onStart() override;
|
||||
void onDispose() override;
|
||||
|
||||
Shader * getShader() override;
|
||||
std::vector<struct ShaderPassItem> getRenderPasses() override;
|
||||
};
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user