From 740a6c80e97eae9e6a0abcd47f68ac032969eb46 Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Fri, 27 Jun 2014 12:36:44 +0100 Subject: [PATCH] Fetch initial buffer contents for dirty resources in GL * Huge hack, but it works for now... --- renderdoc/driver/gl/gl_manager.cpp | 15 +++++++++++++++ renderdoc/driver/gl/gl_manager.h | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index ebccd6069..cbbd25c21 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -32,3 +32,18 @@ bool GLResourceManager::SerialisableResource(ResourceId id, GLResourceRecord *re return false; return true; } + +bool GLResourceManager::Prepare_InitialState(GLResource res) +{ + if(res.Namespace == eResBuffer) + { + GLResourceRecord *record = GetResourceRecord(res); + + GLint length; + m_GL->glGetNamedBufferParameterivEXT(res.name, eGL_BUFFER_SIZE, &length); + + m_GL->glGetNamedBufferSubDataEXT(res.name, 0, length, record->GetDataPtr()); + } + + return true; +} diff --git a/renderdoc/driver/gl/gl_manager.h b/renderdoc/driver/gl/gl_manager.h index 4e1f2e6c0..25c86a66a 100644 --- a/renderdoc/driver/gl/gl_manager.h +++ b/renderdoc/driver/gl/gl_manager.h @@ -140,8 +140,8 @@ class GLResourceManager : public ResourceManager bool ResourceTypeRelease(GLResource res) { return true; } bool Need_InitialState(GLResource res) { return false; } - bool Need_InitialStateChunk(GLResource res) { return false; } - bool Prepare_InitialState(GLResource res) { return true; } + bool Need_InitialStateChunk(GLResource res) { return res.Namespace != eResBuffer; } + bool Prepare_InitialState(GLResource res); bool Serialise_InitialState(GLResource res) { return true; } void Create_InitialState(ResourceId id, GLResource live, bool hasData) { } void Apply_InitialState(GLResource live, GLResource initial, uint32_t count) { }