15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_debug_marker 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_debug_marker 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Seth Sowerby 125bd8deadSopenharmony_ci Benj Lipchak 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciContact 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci Benj Lipchak, Apple (lipchak 'at' apple.com) 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciStatus 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci Complete 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ciVersion 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ci Date: October 7, 2013 255bd8deadSopenharmony_ci Revision: 3 265bd8deadSopenharmony_ci 275bd8deadSopenharmony_ciNumber 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ci OpenGL Extension #440 305bd8deadSopenharmony_ci OpenGL ES Extension #99 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ciDependencies 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ci Requires OpenGL ES 1.1. 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ci Written based on the wording of the OpenGL ES 2.0.25 Full Specification 375bd8deadSopenharmony_ci (November 2, 2010). 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciOverview 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci This extension defines a mechanism for OpenGL and OpenGL ES applications to 425bd8deadSopenharmony_ci annotate their command stream with markers for discrete events and groups 435bd8deadSopenharmony_ci of commands using descriptive text markers. 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci When profiling or debugging such an application within a debugger or 465bd8deadSopenharmony_ci profiler it is difficult to relate the commands within the command stream 475bd8deadSopenharmony_ci to the elements of the scene or parts of the program code to which they 485bd8deadSopenharmony_ci correspond. Markers help obviate this by allowing applications to specify 495bd8deadSopenharmony_ci this link. 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci The intended purpose of this is purely to improve the user experience 525bd8deadSopenharmony_ci within OpenGL and OpenGL ES development tools. 535bd8deadSopenharmony_ci 545bd8deadSopenharmony_ciNew Procedures and Functions 555bd8deadSopenharmony_ci 565bd8deadSopenharmony_ci void InsertEventMarkerEXT(sizei length, const char *marker); 575bd8deadSopenharmony_ci void PushGroupMarkerEXT(sizei length, const char *marker); 585bd8deadSopenharmony_ci void PopGroupMarkerEXT(); 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ciNew Tokens 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci None 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci None 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci None 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment 735bd8deadSopenharmony_ciOperations and the Framebuffer) 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ci None 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL ES 2.0 Specification (Special Functions) 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ci Add a new section titled Debug Makers 805bd8deadSopenharmony_ci 815bd8deadSopenharmony_ci Debug markers provide a method for annotating a command stream with markers 825bd8deadSopenharmony_ci for discrete events and groups of commands using a descriptive text marker. 835bd8deadSopenharmony_ci These names may then be used by a tool such as a debugger or profiler to 845bd8deadSopenharmony_ci label the command stream. 855bd8deadSopenharmony_ci 865bd8deadSopenharmony_ci The command 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci void InsertEventMarkerEXT(sizei length, const char *marker); 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci inserts an event marker string <marker> into the command stream. <length> 915bd8deadSopenharmony_ci specifies the length of the string passed in <marker>. If <marker> is a 925bd8deadSopenharmony_ci null-terminated string then <length> should not include the terminator. 935bd8deadSopenharmony_ci If <length> is 0 then <marker> is assumed to be null-terminated. 945bd8deadSopenharmony_ci 955bd8deadSopenharmony_ci The command 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ci void PushGroupMarkerEXT(sizei length, const char *marker); 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci pushes a group marker string <marker> into the command stream. <length> 1005bd8deadSopenharmony_ci specifies the length of the string passed in <marker>. If <marker> is a 1015bd8deadSopenharmony_ci null-terminated string then <length> should not include the terminator. If 1025bd8deadSopenharmony_ci <length> is 0 then <marker> is assumed to be null-terminated. If <marker> 1035bd8deadSopenharmony_ci is null then an empty string is pushed on the stack. 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci The command 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci void PopGroupMarkerEXT(); 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci pops the most recent group marker. If there is no group marker to pop then 1105bd8deadSopenharmony_ci the PopGroupMarkerEXT command is ignored. 1115bd8deadSopenharmony_ci 1125bd8deadSopenharmony_ci Group markers are strictly hierarchical. Group marker sequences may be 1135bd8deadSopenharmony_ci nested within other group markers but can not overlap. 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State 1165bd8deadSopenharmony_ciRequests) 1175bd8deadSopenharmony_ci 1185bd8deadSopenharmony_ci None 1195bd8deadSopenharmony_ci 1205bd8deadSopenharmony_ciErrors 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci None 1235bd8deadSopenharmony_ci 1245bd8deadSopenharmony_ciNew State 1255bd8deadSopenharmony_ci 1265bd8deadSopenharmony_ci None 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ciNew Implementation Dependent State 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ci None 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ciIssues 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ci (1) Should the extension provide a method for querying markers? 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci No. 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ci A great deal of the value of debug markers is the 'when' as well as the 1395bd8deadSopenharmony_ci 'what' - seeing the debug markers within the stream of all OpenGL ES 1405bd8deadSopenharmony_ci commands. This value is only available to a tool intercepting the command 1415bd8deadSopenharmony_ci stream - it is not available from querying the markers. However, the 1425bd8deadSopenharmony_ci ability to query markers would make them available to developer tools 1435bd8deadSopenharmony_ci attaching to an already running application. 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci Querying the markers could be useful for applications to be able to dump 1465bd8deadSopenharmony_ci their marker stack to their own logs. However, this functionality does not 1475bd8deadSopenharmony_ci require an extension as applications can implement their own marker stacks 1485bd8deadSopenharmony_ci within their code independent of OpenGL ES. 1495bd8deadSopenharmony_ci 1505bd8deadSopenharmony_ci (2) Should a query exist for the current marker stack depth? 1515bd8deadSopenharmony_ci 1525bd8deadSopenharmony_ci No. 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci This would be useful if markers are queryable but not otherwise. 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci (3) Should PushGroupMarkerEXT & PopGroupMarkerEXT return the marker 1575bd8deadSopenharmony_ci stack depth? 1585bd8deadSopenharmony_ci 1595bd8deadSopenharmony_ci No. 1605bd8deadSopenharmony_ci 1615bd8deadSopenharmony_ci This would be useful if markers are queryable but not otherwise. 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci (4) How should a null-string passed to PushGroupMarkerEXT be treated? 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci Resolved: Push an empty string. 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ci The two possibilities are to push an empty string onto the marker stack or 1685bd8deadSopenharmony_ci to ignore the call to PushGroupMarkerEXT. Pushing an empty string 1695bd8deadSopenharmony_ci maintains the marker stack depth expected by the calling application. 1705bd8deadSopenharmony_ci 1715bd8deadSopenharmony_ci (5) Should the extension support printf-style formatting? 1725bd8deadSopenharmony_ci 1735bd8deadSopenharmony_ci Resolved: No. 1745bd8deadSopenharmony_ci 1755bd8deadSopenharmony_ci Providing printf-style formatting would impose a much greater burden on the 1765bd8deadSopenharmony_ci extension in terms of error checking the format string and arguments. 1775bd8deadSopenharmony_ci Likely all languages capable of calling OpenGL ES have convenient 1785bd8deadSopenharmony_ci capabilities for formatting strings so it is acceptable to rely on those. 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ciRevision History 1815bd8deadSopenharmony_ci 1825bd8deadSopenharmony_ci Date 01/17/2011 1835bd8deadSopenharmony_ci Revision: 1 1845bd8deadSopenharmony_ci - draft proposal 1855bd8deadSopenharmony_ci 1865bd8deadSopenharmony_ci Date 07/22/2011 1875bd8deadSopenharmony_ci Revision: 2 1885bd8deadSopenharmony_ci - rename from APPLE to EXT 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci Date 10/07/2013 1915bd8deadSopenharmony_ci Revision: 3 1925bd8deadSopenharmony_ci - Add support for desktop OpenGL 193