X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=src%2Fvoglcommon%2Fvogl_general_context_state.cpp;h=c47a298515247882807bce32bef2bbd76c24e51f;hb=cc91f6de7f7f2f7977cef46e36d07de13629ea84;hp=94a71891d919d5790602bc04e8437133d7163024;hpb=efc058a7e26cd78795675ef73b4f5c118cb3087e;p=vogl diff --git a/src/voglcommon/vogl_general_context_state.cpp b/src/voglcommon/vogl_general_context_state.cpp index 94a7189..c47a298 100644 --- a/src/voglcommon/vogl_general_context_state.cpp +++ b/src/voglcommon/vogl_general_context_state.cpp @@ -333,10 +333,13 @@ bool vogl_general_context_state::restore_buffer_binding(GLenum binding_enum, GLe VOGL_FUNC_TRACER uint buffer = 0; - if (get(binding_enum, 0, &buffer)) + if (get(binding_enum, 0, &buffer, 1, false)) { buffer = static_cast(remapper.remap_handle(VOGL_NAMESPACE_BUFFERS, buffer)); + GL_ENTRYPOINT(glBindBuffer)(set_enum, 0); + VOGL_CHECK_GL_ERROR; + GL_ENTRYPOINT(glBindBuffer)(set_enum, buffer); VOGL_CHECK_GL_ERROR; @@ -355,9 +358,9 @@ bool vogl_general_context_state::restore_buffer_binding_range(GLenum binding_enu uint64_t start, size = 0; uint buffer = 0; - if (get(binding_enum, index, &buffer, indexed_variant) && - get(start_enum, index, &start, indexed_variant) && - get(size_enum, index, &size, indexed_variant)) + if (get(binding_enum, index, &buffer, 1, indexed_variant) && + get(start_enum, index, &start, 1, indexed_variant) && + get(size_enum, index, &size, 1, indexed_variant)) { if (buffer) { @@ -1836,8 +1839,6 @@ bool vogl_general_context_state::restore(const vogl_context_info &context_info, ADD_PROCESSED_STATE(GL_ELEMENT_ARRAY_BUFFER_BINDING, 0); // restore transform feedback targets - restore_buffer_binding(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER, remapper); - ADD_PROCESSED_STATE(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 0); for (uint i = 0; i < context_info.get_max_transform_feedback_separate_attribs(); i++) { restore_buffer_binding_range(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_START, GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER, i, true, remapper); @@ -1846,9 +1847,10 @@ bool vogl_general_context_state::restore(const vogl_context_info &context_info, ADD_PROCESSED_STATE_INDEXED_VARIANT(GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, i); } + restore_buffer_binding(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER, remapper); + ADD_PROCESSED_STATE(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 0); + // restore uniform buffer binding target, and the indexed variants - restore_buffer_binding(GL_UNIFORM_BUFFER_BINDING, GL_UNIFORM_BUFFER, remapper); - ADD_PROCESSED_STATE(GL_UNIFORM_BUFFER_BINDING, 0); for (uint i = 0; i < context_info.get_max_uniform_buffer_bindings(); i++) { restore_buffer_binding_range(GL_UNIFORM_BUFFER_BINDING, GL_UNIFORM_BUFFER_START, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER, i, true, remapper); @@ -1857,6 +1859,9 @@ bool vogl_general_context_state::restore(const vogl_context_info &context_info, ADD_PROCESSED_STATE_INDEXED_VARIANT(GL_UNIFORM_BUFFER_SIZE, i); } + restore_buffer_binding(GL_UNIFORM_BUFFER_BINDING, GL_UNIFORM_BUFFER, remapper); + ADD_PROCESSED_STATE(GL_UNIFORM_BUFFER_BINDING, 0); + // TODO: these GL4 guys have indexed and offset/size variants restore_buffer_binding(GL_ATOMIC_COUNTER_BUFFER_BINDING, GL_ATOMIC_COUNTER_BUFFER, remapper); ADD_PROCESSED_STATE(GL_ATOMIC_COUNTER_BUFFER_BINDING, 0); @@ -2304,6 +2309,9 @@ bool vogl_general_context_state::restore(const vogl_context_info &context_info, //---------------------------------------- + GL_ENTRYPOINT(glBindBuffer)(GL_ARRAY_BUFFER, 0); + VOGL_CHECK_GL_ERROR; + GL_ENTRYPOINT(glBindBuffer)(GL_ARRAY_BUFFER, prev_array_buffer_binding); VOGL_CHECK_GL_ERROR;