Added new method to get the right viewport size in stereo (side-by-side) and fix font rendering.

This commit is contained in:
Jonathas Costa
2018-04-20 11:22:23 -04:00
parent 1e0d41fb30
commit 5079beba78
6 changed files with 44 additions and 18 deletions

View File

@@ -56,6 +56,7 @@ public:
glm::ivec2 currentSubwindowSize() const override;
glm::ivec2 currentWindowResolution() const override;
glm::ivec2 currentDrawBufferResolution() const override;
glm::ivec2 getCurrentViewportSize() const override;
glm::vec2 dpiScaling() const override;
int currentNumberOfAaSamples() const override;

View File

@@ -160,6 +160,13 @@ public:
*/
virtual glm::ivec2 currentDrawBufferResolution() const;
/**
* Returns the resolution of the currently viewport resolution in pixel
* coordinates.
* \return The resolution of the currently viewport in pixel coordinates
*/
virtual glm::ivec2 getCurrentViewportSize() const;
/**
* Returns the DPI scaling factor for the current window. This is normally 1 on all
* regular monitors and 2 on Retina screens.

View File

@@ -899,23 +899,6 @@ void OpenSpaceEngine::loadFonts() {
LERROR(fmt::format("Error registering font '{}' with key '{}'", font, key));
}
}
try {
bool initSuccess = ghoul::fontrendering::FontRenderer::initialize();
if (!initSuccess) {
LERROR("Error initializing default font renderer");
}
using FR = ghoul::fontrendering::FontRenderer;
FR::defaultRenderer().setFramebufferSize(_renderEngine->fontResolution());
FR::defaultProjectionRenderer().setFramebufferSize(
_renderEngine->renderingResolution()
);
}
catch (const ghoul::RuntimeError& err) {
LERRORC(err.component, err.message);
}
}
void OpenSpaceEngine::configureLogging(bool consoleLog) {
@@ -1227,6 +1210,16 @@ void OpenSpaceEngine::initializeGL() {
}
}
try {
bool initSuccess = ghoul::fontrendering::FontRenderer::initialize();
if (!initSuccess) {
LERROR("Error initializing default font renderer");
}
}
catch (const ghoul::RuntimeError& err) {
LERRORC(err.component, err.message);
}
LDEBUG("Initializing Rendering Engine");
_renderEngine->initializeGL();
@@ -1313,6 +1306,15 @@ void OpenSpaceEngine::postSynchronizationPreDraw() {
bool master = _windowWrapper->isMaster();
_syncEngine->postSynchronization(SyncEngine::IsMaster(master));
// This probably doesn't have to be done here every frame, but doing it earlier gives
// weird results when using side_by_side stereo --- abock
using FR = ghoul::fontrendering::FontRenderer;
FR::defaultRenderer().setFramebufferSize(_renderEngine->fontResolution());
FR::defaultProjectionRenderer().setFramebufferSize(
_renderEngine->renderingResolution()
);
if (_shutdown.inShutdown) {
if (_shutdown.timer <= 0.f) {
_windowWrapper->terminate();

View File

@@ -170,6 +170,17 @@ glm::ivec2 SGCTWindowWrapper::currentDrawBufferResolution() const {
throw WindowWrapperException("No viewport available");
}
glm::ivec2 SGCTWindowWrapper::getCurrentViewportSize() const {
sgct_core::Viewport* viewport =
sgct::Engine::instance()->getCurrentWindowPtr()->getViewport(0);
if (viewport != nullptr) {
int xx = 0, yy = 0;
sgct::Engine::instance()->getCurrentViewportSize(xx, yy);
return glm::ivec2(xx, yy);
}
throw WindowWrapperException("No viewport available");
}
glm::vec2 SGCTWindowWrapper::dpiScaling() const {
return glm::vec2(
sgct::Engine::instance()->getCurrentWindowPtr()->getXScale(),

View File

@@ -121,6 +121,10 @@ glm::ivec2 WindowWrapper::currentDrawBufferResolution() const {
return currentWindowSize();
}
glm::ivec2 WindowWrapper::getCurrentViewportSize() const {
return currentWindowSize();
}
glm::vec2 WindowWrapper::dpiScaling() const {
return glm::vec2(1.f);
}

View File

@@ -537,7 +537,8 @@ glm::ivec2 RenderEngine::fontResolution() const {
value
);
if (hasValue && value == "framebuffer") {
return OsEng.windowWrapper().currentWindowResolution();
return OsEng.windowWrapper().getCurrentViewportSize();
//return OsEng.windowWrapper().currentWindowResolution();
}
else {
// The default is to use the window size