Get canvases self-rendering, not quite desired result yet

This commit is contained in:
Ada 2025-04-03 23:08:33 +10:00
parent bc8bc289f8
commit 2865d257c8
2 changed files with 8 additions and 35 deletions

View file

@ -19,10 +19,6 @@ using namespace render::entities;
CanvasEntityRenderer::CanvasEntityRenderer(const EntityItemPointer& entity) : Parent(entity) {
_geometryId = DependencyManager::get<GeometryCache>()->allocateID();
_material->setCullFaceMode(graphics::MaterialKey::CullFaceMode::CULL_NONE);
_material->setUnlit(true);
addMaterial(graphics::MaterialLayer(_material, 0), "0");
updateMaterials(true);
}
CanvasEntityRenderer::~CanvasEntityRenderer() {
@ -50,51 +46,30 @@ void CanvasEntityRenderer::doRender(RenderArgs* args) {
PerformanceTimer perfTimer("RenderableCanvasEntityItem::render");
Q_ASSERT(args->_batch);
graphics::MultiMaterial materials;
{
std::lock_guard<std::mutex> lock(_materialsLock);
materials = _materials["0"];
}
if (!_texture) {
return;
}
if (!_texture) { return; }
Transform transform;
withReadLock([&] {
transform = _renderTransform;
});
gpu::Batch* batch = args->_batch;
gpu::Batch& batch = *args->_batch;
batch.setResourceTexture(0, _texture);
bool usePrimaryFrustum = args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE || args->_mirrorDepth > 0;
transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode,
usePrimaryFrustum ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition()));
batch->setModelTransform(transform, _prevRenderTransform);
batch.setModelTransform(transform, _prevRenderTransform);
if (args->_renderMode == Args::RenderMode::DEFAULT_RENDER_MODE || args->_renderMode == Args::RenderMode::MIRROR_RENDER_MODE) {
_prevRenderTransform = transform;
}
Pipeline pipelineType = getPipelineType(materials);
if (pipelineType == Pipeline::PROCEDURAL) {
auto procedural = std::static_pointer_cast<graphics::ProceduralMaterial>(materials.top().material);
procedural->prepare(*batch, transform.getTranslation(), transform.getScale(), transform.getRotation(), _created, ProceduralProgramKey(true));
} else if (pipelineType == Pipeline::SIMPLE) {
batch->setResourceTexture(0, _texture);
} else if (pipelineType == Pipeline::MATERIAL) {
if (RenderPipelines::bindMaterials(materials, *batch, args->_renderMode, args->_enableTexturing)) {
args->_details._materialSwitches++;
}
}
DependencyManager::get<GeometryCache>()->bindSimpleProgram(batch, true, true);
DependencyManager::get<GeometryCache>()->renderQuad(
*batch, glm::vec2(-0.5f), glm::vec2(0.5f), glm::vec2(0.0f, 1.0f), glm::vec2(1.0f, 0.0f),
batch, glm::vec2(-0.5f), glm::vec2(0.5f), glm::vec2(0.0f, 1.0f), glm::vec2(1.0f, 0.0f),
glm::vec4(1.0f), _geometryId
);
if (pipelineType == Pipeline::SIMPLE) {
// we have to reset this to white for other simple shapes
batch->setResourceTexture(graphics::slot::texture::Texture::MaterialAlbedo, DependencyManager::get<TextureCache>()->getWhiteTexture());
}
batch.setResourceTexture(0, nullptr);
}

View file

@ -35,9 +35,7 @@ protected:
virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override;
private:
std::shared_ptr<graphics::ProceduralMaterial> _material { std::make_shared<graphics::ProceduralMaterial>() };
gpu::TexturePointer _texture;
int _geometryId { 0 };
};