Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/gpu/intern/gpu_debug.cc')
-rw-r--r--source/blender/gpu/intern/gpu_debug.cc80
1 files changed, 66 insertions, 14 deletions
diff --git a/source/blender/gpu/intern/gpu_debug.cc b/source/blender/gpu/intern/gpu_debug.cc
index f179a241926..63e7024b74b 100644
--- a/source/blender/gpu/intern/gpu_debug.cc
+++ b/source/blender/gpu/intern/gpu_debug.cc
@@ -13,32 +13,84 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * The Original Code is Copyright (C) 2020 Blender Foundation.
* All rights reserved.
*/
/** \file
* \ingroup gpu
+ *
+ * Debug features of OpenGL.
*/
-#include "BLI_compiler_attrs.h"
-#include "BLI_sys_types.h"
-#include "BLI_system.h"
-#include "BLI_utildefines.h"
-
#include "BKE_global.h"
+#include "BLI_string.h"
+
+#include "gpu_context_private.hh"
+
#include "GPU_debug.h"
-#include "GPU_glew.h"
-#include "intern/gpu_private.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+using namespace blender;
+using namespace blender::gpu;
+
+void GPU_debug_group_begin(const char *name)
+{
+ if (!(G.debug & G_DEBUG_GPU)) {
+ return;
+ }
+ Context *ctx = Context::get();
+ DebugStack &stack = ctx->debug_stack;
+ stack.append(StringRef(name));
+ ctx->debug_group_begin(name, stack.size());
+}
+
+void GPU_debug_group_end(void)
+{
+ if (!(G.debug & G_DEBUG_GPU)) {
+ return;
+ }
+ Context *ctx = Context::get();
+ ctx->debug_stack.pop_last();
+ ctx->debug_group_end();
+}
+
+/**
+ * Return a formatted string showing the current group hierarchy in this format:
+ * "Group1 > Group 2 > Group3 > ... > GroupN : "
+ */
+void GPU_debug_get_groups_names(int name_buf_len, char *r_name_buf)
+{
+ Context *ctx = Context::get();
+ if (ctx == nullptr) {
+ return;
+ }
+ DebugStack &stack = ctx->debug_stack;
+ if (stack.size() == 0) {
+ r_name_buf[0] = '\0';
+ return;
+ }
+ size_t sz = 0;
+ for (StringRef &name : stack) {
+ sz += BLI_snprintf_rlen(r_name_buf + sz, name_buf_len - sz, "%s > ", name.data());
+ }
+ r_name_buf[sz - 3] = '\0';
+}
-void GPU_print_error_debug(const char *str)
+/* Return true if inside a debug group with the same name. */
+bool GPU_debug_group_match(const char *ref)
{
- if (G.debug & G_DEBUG) {
- fprintf(stderr, "GPU: %s\n", str);
+ /* Otherwise there will be no names. */
+ BLI_assert(G.debug & G_DEBUG_GPU);
+ Context *ctx = Context::get();
+ if (ctx == nullptr) {
+ return false;
+ }
+ DebugStack &stack = ctx->debug_stack;
+ for (StringRef &name : stack) {
+ if (name == ref) {
+ return true;
+ }
}
+ return false;
}