mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-25 06:19:02 -06:00
Enable toggling use of doublebuffering for camera and time
This commit is contained in:
@@ -116,7 +116,7 @@ public:
|
||||
performance::PerformanceManager* performanceManager();
|
||||
|
||||
void serialize(SyncBuffer* syncBuffer);
|
||||
void deserialize(SyncBuffer* syncBuffer);
|
||||
void deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering);
|
||||
|
||||
float globalBlackOutFactor();
|
||||
void setGlobalBlackOutFactor(float factor);
|
||||
|
||||
@@ -121,7 +121,23 @@ namespace openspace {
|
||||
|
||||
// Synchronization
|
||||
void serialize(SyncBuffer* syncBuffer);
|
||||
void deserialize(SyncBuffer* syncBuffer);
|
||||
|
||||
/**
|
||||
* Updates camera variables from data in syncbuffer. If \param useDoubleBuffering is
|
||||
* false, values will be written directly into the camera state, overwriting any
|
||||
* previous values.
|
||||
* If \param useDoubleBuffering is true, values will be written and stored in local
|
||||
* copies, keeping the state unchanged until <code>updateDoubleBuffer</code> has
|
||||
* been called.
|
||||
*/
|
||||
void deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering);
|
||||
|
||||
/**
|
||||
* This method should be called from the SGCT postSynchronization stage if and only
|
||||
* if method <code>deserialize</code> has previously been called with the argument
|
||||
* useDoubleBuffering set to true.
|
||||
*/
|
||||
void updateDoubleBuffer();
|
||||
|
||||
void serialize(std::ostream& os) const;
|
||||
void deserialize(std::istream& is);
|
||||
@@ -176,7 +192,6 @@ namespace openspace {
|
||||
[[deprecated("Replaced by Camera::SgctInternal::viewProjectionMatrix()")]]
|
||||
const glm::mat4& viewProjectionMatrix() const;
|
||||
|
||||
void updateDoubleBuffer();
|
||||
|
||||
private:
|
||||
struct SyncData {
|
||||
|
||||
@@ -181,7 +181,16 @@ public:
|
||||
|
||||
void serialize(SyncBuffer* syncBuffer);
|
||||
|
||||
void deserialize(SyncBuffer* syncBuffer);
|
||||
|
||||
/**
|
||||
* Updates time variables from data in syncbuffer. If \param useDoubleBuffering is
|
||||
* false, values will be written directly into the time state, overwriting any
|
||||
* previous values.
|
||||
* If \param useDoubleBuffering is true, values will be written and stored in local
|
||||
* copies, keeping the time state unchanged until <code>updateDoubleBuffer</code> has
|
||||
* been called.
|
||||
*/
|
||||
void deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering);
|
||||
|
||||
bool timeJumped() const;
|
||||
|
||||
@@ -189,6 +198,11 @@ public:
|
||||
|
||||
bool paused() const;
|
||||
|
||||
/**
|
||||
* This method should be called from the SGCT postSynchronization stage if and only
|
||||
* if method <code>deserialize</code> has previously been called with the argument
|
||||
* useDoubleBuffering set to true.
|
||||
*/
|
||||
void updateDoubleBuffer();
|
||||
|
||||
/**
|
||||
|
||||
@@ -959,9 +959,9 @@ void OpenSpaceEngine::decode() {
|
||||
if (_syncBuffer) {
|
||||
_syncBuffer->read();
|
||||
|
||||
Time::ref().deserialize(_syncBuffer.get());
|
||||
Time::ref().deserialize(_syncBuffer.get(), _settingsEngine->useDoubleBuffering());
|
||||
_scriptEngine->deserialize(_syncBuffer.get());
|
||||
_renderEngine->deserialize(_syncBuffer.get());
|
||||
_renderEngine->deserialize(_syncBuffer.get(), _settingsEngine->useDoubleBuffering());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -529,23 +529,20 @@ void RenderEngine::serialize(SyncBuffer* syncBuffer) {
|
||||
if (_mainCamera){
|
||||
_mainCamera->serialize(syncBuffer);
|
||||
}
|
||||
|
||||
|
||||
syncBuffer->encode(_onScreenInformation._node);
|
||||
syncBuffer->encode(_onScreenInformation._position.x);
|
||||
syncBuffer->encode(_onScreenInformation._position.y);
|
||||
syncBuffer->encode(_onScreenInformation._size);
|
||||
}
|
||||
|
||||
void RenderEngine::deserialize(SyncBuffer* syncBuffer) {
|
||||
void RenderEngine::deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering) {
|
||||
if (_mainCamera){
|
||||
_mainCamera->deserialize(syncBuffer);
|
||||
_mainCamera->deserialize(syncBuffer, useDoubleBuffering);
|
||||
}
|
||||
syncBuffer->decode(_onScreenInformation._node);
|
||||
syncBuffer->decode(_onScreenInformation._position.x);
|
||||
syncBuffer->decode(_onScreenInformation._position.y);
|
||||
syncBuffer->decode(_onScreenInformation._size);
|
||||
|
||||
}
|
||||
|
||||
Camera* RenderEngine::camera() const {
|
||||
|
||||
@@ -195,9 +195,14 @@ namespace openspace {
|
||||
local.serialize(syncBuffer);
|
||||
}
|
||||
|
||||
void Camera::deserialize(SyncBuffer* syncBuffer) {
|
||||
void Camera::deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering) {
|
||||
std::lock_guard<std::mutex> _lock(_mutex);
|
||||
synced.deserialize(syncBuffer);
|
||||
if (useDoubleBuffering) {
|
||||
synced.deserialize(syncBuffer);
|
||||
}
|
||||
else {
|
||||
local.deserialize(syncBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
void Camera::invalidateCache() {
|
||||
|
||||
@@ -156,9 +156,14 @@ void Time::serialize(SyncBuffer* syncBuffer) {
|
||||
_syncMutex.unlock();
|
||||
}
|
||||
|
||||
void Time::deserialize(SyncBuffer* syncBuffer) {
|
||||
void Time::deserialize(SyncBuffer* syncBuffer, bool useDoubleBuffering) {
|
||||
_syncMutex.lock();
|
||||
synced.deserialize(syncBuffer);
|
||||
if (useDoubleBuffering) {
|
||||
synced.deserialize(syncBuffer);
|
||||
}
|
||||
else {
|
||||
local.deserialize(syncBuffer);
|
||||
}
|
||||
_syncMutex.unlock();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user