more work on rendering in engine

This commit is contained in:
ZappoMan 2015-05-27 16:46:44 -07:00
parent a56e0d80b6
commit 37a291275d
3 changed files with 47 additions and 29 deletions

View file

@ -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++;
}
}
}

View file

@ -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);
}
}

View file

@ -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;
};