mirror of
https://github.com/overte-org/overte.git
synced 2025-04-12 17:22:09 +02:00
Get canvases self-rendering, not quite desired result yet
This commit is contained in:
parent
bc8bc289f8
commit
2865d257c8
2 changed files with 8 additions and 35 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 };
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue