X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=src%2Fvoglcommon%2Fvogl_buffer_state.cpp;h=619f1cb4525052dfa90598f56f0cd255360acf78;hb=d73de670dade59a783990e5ac264bb3cfd9d45d9;hp=c0539d0a66430ab36ddfc965c1f8628d71539302;hpb=763d64fee9bead9740b3cdcf4442d7c386aa3751;p=vogl diff --git a/src/voglcommon/vogl_buffer_state.cpp b/src/voglcommon/vogl_buffer_state.cpp index c0539d0..619f1cb 100644 --- a/src/voglcommon/vogl_buffer_state.cpp +++ b/src/voglcommon/vogl_buffer_state.cpp @@ -26,6 +26,7 @@ // File: vogl_buffer_state.cpp #include "vogl_common.h" #include "vogl_buffer_state.h" +#include "vogl_gl_state_snapshot.h" vogl_buffer_state::vogl_buffer_state() : m_snapshot_handle(0), @@ -96,18 +97,18 @@ bool vogl_buffer_state::snapshot(const vogl_context_info &context_info, vogl_han return false; } - if (m_params.get_value(GL_BUFFER_MAPPED) != 0) + int buf_size = m_params.get_value(GL_BUFFER_SIZE); + if (buf_size < 0) { - vogl_error_printf("%s: Can't snapshot buffer %" PRIu64 " target %s while it's currently mapped\n", VOGL_METHOD_NAME, - (uint64_t)handle, g_gl_enums.find_gl_name(target)); + vogl_error_printf("%s: Invalid buffer size, buffer %" PRIu64 " target %s size %i\n", VOGL_METHOD_NAME, (uint64_t)handle, g_gl_enums.find_gl_name(target), buf_size); clear(); return false; } - int buf_size = m_params.get_value(GL_BUFFER_SIZE); - if (buf_size < 0) + if (m_params.get_value(GL_BUFFER_MAPPED) != 0) { - vogl_error_printf("%s: Invalid buffer size, buffer %" PRIu64 " target %s size %i\n", VOGL_METHOD_NAME, (uint64_t)handle, g_gl_enums.find_gl_name(target), buf_size); + vogl_error_printf("%s: Can't snapshot buffer %" PRIu64 " target %s while it's currently mapped\n", VOGL_METHOD_NAME, + (uint64_t)handle, g_gl_enums.find_gl_name(target)); clear(); return false; } @@ -136,6 +137,20 @@ bool vogl_buffer_state::snapshot(const vogl_context_info &context_info, vogl_han return true; } +void vogl_buffer_state::set_mapped_buffer_snapshot_state(const vogl_mapped_buffer_desc &map_desc) +{ + VOGL_FUNC_TRACER + + VOGL_ASSERT(map_desc.m_buffer == m_snapshot_handle); + + m_is_mapped = true; + + m_map_ofs = map_desc.m_offset; + m_map_size = map_desc.m_length; + m_map_access = map_desc.m_access; + m_map_range = map_desc.m_range; +} + bool vogl_buffer_state::restore(const vogl_context_info &context_info, vogl_handle_remapper &remapper, GLuint64 &handle) const { VOGL_FUNC_TRACER @@ -231,6 +246,12 @@ void vogl_buffer_state::clear() m_buffer_data.clear(); m_params.clear(); m_is_valid = false; + + m_map_ofs = 0; + m_map_size = 0; + m_map_access = 0; + m_map_range = false; + m_is_mapped = false; } bool vogl_buffer_state::serialize(json_node &node, vogl_blob_manager &blob_manager) const @@ -261,6 +282,12 @@ bool vogl_buffer_state::serialize(json_node &node, vogl_blob_manager &blob_manag node.add_key_value("target", g_gl_enums.find_gl_name(m_target)); node.add_key_value("buffer_data_blob_id", blob_id); + node.add_key_value("map_ofs", m_map_ofs); + node.add_key_value("map_size", m_map_size); + node.add_key_value("map_access", m_map_access); + node.add_key_value("map_range", m_map_range); + node.add_key_value("is_mapped", m_is_mapped); + if (!m_params.serialize(node.add_object("params"), blob_manager)) return false; @@ -315,6 +342,12 @@ bool vogl_buffer_state::deserialize(const json_node &node, const vogl_blob_manag } } + m_map_ofs = node.value_as_uint64("map_ofs"); + m_map_size = node.value_as_uint64("map_size"); + m_map_access = node.value_as_uint32("map_access"); + m_map_range = node.value_as_bool("map_range"); + m_is_mapped = node.value_as_bool("is_mapped"); + m_is_valid = true; return true; @@ -347,3 +380,28 @@ bool vogl_buffer_state::compare_restorable_state(const vogl_gl_object_state &rhs return true; } + + + + + + + + + + + + + + + + + + + + + + + + +