From ef7f2c0a097da22b1c49273e443580b4fab7601b Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 16 Aug 2012 18:29:43 -0700 Subject: [PATCH] trim: Add support for display lists. The calls specified between glNewList and glEndList need to have special treatment. For now we do the simplest thing and unconditionally include all such calls in the trim output. Eventually we will want to track display-list resources similar to textures and trim away unused display lists. --- cli/cli_trim.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/cli/cli_trim.cpp b/cli/cli_trim.cpp index 45934e0..6820b00 100644 --- a/cli/cli_trim.cpp +++ b/cli/cli_trim.cpp @@ -173,6 +173,7 @@ class TraceAnalyzer { bool transformFeedbackActive; bool framebufferObjectActive; bool insideBeginEnd; + GLuint insideNewEndList; GLuint activeProgram; GLenum activeTextureUnit; @@ -345,6 +346,12 @@ class TraceAnalyzer { } return; } + + if (strcmp(name, "glNewList") == 0) { + GLuint list = call->arg(0).toUInt(); + + insideNewEndList = list; + } } void stateTrackPostCall(trace::Call *call) { @@ -371,12 +378,32 @@ class TraceAnalyzer { resources.erase("framebuffer"); return; } + + if (strcmp(name, "glEndList") == 0) { + insideNewEndList = 0; + } } void recordSideEffects(trace::Call *call) { const char *name = call->name(); + /* Handle display lists before any other processing. */ + + /* FIXME: If we encode the list of commands that are executed + * immediately (as opposed to those that are compiled into a + * display list) then we could generate a "display-list-X" + * resource just as we do for "texture-X" resources and only + * emit it in the trace if a glCallList(X) is emitted. For + * now, simply punt and include anything within glNewList and + * glEndList in the trim output. This guarantees that display + * lists will work, but does not trim out unused display + * lists. */ + if (insideNewEndList != 0) { + provide("state", call->no); + return; + } + /* If call is flagged as no side effects, then we are done here. */ if (call->flags & trace::CALL_FLAG_NO_SIDE_EFFECTS) { return; @@ -718,6 +745,7 @@ public: TraceAnalyzer(): transformFeedbackActive(false), framebufferObjectActive(false), insideBeginEnd(false), + insideNewEndList(0), activeTextureUnit(GL_TEXTURE0) {} -- 2.43.0