mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 14:47:51 +02:00
More render-perf tweaks
This commit is contained in:
parent
617633b85c
commit
179e3565ef
1 changed files with 59 additions and 20 deletions
|
@ -244,6 +244,7 @@ public:
|
||||||
std::mutex _frameLock;
|
std::mutex _frameLock;
|
||||||
std::queue<gpu::FramePointer> _pendingFrames;
|
std::queue<gpu::FramePointer> _pendingFrames;
|
||||||
gpu::FramePointer _activeFrame;
|
gpu::FramePointer _activeFrame;
|
||||||
|
QSize _size;
|
||||||
static const size_t FRAME_TIME_BUFFER_SIZE{ 8192 };
|
static const size_t FRAME_TIME_BUFFER_SIZE{ 8192 };
|
||||||
|
|
||||||
void submitFrame(const gpu::FramePointer& frame) {
|
void submitFrame(const gpu::FramePointer& frame) {
|
||||||
|
@ -325,8 +326,10 @@ public:
|
||||||
_gpuContext->executeFrame(frame);
|
_gpuContext->executeFrame(frame);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
gpu::Batch presentBatch;
|
gpu::Batch presentBatch;
|
||||||
|
presentBatch.setViewportTransform({ 0, 0, _size.width(), _size.height() });
|
||||||
presentBatch.enableStereo(false);
|
presentBatch.enableStereo(false);
|
||||||
presentBatch.resetViewTransform();
|
presentBatch.resetViewTransform();
|
||||||
presentBatch.setFramebuffer(gpu::FramebufferPointer());
|
presentBatch.setFramebuffer(gpu::FramebufferPointer());
|
||||||
|
@ -523,7 +526,8 @@ public:
|
||||||
_octree->init();
|
_octree->init();
|
||||||
// Prevent web entities from rendering
|
// Prevent web entities from rendering
|
||||||
REGISTER_ENTITY_TYPE_WITH_FACTORY(Web, WebEntityItem::factory);
|
REGISTER_ENTITY_TYPE_WITH_FACTORY(Web, WebEntityItem::factory);
|
||||||
|
REGISTER_ENTITY_TYPE_WITH_FACTORY(Light, LightEntityItem::factory);
|
||||||
|
|
||||||
DependencyManager::set<ParentFinder>(_octree->getTree());
|
DependencyManager::set<ParentFinder>(_octree->getTree());
|
||||||
getEntities()->setViewFrustum(_viewFrustum);
|
getEntities()->setViewFrustum(_viewFrustum);
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
|
@ -533,8 +537,9 @@ public:
|
||||||
|
|
||||||
ResourceManager::init();
|
ResourceManager::init();
|
||||||
|
|
||||||
setFlags(Qt::MSWindowsOwnDC);
|
setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint);
|
||||||
_size = QSize(800, 600);
|
_size = QSize(800, 600);
|
||||||
|
_renderThread._size = _size;
|
||||||
setGeometry(QRect(QPoint(), _size));
|
setGeometry(QRect(QPoint(), _size));
|
||||||
create();
|
create();
|
||||||
show();
|
show();
|
||||||
|
@ -570,7 +575,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
wglSwapIntervalEXT(0);
|
//wglSwapIntervalEXT(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// FIXME use a wait condition
|
// FIXME use a wait condition
|
||||||
|
@ -634,7 +639,7 @@ protected:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case Qt::Key_F4:
|
case Qt::Key_F4:
|
||||||
toggleStereo();
|
cycleMode();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case Qt::Key_F5:
|
case Qt::Key_F5:
|
||||||
|
@ -701,27 +706,43 @@ private:
|
||||||
0, RenderArgs::DEFAULT_RENDER_MODE,
|
0, RenderArgs::DEFAULT_RENDER_MODE,
|
||||||
RenderArgs::MONO, RenderArgs::RENDER_DEBUG_NONE);
|
RenderArgs::MONO, RenderArgs::RENDER_DEBUG_NONE);
|
||||||
|
|
||||||
auto framebufferCache = DependencyManager::get<FramebufferCache>();
|
|
||||||
QSize windowSize = _size;
|
QSize windowSize = _size;
|
||||||
framebufferCache->setFrameBufferSize(windowSize);
|
if (_renderMode == NORMAL) {
|
||||||
|
renderArgs._context->enableStereo(false);
|
||||||
renderArgs._blitFramebuffer = framebufferCache->getFramebuffer();
|
} else {
|
||||||
// Viewport is assigned to the size of the framebuffer
|
renderArgs._context->enableStereo(true);
|
||||||
renderArgs._viewport = ivec4(0, 0, windowSize.width(), windowSize.height());
|
|
||||||
|
|
||||||
renderArgs.setViewFrustum(_viewFrustum);
|
|
||||||
|
|
||||||
renderArgs._context->enableStereo(_stereoEnabled);
|
|
||||||
if (_stereoEnabled) {
|
|
||||||
mat4 eyeOffsets[2];
|
mat4 eyeOffsets[2];
|
||||||
mat4 eyeProjections[2];
|
mat4 eyeProjections[2];
|
||||||
for (size_t i = 0; i < 2; ++i) {
|
if (_renderMode == STEREO) {
|
||||||
eyeProjections[i] = _viewFrustum.getProjection();
|
for (size_t i = 0; i < 2; ++i) {
|
||||||
|
eyeProjections[i] = _viewFrustum.getProjection();
|
||||||
|
}
|
||||||
|
} else if (_renderMode == HMD) {
|
||||||
|
eyeOffsets[0][3] = vec4 { -0.0327499993, 0.0, 0.0149999997, 1.0 };
|
||||||
|
eyeOffsets[1][3] = vec4 { 0.0327499993, 0.0, 0.0149999997, 1.0 };
|
||||||
|
eyeProjections[0][0] = vec4 { 0.759056330, 0.000000000, 0.000000000, 0.000000000 };
|
||||||
|
eyeProjections[0][1] = vec4 { 0.000000000, 0.682773232, 0.000000000, 0.000000000 };
|
||||||
|
eyeProjections[0][2] = vec4 { -0.0580431037, -0.00619550655, -1.00000489, -1.00000000 };
|
||||||
|
eyeProjections[0][3] = vec4 { 0.000000000, 0.000000000, -0.0800003856, 0.000000000 };
|
||||||
|
eyeProjections[1][0] = vec4 { 0.752847493, 0.000000000, 0.000000000, 0.000000000 };
|
||||||
|
eyeProjections[1][1] = vec4 { 0.000000000, 0.678060353, 0.000000000, 0.000000000 };
|
||||||
|
eyeProjections[1][2] = vec4 { 0.0578232110, -0.00669418881, -1.00000489, -1.000000000 };
|
||||||
|
eyeProjections[1][3] = vec4 { 0.000000000, 0.000000000, -0.0800003856, 0.000000000 };
|
||||||
|
windowSize = { 2048, 2048 };
|
||||||
}
|
}
|
||||||
renderArgs._context->setStereoProjections(eyeProjections);
|
renderArgs._context->setStereoProjections(eyeProjections);
|
||||||
renderArgs._context->setStereoViews(eyeOffsets);
|
renderArgs._context->setStereoViews(eyeOffsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto framebufferCache = DependencyManager::get<FramebufferCache>();
|
||||||
|
framebufferCache->setFrameBufferSize(windowSize);
|
||||||
|
|
||||||
|
renderArgs._blitFramebuffer = framebufferCache->getFramebuffer();
|
||||||
|
// Viewport is assigned to the size of the framebuffer
|
||||||
|
renderArgs._viewport = ivec4(0, 0, windowSize.width(), windowSize.height());
|
||||||
|
renderArgs.setViewFrustum(_viewFrustum);
|
||||||
|
|
||||||
// Final framebuffer that will be handled to the display-plugin
|
// Final framebuffer that will be handled to the display-plugin
|
||||||
render(&renderArgs);
|
render(&renderArgs);
|
||||||
|
|
||||||
|
@ -882,6 +903,7 @@ private:
|
||||||
if (!_ready) {
|
if (!_ready) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
_renderThread._size = size;
|
||||||
//_textOverlay->resize(toGlm(_size));
|
//_textOverlay->resize(toGlm(_size));
|
||||||
//glViewport(0, 0, size.width(), size.height());
|
//glViewport(0, 0, size.width(), size.height());
|
||||||
}
|
}
|
||||||
|
@ -997,8 +1019,18 @@ private:
|
||||||
_cullingEnabled = !_cullingEnabled;
|
_cullingEnabled = !_cullingEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleStereo() {
|
void cycleMode() {
|
||||||
_stereoEnabled = !_stereoEnabled;
|
static auto defaultProjection = Camera().matrices.perspective;
|
||||||
|
_renderMode = (RenderMode)((_renderMode + 1) % RENDER_MODE_COUNT);
|
||||||
|
if (_renderMode == HMD) {
|
||||||
|
_camera.matrices.perspective[0] = vec4 { 0.759056330, 0.000000000, 0.000000000, 0.000000000 };
|
||||||
|
_camera.matrices.perspective[1] = vec4 { 0.000000000, 0.682773232, 0.000000000, 0.000000000 };
|
||||||
|
_camera.matrices.perspective[2] = vec4 { -0.0580431037, -0.00619550655, -1.00000489, -1.00000000 };
|
||||||
|
_camera.matrices.perspective[3] = vec4 { 0.000000000, 0.000000000, -0.0800003856, 0.000000000 };
|
||||||
|
} else {
|
||||||
|
_camera.matrices.perspective = defaultProjection;
|
||||||
|
_camera.setAspectRatio((float)_size.width() / (float)_size.height());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QSharedPointer<EntityTreeRenderer> getEntities() {
|
QSharedPointer<EntityTreeRenderer> getEntities() {
|
||||||
|
@ -1043,7 +1075,14 @@ private:
|
||||||
bool _ready { false };
|
bool _ready { false };
|
||||||
//TextOverlay* _textOverlay;
|
//TextOverlay* _textOverlay;
|
||||||
static bool _cullingEnabled;
|
static bool _cullingEnabled;
|
||||||
bool _stereoEnabled { false };
|
|
||||||
|
enum RenderMode {
|
||||||
|
NORMAL = 0,
|
||||||
|
STEREO,
|
||||||
|
HMD,
|
||||||
|
RENDER_MODE_COUNT
|
||||||
|
};
|
||||||
|
RenderMode _renderMode { NORMAL };
|
||||||
QSharedPointer<EntityTreeRenderer> _octree;
|
QSharedPointer<EntityTreeRenderer> _octree;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue