15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_debug_label 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_debug_label 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Seth Sowerby 125bd8deadSopenharmony_ci Benj Lipchak 135bd8deadSopenharmony_ci Jean-François Roy 145bd8deadSopenharmony_ci Charles Brissart 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ciContact 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ci Benj Lipchak, Apple (lipchak 'at' apple.com) 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ciStatus 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ci Complete 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ciVersion 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci Date: October 7, 2013 275bd8deadSopenharmony_ci Revision: 4 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ciNumber 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ci OpenGL Extension #439 325bd8deadSopenharmony_ci OpenGL ES Extension #98 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ciDependencies 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ci Requires OpenGL ES 1.1. 375bd8deadSopenharmony_ci 385bd8deadSopenharmony_ci Written based on the wording of the OpenGL ES 2.0.25 Full Specification 395bd8deadSopenharmony_ci (November 2, 2010). 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci OpenGL ES 1.1 affects the definition of this extension. 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ci OES_framebuffer_object affects the definition of this extension. 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci OES_vertex_array_object affects the definition of this extension. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci EXT_occlusion_query_boolean affects the definition of this extension. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci EXT_separate_shader_objects affects the definition of this extension. 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci OpenGL ES 3.0 affects the definition of this extension. 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci OpenGL 3.3+ and 4.0+ affect the definition of this extension. 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ciOverview 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ci This extension defines a mechanism for OpenGL and OpenGL ES applications to 585bd8deadSopenharmony_ci label their objects (textures, buffers, shaders, etc.) with a descriptive 595bd8deadSopenharmony_ci string. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ci When profiling or debugging such an application within a debugger or 625bd8deadSopenharmony_ci profiler it is difficult to identify resources from their object names. 635bd8deadSopenharmony_ci Even when the resource itself is viewed it can be problematic to 645bd8deadSopenharmony_ci differentiate between similar resources. Attaching a label to an object 655bd8deadSopenharmony_ci helps obviate this difficulty. 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci The intended purpose of this is purely to improve the user experience 685bd8deadSopenharmony_ci within OpenGL and OpenGL ES development tools. 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ciNew Procedures and Functions 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ci void LabelObjectEXT(enum type, uint object, sizei length, 735bd8deadSopenharmony_ci const char *label); 745bd8deadSopenharmony_ci void GetObjectLabelEXT(enum type, uint object, sizei bufSize, 755bd8deadSopenharmony_ci sizei *length, char *label); 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ciNew Tokens 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ci Accepted by the <type> parameter of LabelObjectEXT and 805bd8deadSopenharmony_ci GetObjectLabelEXT: 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ci BUFFER_OBJECT_EXT 0x9151 835bd8deadSopenharmony_ci SHADER_OBJECT_EXT 0x8B48 845bd8deadSopenharmony_ci PROGRAM_OBJECT_EXT 0x8B40 855bd8deadSopenharmony_ci VERTEX_ARRAY_OBJECT_EXT 0x9154 865bd8deadSopenharmony_ci QUERY_OBJECT_EXT 0x9153 875bd8deadSopenharmony_ci PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) 905bd8deadSopenharmony_ci 915bd8deadSopenharmony_ci None 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) 945bd8deadSopenharmony_ci 955bd8deadSopenharmony_ci None 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment 985bd8deadSopenharmony_ciOperations and the Framebuffer) 995bd8deadSopenharmony_ci 1005bd8deadSopenharmony_ci None 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL ES 2.0 Specification (Special Functions) 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci Add a new section titled Debug Labels 1055bd8deadSopenharmony_ci 1065bd8deadSopenharmony_ci Debug labels provide a method for annotating an object (texture, buffer, 1075bd8deadSopenharmony_ci shader, etc.) with a descriptive text label. These labels may then be used 1085bd8deadSopenharmony_ci by a tool such as a debugger or profiler to describe labeled objects. 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci The command 1115bd8deadSopenharmony_ci 1125bd8deadSopenharmony_ci void LabelObjectEXT(enum type, uint object, sizei length, 1135bd8deadSopenharmony_ci const char *label); 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ci labels the object <object> of type <type> with the label <label>. <length> 1165bd8deadSopenharmony_ci specifies the length of the string passed in <label>. If <label> is a null- 1175bd8deadSopenharmony_ci terminated string then <length> should not include the terminator. If 1185bd8deadSopenharmony_ci <length> is 0 and <label> is non-null then <label> is assumed to be null- 1195bd8deadSopenharmony_ci terminated. If <label> is NULL, any debug label is effectively removed from 1205bd8deadSopenharmony_ci <object>. 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci If <object> is not an object of type <type>, an INVALID_OPERATION error is 1235bd8deadSopenharmony_ci generated. 1245bd8deadSopenharmony_ci 1255bd8deadSopenharmony_ci A label is part of the state of the object to which it is associated. 1265bd8deadSopenharmony_ci The initial state of an object's label is NULL. Labels need not be unique. 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci Values supported for <type> are: TEXTURE, FRAMEBUFFER, RENDERBUFFER, 1295bd8deadSopenharmony_ci BUFFER_OBJECT_EXT, SHADER_OBJECT_EXT, PROGRAM_OBJECT_EXT, 1305bd8deadSopenharmony_ci VERTEX_ARRAY_OBJECT_EXT, QUERY_OBJECT_EXT, SAMPLER, TRANSFORM_FEEDBACK, and 1315bd8deadSopenharmony_ci PROGRAM_PIPELINE_OBJECT_EXT. 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State 1345bd8deadSopenharmony_ciRequests) 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci Add a new section titled Debug Labels 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ci The command 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ci void GetObjectLabelEXT(enum type, uint object, sizei bufSize, 1415bd8deadSopenharmony_ci sizei *length, char *label); 1425bd8deadSopenharmony_ci 1435bd8deadSopenharmony_ci returns in <label> the string labeling the object <object>. The 1445bd8deadSopenharmony_ci string <label> will be null terminated. The actual number of characters 1455bd8deadSopenharmony_ci written into <label>, excluding the null terminator, is returned in 1465bd8deadSopenharmony_ci <length>. If <length> is NULL, no length is returned. The maximum number 1475bd8deadSopenharmony_ci of characters that may be written into <label>, including the null 1485bd8deadSopenharmony_ci terminator, is specified by <bufSize>. If no debug label was specified for 1495bd8deadSopenharmony_ci the object <object> via LabelObjectEXT then <label> will contain an 1505bd8deadSopenharmony_ci empty string with null terminator and 0 will be returned in <length>. If 1515bd8deadSopenharmony_ci <label> is NULL and <length> is non-NULL then no string will be returned 1525bd8deadSopenharmony_ci and the length of the label will be returned in <length>. 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci If <object> is not an object of type <type>, an INVALID_OPERATION error is 1555bd8deadSopenharmony_ci generated. 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci Values supported for <type> are: TEXTURE, FRAMEBUFFER, RENDERBUFFER, 1585bd8deadSopenharmony_ci BUFFER_OBJECT_EXT, SHADER_OBJECT_EXT, PROGRAM_OBJECT_EXT, 1595bd8deadSopenharmony_ci VERTEX_ARRAY_OBJECT_EXT, QUERY_OBJECT_EXT, SAMPLER, TRANSFORM_FEEDBACK, and 1605bd8deadSopenharmony_ci PROGRAM_PIPELINE_OBJECT_EXT. 1615bd8deadSopenharmony_ci 1625bd8deadSopenharmony_ciInteractions with OpenGL ES 1.1 and OES_framebuffer_object 1635bd8deadSopenharmony_ci 1645bd8deadSopenharmony_ci If the GL is OpenGL ES 1.1, mentions of SHADER_OBJECT_EXT and 1655bd8deadSopenharmony_ci PROGRAM_OBJECT_EXT as types accepted by LabelObjectEXT and 1665bd8deadSopenharmony_ci GetObjectLabelEXT are omitted. 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci If OES_framebuffer_object is supported, FRAMEBUFFER and 1695bd8deadSopenharmony_ci RENDERBUFFER should be replaced by FRAMEBUFFER_OES and RENDERBUFFER_OES, 1705bd8deadSopenharmony_ci respectively. Otherwise they should be omitted. 1715bd8deadSopenharmony_ci 1725bd8deadSopenharmony_ciInteractions with OpenGL ES 3.0 and OpenGL 1735bd8deadSopenharmony_ci 1745bd8deadSopenharmony_ci If the GL is not OpenGL ES 3.0 or OpenGL 3.3+, mentions of 1755bd8deadSopenharmony_ci SAMPLER as a type accepted by LabelObjectEXT and GetObjectLabelEXT are 1765bd8deadSopenharmony_ci omitted. 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci If the GL is not OpenGL ES 3.0 or OpenGL 4.0+, mentions of 1795bd8deadSopenharmony_ci TRANSFORM_FEEDBACK as a type accepted by LabelObjectEXT and 1805bd8deadSopenharmony_ci GetObjectLabelEXT are omitted. 1815bd8deadSopenharmony_ci 1825bd8deadSopenharmony_ciInteractions with OES_vertex_array_object 1835bd8deadSopenharmony_ci 1845bd8deadSopenharmony_ci If OES_vertex_array_object is not available, mentions of 1855bd8deadSopenharmony_ci VERTEX_ARRAY_OBJECT_EXT as a type accepted by LabelObjectEXT and 1865bd8deadSopenharmony_ci GetObjectLabelEXT is omitted. 1875bd8deadSopenharmony_ci 1885bd8deadSopenharmony_ciInteractions with EXT_occlusion_query_boolean 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci If EXT_occlusion_query_boolean is not available, mentions of 1915bd8deadSopenharmony_ci QUERY_OBJECT_EXT as a type accepted by LabelObjectEXT and GetObjectLabelEXT 1925bd8deadSopenharmony_ci is omitted. 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ciInteractions with EXT_separate_shader_objects 1955bd8deadSopenharmony_ci 1965bd8deadSopenharmony_ci If EXT_separate_shader_objects is not available, mentions of 1975bd8deadSopenharmony_ci PROGRAM_PIPELINE_OBJECT_EXT as a type accepted by LabelObjectEXT and 1985bd8deadSopenharmony_ci GetObjectLabelEXT is omitted. 1995bd8deadSopenharmony_ci 2005bd8deadSopenharmony_ciErrors 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci INVALID_OPERATION is generated by LabelObjectEXT or GetObjectLabelEXT 2035bd8deadSopenharmony_ci if the type of <object> does not match <type>. 2045bd8deadSopenharmony_ci 2055bd8deadSopenharmony_ci INVALID_ENUM error will be generated by LabelObjectEXT or 2065bd8deadSopenharmony_ci GetObjectLabelEXT if <type> is not one of the allowed object types. 2075bd8deadSopenharmony_ci 2085bd8deadSopenharmony_ci INVALID_VALUE is generated by LabelObjectEXT if <length> is less than 2095bd8deadSopenharmony_ci zero. 2105bd8deadSopenharmony_ci 2115bd8deadSopenharmony_ci INVALID_VALUE is generated by GetObjectLabelEXT if <bufSize> is less than 2125bd8deadSopenharmony_ci zero. 2135bd8deadSopenharmony_ci 2145bd8deadSopenharmony_ciNew State 2155bd8deadSopenharmony_ci 2165bd8deadSopenharmony_ci Add the following to Table 6.3 Buffer Object State: 2175bd8deadSopenharmony_ci 2185bd8deadSopenharmony_ci Initial 2195bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2205bd8deadSopenharmony_ci ----------------- ---- ----------------- ------- ----------- --- 2215bd8deadSopenharmony_ci BUFFER_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci Add the following to Table 6.8 Textures (state per texture object): 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci Initial 2265bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2275bd8deadSopenharmony_ci --------- ---- ------------------- ------- ----------- --- 2285bd8deadSopenharmony_ci TEXTURE 0*xc GetObjectLabelEXT empty Debug label 5.X 2295bd8deadSopenharmony_ci 2305bd8deadSopenharmony_ci Add the following to Table 6.14 Shader Object State: 2315bd8deadSopenharmony_ci 2325bd8deadSopenharmony_ci Initial 2335bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2345bd8deadSopenharmony_ci ----------------- ---- ----------------- ------- ----------- --- 2355bd8deadSopenharmony_ci SHADER_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2365bd8deadSopenharmony_ci 2375bd8deadSopenharmony_ci Add the following to Table 6.15 Program Object State: 2385bd8deadSopenharmony_ci 2395bd8deadSopenharmony_ci Initial 2405bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2415bd8deadSopenharmony_ci ------------------ ---- ----------------- ------- ----------- --- 2425bd8deadSopenharmony_ci PROGRAM_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2435bd8deadSopenharmony_ci 2445bd8deadSopenharmony_ci Add the following to Table 6.23 Renderbuffer State: 2455bd8deadSopenharmony_ci 2465bd8deadSopenharmony_ci Initial 2475bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2485bd8deadSopenharmony_ci ------------ ---- ------------------- ------- ----------- --- 2495bd8deadSopenharmony_ci RENDERBUFFER 0*xc GetObjectLabelEXT empty Debug label 5.X 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ci Add the following to Table 6.24 Framebuffer State: 2525bd8deadSopenharmony_ci 2535bd8deadSopenharmony_ci Initial 2545bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2555bd8deadSopenharmony_ci ----------- ---- ------------------- ------- ----------- --- 2565bd8deadSopenharmony_ci FRAMEBUFFER 0*xc GetObjectLabelEXT empty Debug label 5.X 2575bd8deadSopenharmony_ci 2585bd8deadSopenharmony_ci Add the following to Table 6.VAO Vertex Array Object State: 2595bd8deadSopenharmony_ci 2605bd8deadSopenharmony_ci Initial 2615bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2625bd8deadSopenharmony_ci ----------------------- ---- ----------------- ------- ----------- --- 2635bd8deadSopenharmony_ci VERTEX_ARRAY_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2645bd8deadSopenharmony_ci 2655bd8deadSopenharmony_ci Add the following to Table 6.QO Query State: 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci Initial 2685bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2695bd8deadSopenharmony_ci ---------------- ---- ----------------- ------- ----------- --- 2705bd8deadSopenharmony_ci QUERY_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2715bd8deadSopenharmony_ci 2725bd8deadSopenharmony_ci Add the following to Table 6.PPO Program Pipeline State: 2735bd8deadSopenharmony_ci 2745bd8deadSopenharmony_ci Init. 2755bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2765bd8deadSopenharmony_ci --------------------------- ---- ----------------- ----- ----------- --- 2775bd8deadSopenharmony_ci PROGRAM_PIPELINE_OBJECT_EXT 0*xc GetObjectLabelEXT empty Debug label 5.X 2785bd8deadSopenharmony_ci 2795bd8deadSopenharmony_ci Add the following to Table 6.24 Transform Feedback State: 2805bd8deadSopenharmony_ci 2815bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2825bd8deadSopenharmony_ci ----------------------- ---- ----------------- ------- ----------- --- 2835bd8deadSopenharmony_ci TRANSFORM_FEEDBACK 0*xc GetObjectLabelEXT empty Debug label 5.X 2845bd8deadSopenharmony_ci 2855bd8deadSopenharmony_ci Add the following to the Table 6.1 Textures (state per sampler object): 2865bd8deadSopenharmony_ci 2875bd8deadSopenharmony_ci Get Value Type Get Cmnd Value Description Sec 2885bd8deadSopenharmony_ci ----------------------- ---- ----------------- ------- ----------- --- 2895bd8deadSopenharmony_ci SAMPLER 0*xc GetObjectLabelEXT empty Debug label 5.X 2905bd8deadSopenharmony_ci 2915bd8deadSopenharmony_ci 2925bd8deadSopenharmony_ciNew Implementation Dependent State 2935bd8deadSopenharmony_ci 2945bd8deadSopenharmony_ci None 2955bd8deadSopenharmony_ci 2965bd8deadSopenharmony_ciIssues 2975bd8deadSopenharmony_ci 2985bd8deadSopenharmony_ci (1) Should labels apply to the currently bound object for the specified 2995bd8deadSopenharmony_ci type instead of requiring the object name to be specified? 3005bd8deadSopenharmony_ci 3015bd8deadSopenharmony_ci Resolved: No. 3025bd8deadSopenharmony_ci 3035bd8deadSopenharmony_ci This would require shaders to be attached to a program which was then 3045bd8deadSopenharmony_ci linked and bound. This may not occur at the time the shader is created 3055bd8deadSopenharmony_ci and/or compiled. It might require significant work for developers to label 3065bd8deadSopenharmony_ci their shaders at the point of creation. 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci (2) Should the extension accept FRAGMENT_SHADER & VERTEX_SHADER 3095bd8deadSopenharmony_ci instead of SHADER_OBJECT_EXT? ARRAY_BUFFER & ELEMENT_ARRAY_BUFFER instead 3105bd8deadSopenharmony_ci of BUFFER_OBJECT_EXT? 3115bd8deadSopenharmony_ci 3125bd8deadSopenharmony_ci Resolved: No. 3135bd8deadSopenharmony_ci 3145bd8deadSopenharmony_ci Specifying FRAGMENT_SHADER or VERTEX_SHADER to disambiguate the type of 3155bd8deadSopenharmony_ci shader would be necessary only if the resolution to issue #1 were yes, 3165bd8deadSopenharmony_ci in which case one would label a shader attached to the currently bound 3175bd8deadSopenharmony_ci program without explicitly specifying the shader's name. The same applies 3185bd8deadSopenharmony_ci to buffer objects bound to the current vertex attribute array target versus 3195bd8deadSopenharmony_ci the current element array target. 3205bd8deadSopenharmony_ci 3215bd8deadSopenharmony_ci (3) Should the extension support printf-style formatting? 3225bd8deadSopenharmony_ci 3235bd8deadSopenharmony_ci Resolved: No. 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci Providing printf-style formatting would impose a much greater burden on the 3265bd8deadSopenharmony_ci extension in terms of error checking the format string and arguments. 3275bd8deadSopenharmony_ci Likely all languages capable of calling OpenGL ES have convenient 3285bd8deadSopenharmony_ci capabilities for formatting strings so it is acceptable to rely on those. 3295bd8deadSopenharmony_ci 3305bd8deadSopenharmony_ci (4) Should labeling a non-existent object effectively create the object? 3315bd8deadSopenharmony_ci 3325bd8deadSopenharmony_ci Resolved: No, since some objects require more information (e.g. a texture 3335bd8deadSopenharmony_ci target) to be properly initialized. 3345bd8deadSopenharmony_ci 3355bd8deadSopenharmony_ciRevision History 3365bd8deadSopenharmony_ci 3375bd8deadSopenharmony_ci Date 06/15/2011 3385bd8deadSopenharmony_ci Revision: 1 3395bd8deadSopenharmony_ci - draft proposal 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci Date 07/22/2011 3425bd8deadSopenharmony_ci Revision: 2 3435bd8deadSopenharmony_ci - rename APPLE to EXT, update token names and values 3445bd8deadSopenharmony_ci 3455bd8deadSopenharmony_ci Date 10/18/2012 3465bd8deadSopenharmony_ci Revision: 3 3475bd8deadSopenharmony_ci - Add OpenGL ES 3.0 interactions: transform feedback and sampler objects 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci Date 10/07/2013 3505bd8deadSopenharmony_ci Revision: 4 3515bd8deadSopenharmony_ci - Add support for desktop OpenGL 352