From: PeterLValve Date: Wed, 26 Mar 2014 01:01:45 +0000 (-0700) Subject: Merge branch 'master' of https://github.com/ValveSoftware/vogl X-Git-Url: https://git.cworth.org/git?p=vogl;a=commitdiff_plain;h=ca705ac05c794d5e1eb7be54c1c613831591d7ce;hp=dfeddddb1c5b2e4973bc9160dd6f8f8657b76b8b Merge branch 'master' of https://github.com/ValveSoftware/vogl --- diff --git a/src/voglcommon/gl_gets.inc b/src/voglcommon/gl_gets.inc index 69a5943..cd7211c 100644 --- a/src/voglcommon/gl_gets.inc +++ b/src/voglcommon/gl_gets.inc @@ -484,6 +484,8 @@ DEFINE_GL_GET(GL_MAX_COLOR_ATTACHMENTS, 0x0030, 0x99) // Not sure about the version of the VAO binding DEFINE_GL_GET(GL_VERTEX_ARRAY_BINDING, 0x0030, 0x99) +DEFINE_GL_INDEXED_GET(GL_BLEND, 0x030, 0x99, GL_MAX_DRAW_BUFFERS) + // Start of version 3.1 - DEFINE_GL_GET(GL_MAX_RECTANGLE_TEXTURE_SIZE, 0x0031, 0x99) DEFINE_GL_GET(GL_MAX_TEXTURE_BUFFER_SIZE, 0x0031, 0x99) diff --git a/src/voglcommon/gl_pname_defs.h b/src/voglcommon/gl_pname_defs.h index c67e912..da8fd5c 100644 --- a/src/voglcommon/gl_pname_defs.h +++ b/src/voglcommon/gl_pname_defs.h @@ -191,7 +191,7 @@ struct gl_pname_def_t { "glGet", 'B', 1, "GL_DITHER", 0x0BD0}, { "glGet", 'E', 1, "GL_BLEND_DST", 0x0BE0}, { "glGet", 'E', 1, "GL_BLEND_SRC", 0x0BE1}, - { "glGet", 'B', 1, "GL_BLEND", 0x0BE2}, + { "glGet,glGetI", 'B', 1, "GL_BLEND", 0x0BE2}, { "glGet", 'E', 1, "GL_LOGIC_OP_MODE", 0x0BF0}, { "glGet", 'B', 1, "GL_INDEX_LOGIC_OP", 0x0BF1}, { "glGet", 'B', 1, "GL_COLOR_LOGIC_OP", 0x0BF2}, diff --git a/src/voglcommon/vogl_general_context_state.cpp b/src/voglcommon/vogl_general_context_state.cpp index 45c96b7..95ceaee 100644 --- a/src/voglcommon/vogl_general_context_state.cpp +++ b/src/voglcommon/vogl_general_context_state.cpp @@ -337,6 +337,9 @@ bool vogl_general_context_state::restore_buffer_binding(GLenum binding_enum, GLe { 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; @@ -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,28 @@ 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); + + // Restore indexed blending state (we've already restored the global state, which sets all the indexed states) + for (uint i = 0; i < context_info.get_max_draw_buffers(); i++) + { + GLint enabled = 0; + if (get(GL_BLEND, i, &enabled, 1, true)) + { + if (enabled) + { + GL_ENTRYPOINT(glEnablei)(GL_BLEND, i); + VOGL_CHECK_GL_ERROR; + } + else + { + GL_ENTRYPOINT(glDisablei)(GL_BLEND, i); + VOGL_CHECK_GL_ERROR; + } + } + } + // 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 +2328,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; diff --git a/src/voglcommon/vogl_texture_state.cpp b/src/voglcommon/vogl_texture_state.cpp index b3b5363..834093a 100644 --- a/src/voglcommon/vogl_texture_state.cpp +++ b/src/voglcommon/vogl_texture_state.cpp @@ -1272,10 +1272,10 @@ bool vogl_texture_state::restore(const vogl_context_info &context_info, vogl_han } } - // TODO: Support immutable textures, incomplete textures, etc. Lots more to do here. + // TODO: Support immutable textures if (is_immutable_format) { - vogl_warning_printf("%s: TODO: Support immutable textures\n", VOGL_METHOD_NAME); + vogl_warning_printf_once("%s: TODO: Support immutable textures (texture will be created non-immutable)\n", VOGL_METHOD_NAME); } for (face = 0; face < num_faces; face++)