]> git.cworth.org Git - vogl/commitdiff
Merge branch 'master' of https://github.com/ValveSoftware/vogl
authorPeterLValve <peterl@valvesoftware.com>
Wed, 26 Mar 2014 01:01:45 +0000 (18:01 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 1 Apr 2014 19:37:33 +0000 (12:37 -0700)
src/voglcommon/gl_gets.inc
src/voglcommon/gl_pname_defs.h
src/voglcommon/vogl_general_context_state.cpp
src/voglcommon/vogl_texture_state.cpp

index 69a5943660636b334dc5524cfd0aae0caee0985f..cd7211c09e6961dac4eaebf8d92ea42498b08805 100644 (file)
@@ -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)
index c67e912b7d54b76f8c21f151a317191fe27045a3..da8fd5cf7dcd851a1848c797bc1bd0740b103f71 100644 (file)
@@ -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},
index 45c96b755f3f18d7fb087c1b72461c09f7582ba1..95ceaee2d1935a3bb470d048b7d2220923327ca2 100644 (file)
@@ -337,6 +337,9 @@ bool vogl_general_context_state::restore_buffer_binding(GLenum binding_enum, GLe
     {
         buffer = static_cast<uint>(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;
 
index b3b536394b859e8e06d9803a1364cb1eb7b94218..834093a88269dc035bccd4aaf775c74a8e58d570 100644 (file)
@@ -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++)