diff --git a/src/voglcommon/vogl_gl_utils.cpp b/src/voglcommon/vogl_gl_utils.cpp index 2651e2f5..15bce3e5 100644 --- a/src/voglcommon/vogl_gl_utils.cpp +++ b/src/voglcommon/vogl_gl_utils.cpp @@ -1344,6 +1344,36 @@ bool vogl_is_clear_entrypoint(gl_entrypoint_id_t id) return false; } +//------------------------------------------------------------------------------ +// vogl_is_start_nested_entrypoint +//------------------------------------------------------------------------------ +bool vogl_is_start_nested_entrypoint(gl_entrypoint_id_t id) +{ + switch (id) { + case VOGL_ENTRYPOINT_glBegin: + case VOGL_ENTRYPOINT_glPushDebugGroup: + return true; + default: + break; + } + return false; +} + +//------------------------------------------------------------------------------ +// vogl_is_end_nested_entrypoint +//------------------------------------------------------------------------------ +bool vogl_is_end_nested_entrypoint(gl_entrypoint_id_t id) +{ + switch (id) { + case VOGL_ENTRYPOINT_glEnd: + case VOGL_ENTRYPOINT_glPopDebugGroup: + return true; + default: + break; + } + return false; +} + //---------------------------------------------------------------------------------------------------------------------- // vogl_get_json_value_as_enum //---------------------------------------------------------------------------------------------------------------------- diff --git a/src/voglcommon/vogl_gl_utils.h b/src/voglcommon/vogl_gl_utils.h index f6841108..c86e8eca 100644 --- a/src/voglcommon/vogl_gl_utils.h +++ b/src/voglcommon/vogl_gl_utils.h @@ -379,6 +379,8 @@ inline bool vogl_is_swap_buffers_entrypoint(gl_entrypoint_id_t id) bool vogl_is_draw_entrypoint(gl_entrypoint_id_t id); bool vogl_is_clear_entrypoint(gl_entrypoint_id_t id); +bool vogl_is_start_nested_entrypoint(gl_entrypoint_id_t id); +bool vogl_is_end_nested_entrypoint(gl_entrypoint_id_t id); //---------------------------------------------------------------------------------------------------------------------- // Error helpers diff --git a/src/vogleditor/vogleditor_qapicalltreemodel.cpp b/src/vogleditor/vogleditor_qapicalltreemodel.cpp index 107843c7..a8adbf8d 100644 --- a/src/vogleditor/vogleditor_qapicalltreemodel.cpp +++ b/src/vogleditor/vogleditor_qapicalltreemodel.cpp @@ -239,23 +239,26 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace // reset the CurFrame so that a new frame node will be created on the next api call pCurFrame = NULL; } - else if (entrypoint_id == VOGL_ENTRYPOINT_glBegin) + else if (vogl_is_start_nested_entrypoint(entrypoint_id)) { - // items in the glBegin/glEnd block will be nested, including the glEnd + // Nest logically paired blocks of gl calls including terminating + // nest call pCurParent = item; } - else if (entrypoint_id == VOGL_ENTRYPOINT_glEnd) + else if (vogl_is_end_nested_entrypoint(entrypoint_id)) { // move the parent back one level of the hierarchy, to its own parent - pCurParent = pCurParent->parent(); + // (but not past Frame parent [e.g., unpaired "end" operation]) + if (pCurParent->parent() != parent) + pCurParent = pCurParent->parent(); } } if (pTrace_reader->get_packet_type() == cTSPTEOF) { - //found_eof_packet = true; - vogl_printf("Found trace file EOF packet on swap %" PRIu64 "\n", total_swaps); - break; + //found_eof_packet = true; + vogl_printf("Found trace file EOF packet on swap %" PRIu64 "\n", total_swaps); + break; } } }