[Bf-blender-cvs] [71656ac] blender2.8: Gawain: fix immediate mode for multiple GL contexts
Mike Erwin
noreply at git.blender.org
Thu Oct 13 06:40:25 CEST 2016
Commit: 71656ac222a7381e460cb799edc4284a8a254057
Author: Mike Erwin
Date: Thu Oct 13 00:31:23 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB71656ac222a7381e460cb799edc4284a8a254057
Gawain: fix immediate mode for multiple GL contexts
New functions activate & deactivate immediate mode. Call these when switching context and the internal VAO will be handled properly. VAOs are one of the few things *not* shared between OpenGL contexts.
===================================================================
M source/blender/gpu/gawain/immediate.c
M source/blender/gpu/gawain/immediate.h
===================================================================
diff --git a/source/blender/gpu/gawain/immediate.c b/source/blender/gpu/gawain/immediate.c
index 9565c89..8acb9e1 100644
--- a/source/blender/gpu/gawain/immediate.c
+++ b/source/blender/gpu/gawain/immediate.c
@@ -57,8 +57,6 @@ void immInit()
memset(&imm, 0, sizeof(Immediate));
- glGenVertexArrays(1, &imm.vao_id);
- glBindVertexArray(imm.vao_id);
glGenBuffers(1, &imm.vbo_id);
glBindBuffer(GL_ARRAY_BUFFER, imm.vbo_id);
glBufferData(GL_ARRAY_BUFFER, IMM_BUFFER_SIZE, NULL, GL_DYNAMIC_DRAW);
@@ -72,19 +70,38 @@ void immInit()
imm.strict_vertex_ct = true;
glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindVertexArray(0);
initialized = true;
+
+ immActivate();
}
-void immDestroy()
+void immActivate()
{
#if TRUST_NO_ONE
assert(initialized);
assert(imm.primitive == PRIM_NONE); // make sure we're not between a Begin/End pair
+ assert(imm.vao_id == 0);
+#endif
+
+ glGenVertexArrays(1, &imm.vao_id);
+ }
+
+void immDeactivate()
+ {
+#if TRUST_NO_ONE
+ assert(initialized);
+ assert(imm.primitive == PRIM_NONE); // make sure we're not between a Begin/End pair
+ assert(imm.vao_id != 0);
#endif
- VertexFormat_clear(&imm.vertex_format);
glDeleteVertexArrays(1, &imm.vao_id);
+ imm.vao_id = 0;
+ imm.prev_enabled_attrib_bits = 0;
+ }
+
+void immDestroy()
+ {
+ immDeactivate();
glDeleteBuffers(1, &imm.vbo_id);
initialized = false;
}
diff --git a/source/blender/gpu/gawain/immediate.h b/source/blender/gpu/gawain/immediate.h
index bca7542..956ea6b 100644
--- a/source/blender/gpu/gawain/immediate.h
+++ b/source/blender/gpu/gawain/immediate.h
@@ -90,4 +90,6 @@ void immUniformColor4ubv(const unsigned char rgba[4]);
// these are called by the system -- not part of drawing API
void immInit(void);
+void immActivate(void);
+void immDeactivate(void);
void immDestroy(void);
More information about the Bf-blender-cvs
mailing list