]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/mesh.cpp
Set OpenGL debug labels on various objects loaded from Resources
[libs/gl.git] / source / core / mesh.cpp
index 3a79f3e53193c0c1c63cb32bde351926c2cb4a63..f8135dc8c2ce5dcb7baee86238128aa3b78c8a34 100644 (file)
@@ -1,6 +1,7 @@
 #include <msp/gl/extensions/arb_vertex_array_object.h>
 #include <msp/gl/extensions/arb_vertex_buffer_object.h>
 #include <msp/gl/extensions/arb_vertex_shader.h>
+#include <msp/gl/extensions/khr_debug.h>
 #include "buffer.h"
 #include "error.h"
 #include "mesh.h"
@@ -63,6 +64,11 @@ void Mesh::check_buffers(unsigned mask)
                        vertices.use_buffer(vbuf);
                        vtx_setup.set_vertex_array(vertices);
                        dirty |= VERTEX_BUFFER;
+
+#ifdef DEBUG
+                       if(!debug_name.empty())
+                               vbuf->set_debug_name(debug_name+" [VBO]");
+#endif
                }
        }
 
@@ -77,6 +83,11 @@ void Mesh::check_buffers(unsigned mask)
                                batches.front().change_buffer(ibuf);
                        vtx_setup.set_index_buffer(*ibuf);
                        dirty |= INDEX_BUFFER;
+
+#ifdef DEBUG
+                       if(!debug_name.empty())
+                               vbuf->set_debug_name(debug_name+" [IBO]");
+#endif
                }
        }
 }
@@ -155,6 +166,9 @@ void Mesh::draw(Renderer &renderer, const VertexSetup *vs, unsigned count) const
                        return;
        }
 
+       if(batches.empty())
+               return;
+
        if(dirty)
                resize_buffers();
 
@@ -177,7 +191,7 @@ void Mesh::resize_buffers() const
 {
        if(dirty&VERTEX_BUFFER)
                vbuf->storage(vertices.get_required_buffer_size());
-       if(dirty&INDEX_BUFFER)
+       if((dirty&INDEX_BUFFER) && !batches.empty())
                ibuf->storage(batches.front().get_required_buffer_size());
        dirty = 0;
 }
@@ -208,6 +222,20 @@ void Mesh::unload()
        ibuf = 0;
 }
 
+void Mesh::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+       debug_name = name;
+       if(vbuf)
+               vbuf->set_debug_name(name+" [VBO]");
+       if(ibuf)
+               ibuf->set_debug_name(name+" [IBO]");
+       vtx_setup.set_debug_name(name+" [VAO]");
+#else
+       (void)name;
+#endif
+}
+
 
 Mesh::Loader::Loader(Mesh &m, bool g):
        DataFile::ObjectLoader<Mesh>(m),