mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-10 17:23:15 +02:00
more work on rendering in engine
This commit is contained in:
parent
a56e0d80b6
commit
37a291275d
3 changed files with 47 additions and 29 deletions
|
@ -480,6 +480,7 @@ void EntityTreeRenderer::applyZonePropertiesToScene(std::shared_ptr<ZoneEntityIt
|
|||
}
|
||||
|
||||
void EntityTreeRenderer::render(RenderArgs* renderArgs) {
|
||||
|
||||
if (_tree && !_shuttingDown) {
|
||||
Model::startScene(renderArgs->_renderSide);
|
||||
|
||||
|
@ -515,7 +516,9 @@ void EntityTreeRenderer::render(RenderArgs* renderArgs) {
|
|||
glPushMatrix();
|
||||
renderArgs->_context->enqueueBatch(batch);
|
||||
glPopMatrix();
|
||||
|
||||
|
||||
renderArgs->_batch = nullptr;
|
||||
|
||||
// stats...
|
||||
_meshesConsidered = renderArgs->_meshesConsidered;
|
||||
_meshesRendered = renderArgs->_meshesRendered;
|
||||
|
@ -699,35 +702,38 @@ void EntityTreeRenderer::renderElement(OctreeElement* element, RenderArgs* args)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// hack for models. :(
|
||||
if (entityItem->getType() == EntityTypes::Model) {
|
||||
// render entityItem
|
||||
AABox entityBox = entityItem->getAABox();
|
||||
|
||||
// render entityItem
|
||||
AABox entityBox = entityItem->getAABox();
|
||||
// TODO: some entity types (like lights) might want to be rendered even
|
||||
// when they are outside of the view frustum...
|
||||
float distance = args->_viewFrustum->distanceToCamera(entityBox.calcCenter());
|
||||
|
||||
// TODO: some entity types (like lights) might want to be rendered even
|
||||
// when they are outside of the view frustum...
|
||||
float distance = args->_viewFrustum->distanceToCamera(entityBox.calcCenter());
|
||||
|
||||
bool outOfView = args->_viewFrustum->boxInFrustum(entityBox) == ViewFrustum::OUTSIDE;
|
||||
if (!outOfView) {
|
||||
bool bigEnoughToRender = _viewState->shouldRenderMesh(entityBox.getLargestDimension(), distance);
|
||||
bool outOfView = args->_viewFrustum->boxInFrustum(entityBox) == ViewFrustum::OUTSIDE;
|
||||
if (!outOfView) {
|
||||
bool bigEnoughToRender = _viewState->shouldRenderMesh(entityBox.getLargestDimension(), distance);
|
||||
|
||||
if (bigEnoughToRender) {
|
||||
renderProxies(entityItem, args);
|
||||
if (bigEnoughToRender) {
|
||||
renderProxies(entityItem, args);
|
||||
|
||||
Glower* glower = NULL;
|
||||
if (entityItem->getGlowLevel() > 0.0f) {
|
||||
glower = new Glower(args, entityItem->getGlowLevel());
|
||||
}
|
||||
entityItem->render(args);
|
||||
args->_itemsRendered++;
|
||||
if (glower) {
|
||||
delete glower;
|
||||
Glower* glower = NULL;
|
||||
if (entityItem->getGlowLevel() > 0.0f) {
|
||||
glower = new Glower(args, entityItem->getGlowLevel());
|
||||
}
|
||||
entityItem->render(args);
|
||||
args->_itemsRendered++;
|
||||
if (glower) {
|
||||
delete glower;
|
||||
}
|
||||
} else {
|
||||
args->_itemsTooSmall++;
|
||||
}
|
||||
} else {
|
||||
args->_itemsTooSmall++;
|
||||
args->_itemsOutOfView++;
|
||||
}
|
||||
} else {
|
||||
args->_itemsOutOfView++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,15 +24,10 @@ namespace render {
|
|||
return render::Item::Bound();
|
||||
}
|
||||
template <> void payloadRender(const RenderableEntityItem::Pointer& payload, RenderArgs* args) {
|
||||
qDebug() << "payloadRender()... for payload:" << payload.get();
|
||||
if (args) {
|
||||
qDebug() << "rendering payload!! for payload:" << payload.get();
|
||||
qDebug() << "rendering payload!! for entity:" << payload->entity.get();
|
||||
args->_elementsTouched++;
|
||||
if (payload && payload->entity) {
|
||||
qDebug() << "rendering payload!! for entity:" << payload->entity->getEntityItemID();
|
||||
if (payload->entity->getType() == EntityTypes::Box) {
|
||||
qDebug() << "rendering BOX type for entity:" << payload->entity->getEntityItemID();
|
||||
if (payload->entity->getType() != EntityTypes::Model) {
|
||||
payload->entity->render(args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
|
||||
#include "DrawTask.h"
|
||||
|
||||
#include <PerfStat.h>
|
||||
|
||||
#include "gpu/Batch.h"
|
||||
#include "gpu/Context.h"
|
||||
|
||||
|
||||
using namespace render;
|
||||
|
||||
|
||||
|
@ -28,6 +34,13 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon
|
|||
auto& itemBucketMap = scene->getMasterBucket();
|
||||
|
||||
RenderArgs* args = renderContext->args;
|
||||
|
||||
PerformanceTimer perfTimer("DrawSceneTask::run");
|
||||
|
||||
gpu::Batch theBatch;
|
||||
|
||||
args->_batch = &theBatch;
|
||||
|
||||
// render opaques
|
||||
auto filter = ItemFilter::Builder::opaqueShape();
|
||||
auto& opaqueShapeItems = itemBucketMap.at(filter);
|
||||
|
@ -37,7 +50,11 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon
|
|||
for (auto id : opaqueShapeItems) {
|
||||
auto item = scene->getItem(id);
|
||||
qDebug() << " id:" << id;
|
||||
qDebug() << " item:" << item;
|
||||
item.render(args);
|
||||
}
|
||||
|
||||
args->_context->enqueueBatch((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue