15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_direct_state_access 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_direct_state_access 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Cass Everitt, NVIDIA 125bd8deadSopenharmony_ci Daniel Pageau, Blizzard 135bd8deadSopenharmony_ci Daniel Koch, TransGaming 145bd8deadSopenharmony_ci Ian Romanick, IBM 155bd8deadSopenharmony_ci Jason Green, TransGaming 165bd8deadSopenharmony_ci Johan Andersson, DICE/Electronic Arts 175bd8deadSopenharmony_ci Jon Leech 185bd8deadSopenharmony_ci Mark Kilgard, NVIDIA 195bd8deadSopenharmony_ci Nicholas Vining, Destineer 205bd8deadSopenharmony_ci Pat Brown, NVIDIA 215bd8deadSopenharmony_ci Patrick Doane, Blizzard 225bd8deadSopenharmony_ci Robert Barris, Blizzard 235bd8deadSopenharmony_ci Ryan Gordon, Destineer 245bd8deadSopenharmony_ci Scott Nations, NVIDIA 255bd8deadSopenharmony_ci Yanjun Zhang, S3 Graphics 265bd8deadSopenharmony_ci Jeff Bolz, NVIDIA 275bd8deadSopenharmony_ci Jeff Juliano, NVIDIA 285bd8deadSopenharmony_ci Jon Burgess, NVIDIA 295bd8deadSopenharmony_ci Mike Marcin 305bd8deadSopenharmony_ci Nigel Stewart, NVIDIA 315bd8deadSopenharmony_ci Jason McKesson 325bd8deadSopenharmony_ci Graham Sellers, AMD 335bd8deadSopenharmony_ci Vladimir Vukicevic, Mozilla 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ciContact 365bd8deadSopenharmony_ci 375bd8deadSopenharmony_ci Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com) 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciStatus 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci Complete, except for GLX protocol 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ci Version 1.0 implemented by NVIDIA, shipping November 2008 445bd8deadSopenharmony_ci Version 1.1 implemented by NVIDIA, shipping January 2009 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ciVersion 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ci Last Modified Date: 02/24/2014 495bd8deadSopenharmony_ci Author revision: 39 505bd8deadSopenharmony_ci Version 1.2 515bd8deadSopenharmony_ci 525bd8deadSopenharmony_ci (version 1.0 lacked OpenGL 3.0 support) 535bd8deadSopenharmony_ci (version 1.1 lacked GL_TEXTUREi support for glVertexArrayTexCoordOffsetEXT) 545bd8deadSopenharmony_ci (version 1.1 didn't clearly specify GL_TEXTURE_COORD_ARRAY works with glGetVertexArrayIntegeri_vEXT) 555bd8deadSopenharmony_ci 565bd8deadSopenharmony_ciNumber 575bd8deadSopenharmony_ci 585bd8deadSopenharmony_ci 353 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ciDependencies 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci This extension is written against the OpenGL 2.1 specification. 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci This extension interacts with the matrix manipulation commands 655bd8deadSopenharmony_ci introduced by OpenGL 1.0. 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci This extension interacts with the texture object manipulation commands 685bd8deadSopenharmony_ci introduced by EXT_texture_object and standardized by OpenGL 1.1. 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci This extension interacts with the 3D texture object manipulation 715bd8deadSopenharmony_ci commands introduced by EXT_texture3D and standardized by OpenGL 1.2. 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci This extension interacts with the multitexture command introduced 745bd8deadSopenharmony_ci by ARB_multitexture and standardized by OpenGL 1.2.1. 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci This extension interacts with the matrix transpose manipulation 775bd8deadSopenharmony_ci commands introduced by ARB_transpose_matrix and standardized by 785bd8deadSopenharmony_ci OpenGL 1.3. 795bd8deadSopenharmony_ci 805bd8deadSopenharmony_ci This extension interacts with the local parameter program object 815bd8deadSopenharmony_ci manipulation commands introduced by ARB_vertex_program. 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci This extension interacts with the texture rectangle enable and target 845bd8deadSopenharmony_ci binding introduced by ARB_texture_rectangle (and NV_texture_rectangle 855bd8deadSopenharmony_ci and EXT_texture_rectangle). 865bd8deadSopenharmony_ci 875bd8deadSopenharmony_ci This extension interacts with the buffer manipulation commands 885bd8deadSopenharmony_ci standardized by OpenGL 1.5. 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci This extension interacts with the GLSL uniform commands standardized 915bd8deadSopenharmony_ci by OpenGL 2.0. 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ci This extension interacts with the GLSL uniform matrix commands 945bd8deadSopenharmony_ci standardized by OpenGL 2.1. 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci This extension interacts with the framebuffer object commands 975bd8deadSopenharmony_ci introduced by EXT_framebuffer_object and standardized by OpenGL 3.0. 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci This extension interacts with the framebuffer blit commands introduced 1005bd8deadSopenharmony_ci by EXT_framebuffer_blit and standardized by OpenGL 3.0. 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ci This extension interacts with the framebuffer multisample commands 1035bd8deadSopenharmony_ci introduced by EXT_framebuffer_multisample and standardized by 1045bd8deadSopenharmony_ci OpenGL 3.0. 1055bd8deadSopenharmony_ci 1065bd8deadSopenharmony_ci This extension interacts with the vertex array object commands 1075bd8deadSopenharmony_ci introduced by APPLE_vertex_array_object and standardized by 1085bd8deadSopenharmony_ci OpenGL 3.0. 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci This extension interacts with the integer texture parameter commands 1115bd8deadSopenharmony_ci introduced by EXT_texture_integer and standardized by OpenGL 3.0. 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci This extension interacts with the texture buffer commands introduced 1145bd8deadSopenharmony_ci by EXT_texture_buffer_object. 1155bd8deadSopenharmony_ci 1165bd8deadSopenharmony_ci This extension interacts with the GLSL integer uniform commands 1175bd8deadSopenharmony_ci introduced by EXT_gpu_shader4. 1185bd8deadSopenharmony_ci 1195bd8deadSopenharmony_ci This extension interacts with the local plural parameter program 1205bd8deadSopenharmony_ci object manipulation commands introduced by EXT_gpu_program_parameters. 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci This extension interacts with the local integer parameter program 1235bd8deadSopenharmony_ci object manipulation commands introduced by NV_gpu_program4. 1245bd8deadSopenharmony_ci 1255bd8deadSopenharmony_ci This extension trivially interacts with the EnableIndexedEXT 1265bd8deadSopenharmony_ci and DisableIndexed commands and the integer and boolean indexed 1275bd8deadSopenharmony_ci queries introduced by EXT_draw_buffers2, EXT_transform_feedback, 1285bd8deadSopenharmony_ci and NV_transform_feedback. 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ci This extension interacts with NV_explicit_multisample. 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ci This extension trivially interacts with EXT_texture_array. 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ci This extension trivially interacts with NV_texture_cube_map_array. 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci This extension interacts with the buffer data copying command 1375bd8deadSopenharmony_ci introduced by EXT_copy_buffer and standardized by OpenGL 3.0. 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ciOverview 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ci This extension introduces a set of new "direct state access" 1425bd8deadSopenharmony_ci commands (meaning no selector is involved) to access (update and 1435bd8deadSopenharmony_ci query) OpenGL state that previously depended on the OpenGL state 1445bd8deadSopenharmony_ci selectors for access. These new commands supplement the existing 1455bd8deadSopenharmony_ci selector-based OpenGL commands to access the same state. 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci The intent of this extension is to make it more efficient for 1485bd8deadSopenharmony_ci libraries to avoid disturbing selector and latched state. The 1495bd8deadSopenharmony_ci extension also allows more efficient command usage by eliminating 1505bd8deadSopenharmony_ci the need for selector update commands. 1515bd8deadSopenharmony_ci 1525bd8deadSopenharmony_ci Two derivative advantages of this extension are 1) display lists 1535bd8deadSopenharmony_ci can be executed using these commands that avoid disturbing selectors 1545bd8deadSopenharmony_ci that subsequent commands may depend on, and 2) drivers implemented 1555bd8deadSopenharmony_ci with a dual-thread partitioning with OpenGL command buffering from 1565bd8deadSopenharmony_ci an application thread and then OpenGL command dispatching in a 1575bd8deadSopenharmony_ci concurrent driver thread can avoid thread synchronization created by 1585bd8deadSopenharmony_ci selector saving, setting, command execution, and selector restoration. 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci This extension does not itself add any new OpenGL state. 1615bd8deadSopenharmony_ci 1625bd8deadSopenharmony_ci We call a state variable in OpenGL an "OpenGL state selector" or 1635bd8deadSopenharmony_ci simply a "selector" if OpenGL commands depend on the state variable 1645bd8deadSopenharmony_ci to determine what state to query or update. The matrix mode and 1655bd8deadSopenharmony_ci active texture are both selectors. Object bindings for buffers, 1665bd8deadSopenharmony_ci programs, textures, and framebuffer objects are also selectors. 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci We call OpenGL state "latched" if the state is set by one OpenGL 1695bd8deadSopenharmony_ci command but then that state is saved by a subsequent command or the 1705bd8deadSopenharmony_ci state determines how client memory or buffer object memory is accessed 1715bd8deadSopenharmony_ci by a subsequent command. The array and element array buffer bindings 1725bd8deadSopenharmony_ci are latched by vertex array specification commands to determine 1735bd8deadSopenharmony_ci which buffer a given vertex array uses. Vertex array state and pixel 1745bd8deadSopenharmony_ci pack/unpack state decides how client memory or buffer object memory is 1755bd8deadSopenharmony_ci accessed by subsequent vertex pulling or image specification commands. 1765bd8deadSopenharmony_ci 1775bd8deadSopenharmony_ci The existence of selectors and latched state in the OpenGL API 1785bd8deadSopenharmony_ci reduces the number of parameters to various sets of OpenGL commands 1795bd8deadSopenharmony_ci but complicates the access to state for layered libraries which seek 1805bd8deadSopenharmony_ci to access state without disturbing other state, namely the state of 1815bd8deadSopenharmony_ci state selectors and latched state. In many cases, selectors and 1825bd8deadSopenharmony_ci latched state were introduced by extensions as OpenGL evolved to 1835bd8deadSopenharmony_ci minimize the disruption to the OpenGL API when new functionality, 1845bd8deadSopenharmony_ci particularly the pluralization of existing functionality as when 1855bd8deadSopenharmony_ci texture objects and later multiple texture units, was introduced. 1865bd8deadSopenharmony_ci 1875bd8deadSopenharmony_ci The OpenGL API involves several selectors (listed in historical 1885bd8deadSopenharmony_ci order of introduction): 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci o The matrix mode. 1915bd8deadSopenharmony_ci 1925bd8deadSopenharmony_ci o The current bound texture for each supported texture target. 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci o The active texture. 1955bd8deadSopenharmony_ci 1965bd8deadSopenharmony_ci o The active client texture. 1975bd8deadSopenharmony_ci 1985bd8deadSopenharmony_ci o The current bound program for each supported program target. 1995bd8deadSopenharmony_ci 2005bd8deadSopenharmony_ci o The current bound buffer for each supported buffer target. 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci o The current GLSL program. 2035bd8deadSopenharmony_ci 2045bd8deadSopenharmony_ci o The current framebuffer object. 2055bd8deadSopenharmony_ci 2065bd8deadSopenharmony_ci The new selector-free update commands can be compiled into display 2075bd8deadSopenharmony_ci lists. 2085bd8deadSopenharmony_ci 2095bd8deadSopenharmony_ci The OpenGL API has latched state for vertex array buffer objects 2105bd8deadSopenharmony_ci and pixel store state. When an application issues a GL command to 2115bd8deadSopenharmony_ci unpack or pack pixels (for example, glTexImage2D or glReadPixels 2125bd8deadSopenharmony_ci respectively), the current unpack and pack pixel store state 2135bd8deadSopenharmony_ci determines how the pixels are unpacked from/packed to client memory 2145bd8deadSopenharmony_ci or pixel buffer objects. For example, consider: 2155bd8deadSopenharmony_ci 2165bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); 2175bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_ROW_LENGTH, 640); 2185bd8deadSopenharmony_ci glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 47); 2195bd8deadSopenharmony_ci glDrawPixels(100, 100, GL_RGB, GL_FLOAT, pixels); 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ci The unpack swap bytes and row length state set by the preceding 2225bd8deadSopenharmony_ci glPixelStorei commands (as well as the 6 other unpack pixel store 2235bd8deadSopenharmony_ci state variables) control how data is read (unpacked) from buffer of 2245bd8deadSopenharmony_ci data pointed to by pixels. The glBindBuffer command also specifies 2255bd8deadSopenharmony_ci an unpack buffer object (47) so the pixel pointer is actually treated 2265bd8deadSopenharmony_ci as a byte offset into buffer object 47. 2275bd8deadSopenharmony_ci 2285bd8deadSopenharmony_ci When an application issues a command to configure a vertex array, 2295bd8deadSopenharmony_ci the current array buffer state is latched as the binding for the 2305bd8deadSopenharmony_ci particular vertex array being specified. For example, consider: 2315bd8deadSopenharmony_ci 2325bd8deadSopenharmony_ci glBindBuffer(GL_ARRAY_BUFFER, 23); 2335bd8deadSopenharmony_ci glVertexPointer(3, GL_FLOAT, 12, pointer); 2345bd8deadSopenharmony_ci 2355bd8deadSopenharmony_ci The glBindBuffer command updates the array buffering binding 2365bd8deadSopenharmony_ci (GL_ARRAY_BUFFER_BINDING) to the buffer object named 23. The 2375bd8deadSopenharmony_ci subsequent glVertexPointer command specifies explicit parameters 2385bd8deadSopenharmony_ci for the size, type, stride, and pointer to access the position 2395bd8deadSopenharmony_ci vertex array BUT ALSO latches the current array buffer binding for 2405bd8deadSopenharmony_ci the vertex array buffer binding (GL_VERTEX_ARRAY_BUFFER_BINDING). 2415bd8deadSopenharmony_ci Effectively the current array buffer binding buffer object becomes 2425bd8deadSopenharmony_ci an implicit fifth parameter to glVertexPointer and this applies to 2435bd8deadSopenharmony_ci all the gl*Pointer vertex array specification commands. 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci Selectors and latched state create problems for layered libraries 2465bd8deadSopenharmony_ci using OpenGL because selectors require the selector state to be 2475bd8deadSopenharmony_ci modified to update some other state and latched state means implicit 2485bd8deadSopenharmony_ci state can affect the operation of commands specifying, packing, or 2495bd8deadSopenharmony_ci unpacking data through pointers/offsets. For layered libraries, 2505bd8deadSopenharmony_ci a state update performed by the library may attempt to save the 2515bd8deadSopenharmony_ci selector state, set the selector, update/query some state the 2525bd8deadSopenharmony_ci selector controls, and then restore the selector to its saved state. 2535bd8deadSopenharmony_ci Layered libraries can skip the selector save/restore but this risks 2545bd8deadSopenharmony_ci introducing uncertainty about the state of a selector after calling 2555bd8deadSopenharmony_ci layered library routines. Such selector side-effects are difficult 2565bd8deadSopenharmony_ci to document and lead to compatibility issues as the layered library 2575bd8deadSopenharmony_ci evolves or its usage varies. For latched state, layered libraries 2585bd8deadSopenharmony_ci may find commands such as glDrawPixels do not work as expected 2595bd8deadSopenharmony_ci because latched pixel store state is not what the library expects. 2605bd8deadSopenharmony_ci Querying or pushing the latched state, setting the latched state 2615bd8deadSopenharmony_ci explicitly, performing the operation involving latched state, and 2625bd8deadSopenharmony_ci then restoring or popping the latched state avoids entanglements 2635bd8deadSopenharmony_ci with latched state but at considerable cost. 2645bd8deadSopenharmony_ci 2655bd8deadSopenharmony_ci EXAMPLE USAGE OF THIS EXTENSION'S FUNCTIONALITY 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci Consider the following routine to set the modelview matrix involving 2685bd8deadSopenharmony_ci the matrix mode selector: 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci void setModelviewMatrix(const GLfloat matrix[16]) 2715bd8deadSopenharmony_ci { 2725bd8deadSopenharmony_ci GLenum savedMatrixMode; 2735bd8deadSopenharmony_ci 2745bd8deadSopenharmony_ci glGetIntegerv(GL_MATRIX_MODE, &savedMatrixMode); 2755bd8deadSopenharmony_ci glMatrixMode(GL_MODELVIEW); 2765bd8deadSopenharmony_ci glLoadMatrixf(matrix); 2775bd8deadSopenharmony_ci glMatrixMode(savedMatrixMode); 2785bd8deadSopenharmony_ci } 2795bd8deadSopenharmony_ci 2805bd8deadSopenharmony_ci Notice that four OpenGL commands are required to update the current 2815bd8deadSopenharmony_ci modelview matrix without disturbing the matrix mode selector. 2825bd8deadSopenharmony_ci 2835bd8deadSopenharmony_ci OpenGL query commands can also substantially reduce the performance 2845bd8deadSopenharmony_ci of modern OpenGL implementations which may off-load OpenGL state 2855bd8deadSopenharmony_ci processing to another CPU core/thread or to the GPU itself. 2865bd8deadSopenharmony_ci 2875bd8deadSopenharmony_ci An alternative to querying the selector is to use the 2885bd8deadSopenharmony_ci glPushAttrib/glPopAttrib commands. However this approach typically 2895bd8deadSopenharmony_ci involves pushing far more state than simply the one or two selectors 2905bd8deadSopenharmony_ci that need to be saved and restored. Because so much state is 2915bd8deadSopenharmony_ci associated with a given push/pop attribute bit, the glPushAttrib 2925bd8deadSopenharmony_ci and glPopAttrib commands are considerably more costly than the 2935bd8deadSopenharmony_ci save/restore approach. Additionally glPushAttrib risks overflowing 2945bd8deadSopenharmony_ci the attribute stack. 2955bd8deadSopenharmony_ci 2965bd8deadSopenharmony_ci The reliability and performance of layered libraries and applications 2975bd8deadSopenharmony_ci can be improved by adding to the OpenGL API a new set of commands 2985bd8deadSopenharmony_ci to access directly OpenGL state that otherwise involves selectors 2995bd8deadSopenharmony_ci to access. 3005bd8deadSopenharmony_ci 3015bd8deadSopenharmony_ci The above example can be reimplemented more efficiently and without 3025bd8deadSopenharmony_ci selector side-effects: 3035bd8deadSopenharmony_ci 3045bd8deadSopenharmony_ci void setModelviewMatrix(const GLfloat matrix[16]) 3055bd8deadSopenharmony_ci { 3065bd8deadSopenharmony_ci glMatrixLoadfEXT(GL_MODELVIEW, matrix); 3075bd8deadSopenharmony_ci } 3085bd8deadSopenharmony_ci 3095bd8deadSopenharmony_ci Consider a layered library seeking to load a texture: 3105bd8deadSopenharmony_ci 3115bd8deadSopenharmony_ci void loadTexture(GLint texobj, GLint width, GLint height, 3125bd8deadSopenharmony_ci void *data) 3135bd8deadSopenharmony_ci { 3145bd8deadSopenharmony_ci glBindTexture(GL_TEXTURE_2D, texobj); 3155bd8deadSopenharmony_ci glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 3165bd8deadSopenharmony_ci width, height, GL_RGB, GL_FLOAT, data); 3175bd8deadSopenharmony_ci } 3185bd8deadSopenharmony_ci 3195bd8deadSopenharmony_ci The library expects the data to be packed into the buffer pointed 3205bd8deadSopenharmony_ci to by data. But what if the current pixel unpack buffer binding 3215bd8deadSopenharmony_ci is not zero so the current pixel unpack buffer, rather than client 3225bd8deadSopenharmony_ci memory, will be read? Or what if the application has modified 3235bd8deadSopenharmony_ci the GL_UNPACK_ROW_LENGTH pixel store state before loadTexture 3245bd8deadSopenharmony_ci is called? 3255bd8deadSopenharmony_ci 3265bd8deadSopenharmony_ci We can fix the routine by calling glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 3275bd8deadSopenharmony_ci 0) and setting all the pixel store unpack state to the initial state 3285bd8deadSopenharmony_ci the loadTexture routine expects, but this is expensive. It also risks 3295bd8deadSopenharmony_ci disturbing the state so when loadTexture returns to the application, 3305bd8deadSopenharmony_ci the application doesn't realize the current texture object (for 3315bd8deadSopenharmony_ci whatever texture unit the current active texture happens to be) and 3325bd8deadSopenharmony_ci pixel store state has changed. 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ci We can more efficiently implement this routine without disturbing 3355bd8deadSopenharmony_ci selector or latched state as follows: 3365bd8deadSopenharmony_ci 3375bd8deadSopenharmony_ci void loadTexture(GLint texobj, GLint width, GLint height, 3385bd8deadSopenharmony_ci void *data) 3395bd8deadSopenharmony_ci { 3405bd8deadSopenharmony_ci glPushClientAttribDefaultEXT(GL_CLIENT_PIXEL_STORE_BIT); 3415bd8deadSopenharmony_ci glTextureImage2D(texobj, GL_TEXTURE_2D, 0, GL_RGB8, 3425bd8deadSopenharmony_ci width, height, GL_RGB, GL_FLOAT, data); 3435bd8deadSopenharmony_ci glPopClientAttrib(); 3445bd8deadSopenharmony_ci } 3455bd8deadSopenharmony_ci 3465bd8deadSopenharmony_ci Now loadTexture does not have to worry about inappropriately 3475bd8deadSopenharmony_ci configured pixel store state or a non-zero pixel unpack buffer 3485bd8deadSopenharmony_ci binding. And loadTexture has no unintended side-effects for 3495bd8deadSopenharmony_ci selector or latched state (assuming the client attrib state does 3505bd8deadSopenharmony_ci not overflow). 3515bd8deadSopenharmony_ci 3525bd8deadSopenharmony_ciNew Procedures and Functions 3535bd8deadSopenharmony_ci 3545bd8deadSopenharmony_ci <OpenGL 1.1: New client commands> 3555bd8deadSopenharmony_ci 3565bd8deadSopenharmony_ci void ClientAttribDefaultEXT(bitfield mask); 3575bd8deadSopenharmony_ci void PushClientAttribDefaultEXT(bitfield mask); 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ci <OpenGL 1.0: New matrix commands add "Matrix" prefix to name, 3605bd8deadSopenharmony_ci drops "Matrix" suffix from name, and add initial "enum matrixMode" 3615bd8deadSopenharmony_ci parameter> 3625bd8deadSopenharmony_ci 3635bd8deadSopenharmony_ci void MatrixLoadfEXT(enum matrixMode, const float *m); 3645bd8deadSopenharmony_ci void MatrixLoaddEXT(enum matrixMode, const double *m); 3655bd8deadSopenharmony_ci 3665bd8deadSopenharmony_ci void MatrixMultfEXT(enum matrixMode, const float *m); 3675bd8deadSopenharmony_ci void MatrixMultdEXT(enum matrixMode, const double *m); 3685bd8deadSopenharmony_ci 3695bd8deadSopenharmony_ci void MatrixLoadIdentityEXT(enum matrixMode); 3705bd8deadSopenharmony_ci 3715bd8deadSopenharmony_ci void MatrixRotatefEXT(enum matrixMode, float angle, 3725bd8deadSopenharmony_ci float x, float y, float z); 3735bd8deadSopenharmony_ci void MatrixRotatedEXT(enum matrixMode, double angle, 3745bd8deadSopenharmony_ci double x, double y, double z); 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci void MatrixScalefEXT(enum matrixMode, 3775bd8deadSopenharmony_ci float x, float y, float z); 3785bd8deadSopenharmony_ci void MatrixScaledEXT(enum matrixMode, 3795bd8deadSopenharmony_ci double x, double y, double z); 3805bd8deadSopenharmony_ci 3815bd8deadSopenharmony_ci void MatrixTranslatefEXT(enum matrixMode, 3825bd8deadSopenharmony_ci float x, float y, float z); 3835bd8deadSopenharmony_ci void MatrixTranslatedEXT(enum matrixMode, 3845bd8deadSopenharmony_ci double x, double y, double z); 3855bd8deadSopenharmony_ci 3865bd8deadSopenharmony_ci void MatrixOrthoEXT(enum matrixMode, double l, double r, 3875bd8deadSopenharmony_ci double b, double t, double n, double f); 3885bd8deadSopenharmony_ci void MatrixFrustumEXT(enum matrixMode, double l, double r, 3895bd8deadSopenharmony_ci double b, double t, double n, double f); 3905bd8deadSopenharmony_ci 3915bd8deadSopenharmony_ci void MatrixPushEXT(enum matrixMode); 3925bd8deadSopenharmony_ci void MatrixPopEXT(enum matrixMode); 3935bd8deadSopenharmony_ci 3945bd8deadSopenharmony_ci <OpenGL 1.1: New texture object commands and queries replace "Tex" 3955bd8deadSopenharmony_ci in name with "Texture" and add initial "uint texture" parameter> 3965bd8deadSopenharmony_ci 3975bd8deadSopenharmony_ci void TextureParameteriEXT(uint texture, enum target, 3985bd8deadSopenharmony_ci enum pname, int param); 3995bd8deadSopenharmony_ci void TextureParameterivEXT(uint texture, enum target, 4005bd8deadSopenharmony_ci enum pname, const int *param); 4015bd8deadSopenharmony_ci 4025bd8deadSopenharmony_ci void TextureParameterfEXT(uint texture, enum target, 4035bd8deadSopenharmony_ci enum pname, float param); 4045bd8deadSopenharmony_ci void TextureParameterfvEXT(uint texture, enum target, 4055bd8deadSopenharmony_ci enum pname, const float *param); 4065bd8deadSopenharmony_ci 4075bd8deadSopenharmony_ci void TextureImage1DEXT(uint texture, enum target, 4085bd8deadSopenharmony_ci int level, int internalformat, 4095bd8deadSopenharmony_ci sizei width, int border, 4105bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 4115bd8deadSopenharmony_ci void TextureImage2DEXT(uint texture, enum target, 4125bd8deadSopenharmony_ci int level, int internalformat, 4135bd8deadSopenharmony_ci sizei width, sizei height, int border, 4145bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 4155bd8deadSopenharmony_ci 4165bd8deadSopenharmony_ci void TextureSubImage1DEXT(uint texture, enum target, 4175bd8deadSopenharmony_ci int level, int xoffset, sizei width, 4185bd8deadSopenharmony_ci enum format, enum type, 4195bd8deadSopenharmony_ci const void *pixels); 4205bd8deadSopenharmony_ci void TextureSubImage2DEXT(uint texture, enum target, 4215bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 4225bd8deadSopenharmony_ci sizei width, sizei height, 4235bd8deadSopenharmony_ci enum format, enum type, 4245bd8deadSopenharmony_ci const void *pixels); 4255bd8deadSopenharmony_ci 4265bd8deadSopenharmony_ci void CopyTextureImage1DEXT(uint texture, enum target, 4275bd8deadSopenharmony_ci int level, enum internalformat, 4285bd8deadSopenharmony_ci int x, int y, sizei width, int border); 4295bd8deadSopenharmony_ci void CopyTextureImage2DEXT(uint texture, enum target, 4305bd8deadSopenharmony_ci int level, enum internalformat, 4315bd8deadSopenharmony_ci int x, int y, 4325bd8deadSopenharmony_ci sizei width, sizei height, int border); 4335bd8deadSopenharmony_ci 4345bd8deadSopenharmony_ci void CopyTextureSubImage1DEXT(uint texture, enum target, 4355bd8deadSopenharmony_ci int level, int xoffset, 4365bd8deadSopenharmony_ci int x, int y, sizei width); 4375bd8deadSopenharmony_ci void CopyTextureSubImage2DEXT(uint texture, enum target, 4385bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 4395bd8deadSopenharmony_ci int x, int y, 4405bd8deadSopenharmony_ci sizei width, sizei height); 4415bd8deadSopenharmony_ci 4425bd8deadSopenharmony_ci void GetTextureImageEXT(uint texture, enum target, 4435bd8deadSopenharmony_ci int level, 4445bd8deadSopenharmony_ci enum format, enum type, void *pixels); 4455bd8deadSopenharmony_ci 4465bd8deadSopenharmony_ci void GetTextureParameterfvEXT(uint texture, enum target, 4475bd8deadSopenharmony_ci enum pname, float *params); 4485bd8deadSopenharmony_ci void GetTextureParameterivEXT(uint texture, enum target, 4495bd8deadSopenharmony_ci enum pname, int *params); 4505bd8deadSopenharmony_ci 4515bd8deadSopenharmony_ci void GetTextureLevelParameterfvEXT(uint texture, enum target, 4525bd8deadSopenharmony_ci int level, 4535bd8deadSopenharmony_ci enum pname, float *params); 4545bd8deadSopenharmony_ci void GetTextureLevelParameterivEXT(uint texture, enum target, 4555bd8deadSopenharmony_ci int level, 4565bd8deadSopenharmony_ci enum pname, int *params); 4575bd8deadSopenharmony_ci 4585bd8deadSopenharmony_ci <OpenGL 1.2: New 3D texture object commands replace "Tex" in name with 4595bd8deadSopenharmony_ci "Texture" and adds initial "uint texture" parameter> 4605bd8deadSopenharmony_ci 4615bd8deadSopenharmony_ci void TextureImage3DEXT(uint texture, enum target, 4625bd8deadSopenharmony_ci int level, int internalformat, 4635bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 4645bd8deadSopenharmony_ci int border, 4655bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 4665bd8deadSopenharmony_ci 4675bd8deadSopenharmony_ci void TextureSubImage3DEXT(uint texture, enum target, 4685bd8deadSopenharmony_ci int level, 4695bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 4705bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 4715bd8deadSopenharmony_ci enum format, enum type, 4725bd8deadSopenharmony_ci const void *pixels); 4735bd8deadSopenharmony_ci void CopyTextureSubImage3DEXT(uint texture, enum target, 4745bd8deadSopenharmony_ci int level, 4755bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 4765bd8deadSopenharmony_ci int x, int y, 4775bd8deadSopenharmony_ci sizei width, sizei height); 4785bd8deadSopenharmony_ci 4795bd8deadSopenharmony_ci <OpenGL 1.2.1: New multitexture commands and queries prefix "Multi" 4805bd8deadSopenharmony_ci before "Tex" and add an initial "enum texunit" parameter (to identify 4815bd8deadSopenharmony_ci the texture unit).> 4825bd8deadSopenharmony_ci 4835bd8deadSopenharmony_ci void BindMultiTextureEXT(enum texunit, enum target, uint texture); 4845bd8deadSopenharmony_ci 4855bd8deadSopenharmony_ci void MultiTexCoordPointerEXT(enum texunit, int size, enum type, 4865bd8deadSopenharmony_ci sizei stride, const void *pointer); 4875bd8deadSopenharmony_ci 4885bd8deadSopenharmony_ci void MultiTexEnvfEXT(enum texunit, enum target, enum pname, 4895bd8deadSopenharmony_ci float param); 4905bd8deadSopenharmony_ci void MultiTexEnvfvEXT(enum texunit, enum target, enum pname, 4915bd8deadSopenharmony_ci const float *params); 4925bd8deadSopenharmony_ci void MultiTexEnviEXT(enum texunit, enum target, enum pname, 4935bd8deadSopenharmony_ci int param); 4945bd8deadSopenharmony_ci void MultiTexEnvivEXT(enum texunit, enum target, enum pname, 4955bd8deadSopenharmony_ci const int *params); 4965bd8deadSopenharmony_ci 4975bd8deadSopenharmony_ci void MultiTexGendEXT(enum texunit, enum coord, enum pname, 4985bd8deadSopenharmony_ci double param); 4995bd8deadSopenharmony_ci void MultiTexGendvEXT(enum texunit, enum coord, enum pname, 5005bd8deadSopenharmony_ci const double *params); 5015bd8deadSopenharmony_ci void MultiTexGenfEXT(enum texunit, enum coord, enum pname, 5025bd8deadSopenharmony_ci float param); 5035bd8deadSopenharmony_ci void MultiTexGenfvEXT(enum texunit, enum coord, enum pname, 5045bd8deadSopenharmony_ci const float *params); 5055bd8deadSopenharmony_ci void MultiTexGeniEXT(enum texunit, enum coord, enum pname, 5065bd8deadSopenharmony_ci int param); 5075bd8deadSopenharmony_ci void MultiTexGenivEXT(enum texunit, enum coord, enum pname, 5085bd8deadSopenharmony_ci const int *params); 5095bd8deadSopenharmony_ci 5105bd8deadSopenharmony_ci void GetMultiTexEnvfvEXT(enum texunit, enum target, enum pname, 5115bd8deadSopenharmony_ci float *params); 5125bd8deadSopenharmony_ci void GetMultiTexEnvivEXT(enum texunit, enum target, enum pname, 5135bd8deadSopenharmony_ci int *params); 5145bd8deadSopenharmony_ci 5155bd8deadSopenharmony_ci void GetMultiTexGendvEXT(enum texunit, enum coord, enum pname, 5165bd8deadSopenharmony_ci double *params); 5175bd8deadSopenharmony_ci void GetMultiTexGenfvEXT(enum texunit, enum coord, enum pname, 5185bd8deadSopenharmony_ci float *params); 5195bd8deadSopenharmony_ci void GetMultiTexGenivEXT(enum texunit, enum coord, enum pname, 5205bd8deadSopenharmony_ci int *params); 5215bd8deadSopenharmony_ci 5225bd8deadSopenharmony_ci void MultiTexParameteriEXT(enum texunit, enum target, 5235bd8deadSopenharmony_ci enum pname, int param); 5245bd8deadSopenharmony_ci void MultiTexParameterivEXT(enum texunit, enum target, 5255bd8deadSopenharmony_ci enum pname, const int *param); 5265bd8deadSopenharmony_ci 5275bd8deadSopenharmony_ci void MultiTexParameterfEXT(enum texunit, enum target, 5285bd8deadSopenharmony_ci enum pname, float param); 5295bd8deadSopenharmony_ci void MultiTexParameterfvEXT(enum texunit, enum target, 5305bd8deadSopenharmony_ci enum pname, const float *param); 5315bd8deadSopenharmony_ci 5325bd8deadSopenharmony_ci void MultiTexImage1DEXT(enum texunit, enum target, 5335bd8deadSopenharmony_ci int level, int internalformat, 5345bd8deadSopenharmony_ci sizei width, int border, 5355bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 5365bd8deadSopenharmony_ci void MultiTexImage2DEXT(enum texunit, enum target, 5375bd8deadSopenharmony_ci int level, int internalformat, 5385bd8deadSopenharmony_ci sizei width, sizei height, int border, 5395bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 5405bd8deadSopenharmony_ci 5415bd8deadSopenharmony_ci void MultiTexSubImage1DEXT(enum texunit, enum target, 5425bd8deadSopenharmony_ci int level, int xoffset, sizei width, 5435bd8deadSopenharmony_ci enum format, enum type, 5445bd8deadSopenharmony_ci const void *pixels); 5455bd8deadSopenharmony_ci void MultiTexSubImage2DEXT(enum texunit, enum target, 5465bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 5475bd8deadSopenharmony_ci sizei width, sizei height, 5485bd8deadSopenharmony_ci enum format, enum type, 5495bd8deadSopenharmony_ci const void *pixels); 5505bd8deadSopenharmony_ci 5515bd8deadSopenharmony_ci void CopyMultiTexImage1DEXT(enum texunit, enum target, 5525bd8deadSopenharmony_ci int level, enum internalformat, 5535bd8deadSopenharmony_ci int x, int y, sizei width, int border); 5545bd8deadSopenharmony_ci void CopyMultiTexImage2DEXT(enum texunit, enum target, 5555bd8deadSopenharmony_ci int level, enum internalformat, 5565bd8deadSopenharmony_ci int x, int y, 5575bd8deadSopenharmony_ci sizei width, sizei height, int border); 5585bd8deadSopenharmony_ci 5595bd8deadSopenharmony_ci void CopyMultiTexSubImage1DEXT(enum texunit, enum target, 5605bd8deadSopenharmony_ci int level, int xoffset, 5615bd8deadSopenharmony_ci int x, int y, sizei width); 5625bd8deadSopenharmony_ci void CopyMultiTexSubImage2DEXT(enum texunit, enum target, 5635bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 5645bd8deadSopenharmony_ci int x, int y, 5655bd8deadSopenharmony_ci sizei width, sizei height); 5665bd8deadSopenharmony_ci 5675bd8deadSopenharmony_ci void GetMultiTexImageEXT(enum texunit, enum target, 5685bd8deadSopenharmony_ci int level, 5695bd8deadSopenharmony_ci enum format, enum type, void *pixels); 5705bd8deadSopenharmony_ci 5715bd8deadSopenharmony_ci void GetMultiTexParameterfvEXT(enum texunit, enum target, 5725bd8deadSopenharmony_ci enum pname, float *params); 5735bd8deadSopenharmony_ci void GetMultiTexParameterivEXT(enum texunit, enum target, 5745bd8deadSopenharmony_ci enum pname, int *params); 5755bd8deadSopenharmony_ci 5765bd8deadSopenharmony_ci void GetMultiTexLevelParameterfvEXT(enum texunit, enum target, 5775bd8deadSopenharmony_ci int level, 5785bd8deadSopenharmony_ci enum pname, float *params); 5795bd8deadSopenharmony_ci void GetMultiTexLevelParameterivEXT(enum texunit, enum target, 5805bd8deadSopenharmony_ci int level, 5815bd8deadSopenharmony_ci enum pname, int *params); 5825bd8deadSopenharmony_ci 5835bd8deadSopenharmony_ci void MultiTexImage3DEXT(enum texunit, enum target, 5845bd8deadSopenharmony_ci int level, int internalformat, 5855bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 5865bd8deadSopenharmony_ci int border, 5875bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 5885bd8deadSopenharmony_ci 5895bd8deadSopenharmony_ci void MultiTexSubImage3DEXT(enum texunit, enum target, 5905bd8deadSopenharmony_ci int level, 5915bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 5925bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 5935bd8deadSopenharmony_ci enum format, enum type, 5945bd8deadSopenharmony_ci const void *pixels); 5955bd8deadSopenharmony_ci void CopyMultiTexSubImage3DEXT(enum texunit, enum target, 5965bd8deadSopenharmony_ci int level, 5975bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 5985bd8deadSopenharmony_ci int x, int y, 5995bd8deadSopenharmony_ci sizei width, sizei height); 6005bd8deadSopenharmony_ci 6015bd8deadSopenharmony_ci <OpenGL 1.2.1: New indexed texture commands and queries append 6025bd8deadSopenharmony_ci "Indexed" to name and add "uint index" parameter (to identify the 6035bd8deadSopenharmony_ci texture unit index) after state name parameters (if any) and before 6045bd8deadSopenharmony_ci state value parameters> 6055bd8deadSopenharmony_ci 6065bd8deadSopenharmony_ci void EnableClientStateIndexedEXT(enum array, uint index); 6075bd8deadSopenharmony_ci void DisableClientStateIndexedEXT(enum array, uint index); 6085bd8deadSopenharmony_ci 6095bd8deadSopenharmony_ci <OpenGL 3.0: New indexed texture commands and queries append "i" 6105bd8deadSopenharmony_ci to name and add "uint index" parameter (to identify the texture 6115bd8deadSopenharmony_ci unit index) after state name parameters (if any) and before state 6125bd8deadSopenharmony_ci value parameters> 6135bd8deadSopenharmony_ci 6145bd8deadSopenharmony_ci void EnableClientStateiEXT(enum array, uint index); 6155bd8deadSopenharmony_ci void DisableClientStateiEXT(enum array, uint index); 6165bd8deadSopenharmony_ci 6175bd8deadSopenharmony_ci <OpenGL 1.2.1: New indexed generic queries (added for indexed texture 6185bd8deadSopenharmony_ci state) append "Indexed" to name and add "uint index" parameter 6195bd8deadSopenharmony_ci (to identify the texture unit) after state name parameters (if any) and 6205bd8deadSopenharmony_ci before state value parameters> 6215bd8deadSopenharmony_ci 6225bd8deadSopenharmony_ci void GetFloatIndexedvEXT(enum target, uint index, float *params); 6235bd8deadSopenharmony_ci void GetDoubleIndexedvEXT(enum target, uint index, double *params); 6245bd8deadSopenharmony_ci 6255bd8deadSopenharmony_ci void GetPointerIndexedvEXT(enum target, uint index, void **params); 6265bd8deadSopenharmony_ci 6275bd8deadSopenharmony_ci <OpenGL 3.0: New indexed generic queries (added for indexed texture 6285bd8deadSopenharmony_ci state) replace "v" for "i_v" to name and add "uint index" parameter 6295bd8deadSopenharmony_ci (to identify the texture unit) after state name parameters (if any) 6305bd8deadSopenharmony_ci and before state value parameters> 6315bd8deadSopenharmony_ci 6325bd8deadSopenharmony_ci void GetFloati_vEXT(enum pname, uint index, float *params); 6335bd8deadSopenharmony_ci void GetDoublei_vEXT(enum pname, uint index, double *params); 6345bd8deadSopenharmony_ci 6355bd8deadSopenharmony_ci void GetPointeri_vEXT(enum pname, uint index, void **params); 6365bd8deadSopenharmony_ci 6375bd8deadSopenharmony_ci <OpenGL 1.2.1: Extend the functionality of these EXT_draw_buffers2 6385bd8deadSopenharmony_ci commands and queries for multitexture> 6395bd8deadSopenharmony_ci 6405bd8deadSopenharmony_ci void EnableIndexedEXT(enum cap, uint index); 6415bd8deadSopenharmony_ci void DisableIndexedEXT(enum cap, uint index); 6425bd8deadSopenharmony_ci 6435bd8deadSopenharmony_ci boolean IsEnabledIndexedEXT(enum target, uint index); 6445bd8deadSopenharmony_ci 6455bd8deadSopenharmony_ci void GetIntegerIndexedvEXT(enum target, uint index, int *params); 6465bd8deadSopenharmony_ci void GetBooleanIndexedvEXT(enum target, uint index, 6475bd8deadSopenharmony_ci boolean *params); 6485bd8deadSopenharmony_ci 6495bd8deadSopenharmony_ci <ARB_vertex_program: New program commands and queries add "Named" 6505bd8deadSopenharmony_ci prefix to name and adds initial "uint program" parameter> 6515bd8deadSopenharmony_ci 6525bd8deadSopenharmony_ci void NamedProgramStringEXT(uint program, enum target, enum format, 6535bd8deadSopenharmony_ci sizei len, const void *string); 6545bd8deadSopenharmony_ci 6555bd8deadSopenharmony_ci void NamedProgramLocalParameter4dEXT(uint program, enum target, 6565bd8deadSopenharmony_ci uint index, 6575bd8deadSopenharmony_ci double x, double y, 6585bd8deadSopenharmony_ci double z, double w); 6595bd8deadSopenharmony_ci void NamedProgramLocalParameter4dvEXT(uint program, enum target, 6605bd8deadSopenharmony_ci uint index, 6615bd8deadSopenharmony_ci const double *params); 6625bd8deadSopenharmony_ci void NamedProgramLocalParameter4fEXT(uint program, enum target, 6635bd8deadSopenharmony_ci uint index, 6645bd8deadSopenharmony_ci float x, float y, 6655bd8deadSopenharmony_ci float z, float w); 6665bd8deadSopenharmony_ci void NamedProgramLocalParameter4fvEXT(uint program, enum target, 6675bd8deadSopenharmony_ci uint index, 6685bd8deadSopenharmony_ci const float *params); 6695bd8deadSopenharmony_ci 6705bd8deadSopenharmony_ci void GetNamedProgramLocalParameterdvEXT(uint program, enum target, 6715bd8deadSopenharmony_ci uint index, 6725bd8deadSopenharmony_ci double *params); 6735bd8deadSopenharmony_ci void GetNamedProgramLocalParameterfvEXT(uint program, enum target, 6745bd8deadSopenharmony_ci uint index, 6755bd8deadSopenharmony_ci float *params); 6765bd8deadSopenharmony_ci void GetNamedProgramivEXT(uint program, enum target, 6775bd8deadSopenharmony_ci enum pname, int *params); 6785bd8deadSopenharmony_ci void GetNamedProgramStringEXT(uint program, enum target, 6795bd8deadSopenharmony_ci enum pname, void *string); 6805bd8deadSopenharmony_ci 6815bd8deadSopenharmony_ci <OpenGL 1.3: New compressed texture object commands replace "Tex" 6825bd8deadSopenharmony_ci in name with "Texture" and add initial "uint texture" parameter> 6835bd8deadSopenharmony_ci 6845bd8deadSopenharmony_ci void CompressedTextureImage3DEXT(uint texture, enum target, int level, 6855bd8deadSopenharmony_ci enum internalformat, 6865bd8deadSopenharmony_ci sizei width, sizei height, 6875bd8deadSopenharmony_ci sizei depth, int border, 6885bd8deadSopenharmony_ci sizei imageSize, const void *data); 6895bd8deadSopenharmony_ci void CompressedTextureImage2DEXT(uint texture, enum target, int level, 6905bd8deadSopenharmony_ci enum internalformat, 6915bd8deadSopenharmony_ci sizei width, sizei height, 6925bd8deadSopenharmony_ci int border, sizei imageSize, 6935bd8deadSopenharmony_ci const void *data); 6945bd8deadSopenharmony_ci void CompressedTextureImage1DEXT(uint texture, enum target, int level, 6955bd8deadSopenharmony_ci enum internalformat, 6965bd8deadSopenharmony_ci sizei width, int border, 6975bd8deadSopenharmony_ci sizei imageSize, const void *data); 6985bd8deadSopenharmony_ci void CompressedTextureSubImage3DEXT(uint texture, enum target, int level, 6995bd8deadSopenharmony_ci int xoffset, int yoffset, 7005bd8deadSopenharmony_ci int zoffset, 7015bd8deadSopenharmony_ci sizei width, sizei height, 7025bd8deadSopenharmony_ci sizei depth, enum format, 7035bd8deadSopenharmony_ci sizei imageSize, const void *data); 7045bd8deadSopenharmony_ci void CompressedTextureSubImage2DEXT(uint texture, enum target, int level, 7055bd8deadSopenharmony_ci int xoffset, int yoffset, 7065bd8deadSopenharmony_ci sizei width, sizei height, 7075bd8deadSopenharmony_ci enum format, 7085bd8deadSopenharmony_ci sizei imageSize, const void *data); 7095bd8deadSopenharmony_ci void CompressedTextureSubImage1DEXT(uint texture, enum target, int level, 7105bd8deadSopenharmony_ci int xoffset, sizei width, 7115bd8deadSopenharmony_ci enum format, 7125bd8deadSopenharmony_ci sizei imageSize, const void *data); 7135bd8deadSopenharmony_ci 7145bd8deadSopenharmony_ci void GetCompressedTextureImageEXT(uint texture, enum target, 7155bd8deadSopenharmony_ci int level, void *img); 7165bd8deadSopenharmony_ci 7175bd8deadSopenharmony_ci <OpenGL 1.3: New multitexture compressed texture commands and queries 7185bd8deadSopenharmony_ci prefix "Multi" before "Tex" and add an initial "enum texunit" 7195bd8deadSopenharmony_ci parameter (to identify the texture unit).> 7205bd8deadSopenharmony_ci 7215bd8deadSopenharmony_ci void CompressedMultiTexImage3DEXT(enum texunit, enum target, int level, 7225bd8deadSopenharmony_ci enum internalformat, 7235bd8deadSopenharmony_ci sizei width, sizei height, 7245bd8deadSopenharmony_ci sizei depth, int border, 7255bd8deadSopenharmony_ci sizei imageSize, const void *data); 7265bd8deadSopenharmony_ci void CompressedMultiTexImage2DEXT(enum texunit, enum target, int level, 7275bd8deadSopenharmony_ci enum internalformat, 7285bd8deadSopenharmony_ci sizei width, sizei height, 7295bd8deadSopenharmony_ci int border, sizei imageSize, 7305bd8deadSopenharmony_ci const void *data); 7315bd8deadSopenharmony_ci void CompressedMultiTexImage1DEXT(enum texunit, enum target, int level, 7325bd8deadSopenharmony_ci enum internalformat, 7335bd8deadSopenharmony_ci sizei width, int border, 7345bd8deadSopenharmony_ci sizei imageSize, const void *data); 7355bd8deadSopenharmony_ci void CompressedMultiTexSubImage3DEXT(enum texunit, enum target, int level, 7365bd8deadSopenharmony_ci int xoffset, int yoffset, 7375bd8deadSopenharmony_ci int zoffset, 7385bd8deadSopenharmony_ci sizei width, sizei height, 7395bd8deadSopenharmony_ci sizei depth, enum format, 7405bd8deadSopenharmony_ci sizei imageSize, const void *data); 7415bd8deadSopenharmony_ci void CompressedMultiTexSubImage2DEXT(enum texunit, enum target, int level, 7425bd8deadSopenharmony_ci int xoffset, int yoffset, 7435bd8deadSopenharmony_ci sizei width, sizei height, 7445bd8deadSopenharmony_ci enum format, 7455bd8deadSopenharmony_ci sizei imageSize, const void *data); 7465bd8deadSopenharmony_ci void CompressedMultiTexSubImage1DEXT(enum texunit, enum target, int level, 7475bd8deadSopenharmony_ci int xoffset, sizei width, 7485bd8deadSopenharmony_ci enum format, 7495bd8deadSopenharmony_ci sizei imageSize, const void *data); 7505bd8deadSopenharmony_ci 7515bd8deadSopenharmony_ci void GetCompressedMultiTexImageEXT(enum texunit, enum target, 7525bd8deadSopenharmony_ci int level, void *img); 7535bd8deadSopenharmony_ci 7545bd8deadSopenharmony_ci <OpenGL 1.3: New transpose matrix commands add "Matrix" suffix 7555bd8deadSopenharmony_ci to name, drops "Matrix" suffix from name, and add initial "enum 7565bd8deadSopenharmony_ci matrixMode" parameter> 7575bd8deadSopenharmony_ci 7585bd8deadSopenharmony_ci void MatrixLoadTransposefEXT(enum matrixMode, const float *m); 7595bd8deadSopenharmony_ci void MatrixLoadTransposedEXT(enum matrixMode, const double *m); 7605bd8deadSopenharmony_ci 7615bd8deadSopenharmony_ci void MatrixMultTransposefEXT(enum matrixMode, const float *m); 7625bd8deadSopenharmony_ci void MatrixMultTransposedEXT(enum matrixMode, const double *m); 7635bd8deadSopenharmony_ci 7645bd8deadSopenharmony_ci <OpenGL 1.5: New buffer commands and queries replace "Buffer" with 7655bd8deadSopenharmony_ci "NamedBuffer" in name and replace "enum target" parameter with 7665bd8deadSopenharmony_ci "uint buffer"> 7675bd8deadSopenharmony_ci 7685bd8deadSopenharmony_ci void NamedBufferDataEXT(uint buffer, sizeiptr size, 7695bd8deadSopenharmony_ci const void *data, enum usage); 7705bd8deadSopenharmony_ci void NamedBufferSubDataEXT(uint buffer, intptr offset, 7715bd8deadSopenharmony_ci sizeiptr size, const void *data); 7725bd8deadSopenharmony_ci void* MapNamedBufferEXT(uint buffer, enum access); 7735bd8deadSopenharmony_ci boolean UnmapNamedBufferEXT(uint buffer); 7745bd8deadSopenharmony_ci void GetNamedBufferParameterivEXT(uint buffer, 7755bd8deadSopenharmony_ci enum pname, int *params); 7765bd8deadSopenharmony_ci void GetNamedBufferPointervEXT(uint buffer, 7775bd8deadSopenharmony_ci enum pname, void* *params); 7785bd8deadSopenharmony_ci void GetNamedBufferSubDataEXT(uint buffer, 7795bd8deadSopenharmony_ci intptr offset, sizeiptr size, void *data); 7805bd8deadSopenharmony_ci 7815bd8deadSopenharmony_ci <OpenGL 2.0: New uniform commands add "Program" prefix to name and 7825bd8deadSopenharmony_ci add initial "uint program" parameter> 7835bd8deadSopenharmony_ci 7845bd8deadSopenharmony_ci void ProgramUniform1fEXT(uint program, int location, float v0); 7855bd8deadSopenharmony_ci void ProgramUniform2fEXT(uint program, int location, 7865bd8deadSopenharmony_ci float v0, float v1); 7875bd8deadSopenharmony_ci void ProgramUniform3fEXT(uint program, int location, 7885bd8deadSopenharmony_ci float v0, float v1, float v2); 7895bd8deadSopenharmony_ci void ProgramUniform4fEXT(uint program, int location, 7905bd8deadSopenharmony_ci float v0, float v1, float v2, float v3); 7915bd8deadSopenharmony_ci 7925bd8deadSopenharmony_ci void ProgramUniform1iEXT(uint program, int location, int v0); 7935bd8deadSopenharmony_ci void ProgramUniform2iEXT(uint program, int location, 7945bd8deadSopenharmony_ci int v0, int v1); 7955bd8deadSopenharmony_ci void ProgramUniform3iEXT(uint program, int location, 7965bd8deadSopenharmony_ci int v0, int v1, int v2); 7975bd8deadSopenharmony_ci void ProgramUniform4iEXT(uint program, int location, 7985bd8deadSopenharmony_ci int v0, int v1, int v2, int v3); 7995bd8deadSopenharmony_ci 8005bd8deadSopenharmony_ci void ProgramUniform1fvEXT(uint program, int location, 8015bd8deadSopenharmony_ci sizei count, const float *value); 8025bd8deadSopenharmony_ci void ProgramUniform2fvEXT(uint program, int location, 8035bd8deadSopenharmony_ci sizei count, const float *value); 8045bd8deadSopenharmony_ci void ProgramUniform3fvEXT(uint program, int location, 8055bd8deadSopenharmony_ci sizei count, const float *value); 8065bd8deadSopenharmony_ci void ProgramUniform4fvEXT(uint program, int location, 8075bd8deadSopenharmony_ci sizei count, const float *value); 8085bd8deadSopenharmony_ci 8095bd8deadSopenharmony_ci void ProgramUniform1ivEXT(uint program, int location, 8105bd8deadSopenharmony_ci sizei count, const int *value); 8115bd8deadSopenharmony_ci void ProgramUniform2ivEXT(uint program, int location, 8125bd8deadSopenharmony_ci sizei count, const int *value); 8135bd8deadSopenharmony_ci void ProgramUniform3ivEXT(uint program, int location, 8145bd8deadSopenharmony_ci sizei count, const int *value); 8155bd8deadSopenharmony_ci void ProgramUniform4ivEXT(uint program, int location, 8165bd8deadSopenharmony_ci sizei count, const int *value); 8175bd8deadSopenharmony_ci 8185bd8deadSopenharmony_ci void ProgramUniformMatrix2fvEXT(uint program, int location, 8195bd8deadSopenharmony_ci sizei count, boolean transpose, 8205bd8deadSopenharmony_ci const float *value); 8215bd8deadSopenharmony_ci void ProgramUniformMatrix3fvEXT(uint program, int location, 8225bd8deadSopenharmony_ci sizei count, boolean transpose, 8235bd8deadSopenharmony_ci const float *value); 8245bd8deadSopenharmony_ci void ProgramUniformMatrix4fvEXT(uint program, int location, 8255bd8deadSopenharmony_ci sizei count, boolean transpose, 8265bd8deadSopenharmony_ci const float *value); 8275bd8deadSopenharmony_ci 8285bd8deadSopenharmony_ci <OpenGL 2.1: New uniform matrix commands add "Program" prefix to 8295bd8deadSopenharmony_ci name and add initial "uint program" parameter> 8305bd8deadSopenharmony_ci 8315bd8deadSopenharmony_ci void ProgramUniformMatrix2x3fvEXT(uint program, int location, 8325bd8deadSopenharmony_ci sizei count, boolean transpose, 8335bd8deadSopenharmony_ci const float *value); 8345bd8deadSopenharmony_ci void ProgramUniformMatrix3x2fvEXT(uint program, int location, 8355bd8deadSopenharmony_ci sizei count, boolean transpose, 8365bd8deadSopenharmony_ci const float *value); 8375bd8deadSopenharmony_ci void ProgramUniformMatrix2x4fvEXT(uint program, int location, 8385bd8deadSopenharmony_ci sizei count, boolean transpose, 8395bd8deadSopenharmony_ci const float *value); 8405bd8deadSopenharmony_ci void ProgramUniformMatrix4x2fvEXT(uint program, int location, 8415bd8deadSopenharmony_ci sizei count, boolean transpose, 8425bd8deadSopenharmony_ci const float *value); 8435bd8deadSopenharmony_ci void ProgramUniformMatrix3x4fvEXT(uint program, int location, 8445bd8deadSopenharmony_ci sizei count, boolean transpose, 8455bd8deadSopenharmony_ci const float *value); 8465bd8deadSopenharmony_ci void ProgramUniformMatrix4x3fvEXT(uint program, int location, 8475bd8deadSopenharmony_ci sizei count, boolean transpose, 8485bd8deadSopenharmony_ci const float *value); 8495bd8deadSopenharmony_ci 8505bd8deadSopenharmony_ci <EXT_texture_buffer_object: New texture buffer object command 8515bd8deadSopenharmony_ci replaces "Tex" in name with "Texture" and adds initial "uint texture" 8525bd8deadSopenharmony_ci parameter> 8535bd8deadSopenharmony_ci 8545bd8deadSopenharmony_ci void TextureBufferEXT(uint texture, enum target, 8555bd8deadSopenharmony_ci enum internalformat, uint buffer); 8565bd8deadSopenharmony_ci 8575bd8deadSopenharmony_ci <EXT_texture_buffer_object: New multitexture texture buffer command 8585bd8deadSopenharmony_ci prefixes "Multi" before "Tex" and add an initial "enum texunit" 8595bd8deadSopenharmony_ci parameter (to identify the texture unit).> 8605bd8deadSopenharmony_ci 8615bd8deadSopenharmony_ci void MultiTexBufferEXT(enum texunit, enum target, 8625bd8deadSopenharmony_ci enum internalformat, uint buffer); 8635bd8deadSopenharmony_ci 8645bd8deadSopenharmony_ci <EXT_texture_integer: New integer texture object commands and queries 8655bd8deadSopenharmony_ci replace "Tex" in name with "Texture" and add initial "uint texture" 8665bd8deadSopenharmony_ci parameter> 8675bd8deadSopenharmony_ci 8685bd8deadSopenharmony_ci void TextureParameterIivEXT(uint texture, enum target, 8695bd8deadSopenharmony_ci enum pname, const int *params); 8705bd8deadSopenharmony_ci void TextureParameterIuivEXT(uint texture, enum target, 8715bd8deadSopenharmony_ci enum pname, const uint *params); 8725bd8deadSopenharmony_ci 8735bd8deadSopenharmony_ci void GetTextureParameterIivEXT(uint texture, enum target, 8745bd8deadSopenharmony_ci enum pname, int *params); 8755bd8deadSopenharmony_ci void GetTextureParameterIuivEXT(uint texture, enum target, 8765bd8deadSopenharmony_ci enum pname, uint *params); 8775bd8deadSopenharmony_ci 8785bd8deadSopenharmony_ci <EXT_texture_integer: New multitexture integer texture commands and 8795bd8deadSopenharmony_ci queries prefix "Multi" before "Tex" and add an initial "enum texunit" 8805bd8deadSopenharmony_ci parameter (to identify the texture unit).> 8815bd8deadSopenharmony_ci 8825bd8deadSopenharmony_ci void MultiTexParameterIivEXT(enum texunit, enum target, 8835bd8deadSopenharmony_ci enum pname, const int *params); 8845bd8deadSopenharmony_ci void MultiTexParameterIuivEXT(enum texunit, enum target, 8855bd8deadSopenharmony_ci enum pname, const uint *params); 8865bd8deadSopenharmony_ci 8875bd8deadSopenharmony_ci void GetMultiTexParameterIivEXT(enum texunit, enum target, 8885bd8deadSopenharmony_ci enum pname, int *params); 8895bd8deadSopenharmony_ci void GetMultiTexParameterIuivEXT(enum texunit, enum target, 8905bd8deadSopenharmony_ci enum pname, uint *params); 8915bd8deadSopenharmony_ci 8925bd8deadSopenharmony_ci <EXT_gpu_shader4: New integer uniform commands add "Program" prefix 8935bd8deadSopenharmony_ci to name and add initial "uint program" parameter> 8945bd8deadSopenharmony_ci 8955bd8deadSopenharmony_ci void ProgramUniform1uiEXT(uint program, int location, uint v0); 8965bd8deadSopenharmony_ci void ProgramUniform2uiEXT(uint program, int location, 8975bd8deadSopenharmony_ci uint v0, uint v1); 8985bd8deadSopenharmony_ci void ProgramUniform3uiEXT(uint program, int location, 8995bd8deadSopenharmony_ci uint v0, uint v1, uint v2); 9005bd8deadSopenharmony_ci void ProgramUniform4uiEXT(uint program, int location, 9015bd8deadSopenharmony_ci uint v0, uint v1, uint v2, uint v3); 9025bd8deadSopenharmony_ci 9035bd8deadSopenharmony_ci void ProgramUniform1uivEXT(uint program, int location, 9045bd8deadSopenharmony_ci sizei count, const uint *value); 9055bd8deadSopenharmony_ci void ProgramUniform2uivEXT(uint program, int location, 9065bd8deadSopenharmony_ci sizei count, const uint *value); 9075bd8deadSopenharmony_ci void ProgramUniform3uivEXT(uint program, int location, 9085bd8deadSopenharmony_ci sizei count, const uint *value); 9095bd8deadSopenharmony_ci void ProgramUniform4uivEXT(uint program, int location, 9105bd8deadSopenharmony_ci sizei count, const uint *value); 9115bd8deadSopenharmony_ci 9125bd8deadSopenharmony_ci <EXT_gpu_program_parameters: New program command adds "Named" prefix 9135bd8deadSopenharmony_ci to name and adds "uint program" parameter> 9145bd8deadSopenharmony_ci 9155bd8deadSopenharmony_ci void NamedProgramLocalParameters4fvEXT(uint program, enum target, 9165bd8deadSopenharmony_ci uint index, sizei count, 9175bd8deadSopenharmony_ci const float *params); 9185bd8deadSopenharmony_ci 9195bd8deadSopenharmony_ci <NV_gpu_program4: New program commands and queries add "Named" 9205bd8deadSopenharmony_ci prefix to name and replace "enum target" with "uint program"> 9215bd8deadSopenharmony_ci 9225bd8deadSopenharmony_ci void NamedProgramLocalParameterI4iEXT(uint program, enum target, 9235bd8deadSopenharmony_ci uint index, 9245bd8deadSopenharmony_ci int x, int y, 9255bd8deadSopenharmony_ci int z, int w); 9265bd8deadSopenharmony_ci void NamedProgramLocalParameterI4ivEXT(uint program, enum target, 9275bd8deadSopenharmony_ci uint index, 9285bd8deadSopenharmony_ci const int *params); 9295bd8deadSopenharmony_ci void NamedProgramLocalParametersI4ivEXT(uint program, enum target, 9305bd8deadSopenharmony_ci uint index, sizei count, 9315bd8deadSopenharmony_ci const int *params); 9325bd8deadSopenharmony_ci void NamedProgramLocalParameterI4uiEXT(uint program, enum target, 9335bd8deadSopenharmony_ci uint index, 9345bd8deadSopenharmony_ci uint x, uint y, 9355bd8deadSopenharmony_ci uint z, uint w); 9365bd8deadSopenharmony_ci void NamedProgramLocalParameterI4uivEXT(uint program, enum target, 9375bd8deadSopenharmony_ci uint index, 9385bd8deadSopenharmony_ci const uint *params); 9395bd8deadSopenharmony_ci void NamedProgramLocalParametersI4uivEXT(uint program, enum target, 9405bd8deadSopenharmony_ci uint index, sizei count, 9415bd8deadSopenharmony_ci const uint *params); 9425bd8deadSopenharmony_ci 9435bd8deadSopenharmony_ci void GetNamedProgramLocalParameterIivEXT(uint program, enum target, 9445bd8deadSopenharmony_ci uint index, 9455bd8deadSopenharmony_ci int *params); 9465bd8deadSopenharmony_ci void GetNamedProgramLocalParameterIuivEXT(uint program, enum target, 9475bd8deadSopenharmony_ci uint index, 9485bd8deadSopenharmony_ci uint *params); 9495bd8deadSopenharmony_ci 9505bd8deadSopenharmony_ci <OpenGL 3.0: New renderbuffer commands add "Named" prefix to name 9515bd8deadSopenharmony_ci and replace "enum target" with "uint renderbuffer"> 9525bd8deadSopenharmony_ci 9535bd8deadSopenharmony_ci void NamedRenderbufferStorageEXT(uint renderbuffer, 9545bd8deadSopenharmony_ci enum internalformat, 9555bd8deadSopenharmony_ci sizei width, sizei height); 9565bd8deadSopenharmony_ci 9575bd8deadSopenharmony_ci void GetNamedRenderbufferParameterivEXT(uint renderbuffer, 9585bd8deadSopenharmony_ci enum pname, int *params); 9595bd8deadSopenharmony_ci 9605bd8deadSopenharmony_ci <OpenGL 3.0: New renderbuffer commands add "Named" 9615bd8deadSopenharmony_ci prefix to name and replace "enum target" with "uint renderbuffer"> 9625bd8deadSopenharmony_ci 9635bd8deadSopenharmony_ci void NamedRenderbufferStorageMultisampleEXT(uint renderbuffer, 9645bd8deadSopenharmony_ci sizei samples, 9655bd8deadSopenharmony_ci enum internalformat, 9665bd8deadSopenharmony_ci sizei width, sizei height); 9675bd8deadSopenharmony_ci 9685bd8deadSopenharmony_ci <NV_framebuffer_multisample_coverage: New renderbuffer commands 9695bd8deadSopenharmony_ci add "Named" prefix to name and replace "enum target" with "uint 9705bd8deadSopenharmony_ci renderbuffer"> 9715bd8deadSopenharmony_ci 9725bd8deadSopenharmony_ci void NamedRenderbufferStorageMultisampleCoverageEXT(uint renderbuffer, 9735bd8deadSopenharmony_ci sizei coverageSamples, 9745bd8deadSopenharmony_ci sizei colorSamples, 9755bd8deadSopenharmony_ci enum internalformat, 9765bd8deadSopenharmony_ci sizei width, 9775bd8deadSopenharmony_ci sizei height); 9785bd8deadSopenharmony_ci 9795bd8deadSopenharmony_ci <OpenGL 3.0: New framebuffer commands add "Named" prefix to name 9805bd8deadSopenharmony_ci and replace "enum target" with "uint framebuffer"> 9815bd8deadSopenharmony_ci 9825bd8deadSopenharmony_ci enum CheckNamedFramebufferStatusEXT(uint framebuffer, 9835bd8deadSopenharmony_ci enum target); 9845bd8deadSopenharmony_ci 9855bd8deadSopenharmony_ci void NamedFramebufferTexture1DEXT(uint framebuffer, 9865bd8deadSopenharmony_ci enum attachment, 9875bd8deadSopenharmony_ci enum textarget, uint texture, 9885bd8deadSopenharmony_ci int level); 9895bd8deadSopenharmony_ci void NamedFramebufferTexture2DEXT(uint framebuffer, 9905bd8deadSopenharmony_ci enum attachment, 9915bd8deadSopenharmony_ci enum textarget, uint texture, 9925bd8deadSopenharmony_ci int level); 9935bd8deadSopenharmony_ci void NamedFramebufferTexture3DEXT(uint framebuffer, 9945bd8deadSopenharmony_ci enum attachment, 9955bd8deadSopenharmony_ci enum textarget, uint texture, 9965bd8deadSopenharmony_ci int level, int zoffset); 9975bd8deadSopenharmony_ci 9985bd8deadSopenharmony_ci void NamedFramebufferRenderbufferEXT(uint framebuffer, 9995bd8deadSopenharmony_ci enum attachment, 10005bd8deadSopenharmony_ci enum renderbuffertarget, 10015bd8deadSopenharmony_ci uint renderbuffer); 10025bd8deadSopenharmony_ci 10035bd8deadSopenharmony_ci void GetNamedFramebufferAttachmentParameterivEXT(uint framebuffer, 10045bd8deadSopenharmony_ci enum attachment, 10055bd8deadSopenharmony_ci enum pname, 10065bd8deadSopenharmony_ci int *params); 10075bd8deadSopenharmony_ci 10085bd8deadSopenharmony_ci <OpenGL 3.0: New texture commands add "Texture" within name and 10095bd8deadSopenharmony_ci replace "enum target" with "uint texture"> 10105bd8deadSopenharmony_ci 10115bd8deadSopenharmony_ci void GenerateTextureMipmapEXT(uint texture, enum target); 10125bd8deadSopenharmony_ci 10135bd8deadSopenharmony_ci <OpenGL 3.0: New texture commands add "MultiTex" within name and 10145bd8deadSopenharmony_ci replace "enum target" with "enum texunit"> 10155bd8deadSopenharmony_ci 10165bd8deadSopenharmony_ci void GenerateMultiTexMipmapEXT(enum texunit, enum target); 10175bd8deadSopenharmony_ci 10185bd8deadSopenharmony_ci <OpenGL 3.0: New framebuffer commands> 10195bd8deadSopenharmony_ci 10205bd8deadSopenharmony_ci void FramebufferDrawBufferEXT(uint framebuffer, enum mode); 10215bd8deadSopenharmony_ci void FramebufferDrawBuffersEXT(uint framebuffer, sizei n, 10225bd8deadSopenharmony_ci const enum *bufs) 10235bd8deadSopenharmony_ci void FramebufferReadBufferEXT(uint framebuffer, enum mode); 10245bd8deadSopenharmony_ci 10255bd8deadSopenharmony_ci <OpenGL 3.0: New framebuffer query> 10265bd8deadSopenharmony_ci 10275bd8deadSopenharmony_ci void GetFramebufferParameterivEXT(uint framebuffer, enum pname, 10285bd8deadSopenharmony_ci int *param); 10295bd8deadSopenharmony_ci 10305bd8deadSopenharmony_ci <OpenGL 3.0: New buffer data copy command> 10315bd8deadSopenharmony_ci void NamedCopyBufferSubDataEXT(uint readBuffer, uint writeBuffer, 10325bd8deadSopenharmony_ci intptr readOffset, intptr writeOffset, 10335bd8deadSopenharmony_ci sizeiptr size); 10345bd8deadSopenharmony_ci 10355bd8deadSopenharmony_ci <EXT_geometry_shader4 or NV_gpu_program4: New framebuffer commands 10365bd8deadSopenharmony_ci add "Named" prefix to name and replace "enum target" with "uint 10375bd8deadSopenharmony_ci framebuffer"> 10385bd8deadSopenharmony_ci 10395bd8deadSopenharmony_ci void NamedFramebufferTextureEXT(uint framebuffer, enum attachment, 10405bd8deadSopenharmony_ci uint texture, int level); 10415bd8deadSopenharmony_ci void NamedFramebufferTextureLayerEXT(uint framebuffer, 10425bd8deadSopenharmony_ci enum attachment, 10435bd8deadSopenharmony_ci uint texture, 10445bd8deadSopenharmony_ci int level, int layer); 10455bd8deadSopenharmony_ci void NamedFramebufferTextureFaceEXT(uint framebuffer, enum attachment, 10465bd8deadSopenharmony_ci uint texture, 10475bd8deadSopenharmony_ci int level, enum face); 10485bd8deadSopenharmony_ci 10495bd8deadSopenharmony_ci <NV_explicit_multisample: New texture renderbuffer object command 10505bd8deadSopenharmony_ci replaces "Tex" in name with "Texture" and add initial "uint texture" 10515bd8deadSopenharmony_ci parameter> 10525bd8deadSopenharmony_ci 10535bd8deadSopenharmony_ci void TextureRenderbufferEXT(uint texture, enum target, 10545bd8deadSopenharmony_ci uint renderbuffer); 10555bd8deadSopenharmony_ci 10565bd8deadSopenharmony_ci <NV_explicit_multisample: New multitexture texture renderbuffer command 10575bd8deadSopenharmony_ci prefixes "Multi" before "Tex" and add an initial "enum texunit" 10585bd8deadSopenharmony_ci parameter (to identify the texture unit)> 10595bd8deadSopenharmony_ci 10605bd8deadSopenharmony_ci void MultiTexRenderbufferEXT(enum texunit, enum target, 10615bd8deadSopenharmony_ci uint renderbuffer); 10625bd8deadSopenharmony_ci 10635bd8deadSopenharmony_ci <OpenGL 3.0: New vertex array specification commands for vertex 10645bd8deadSopenharmony_ci array objects prefix "VertexArray", add initial "uint vaobj" and 10655bd8deadSopenharmony_ci "uint buffer" parameters, change "Pointer" suffix to "Offset", 10665bd8deadSopenharmony_ci and change the final parameter from "const void *" to "intptr offset"> 10675bd8deadSopenharmony_ci 10685bd8deadSopenharmony_ci void VertexArrayVertexOffsetEXT(uint vaobj, uint buffer, 10695bd8deadSopenharmony_ci int size, enum type, sizei stride, 10705bd8deadSopenharmony_ci intptr offset); 10715bd8deadSopenharmony_ci void VertexArrayColorOffsetEXT(uint vaobj, uint buffer, 10725bd8deadSopenharmony_ci int size, enum type, sizei stride, 10735bd8deadSopenharmony_ci intptr offset); 10745bd8deadSopenharmony_ci void VertexArrayEdgeFlagOffsetEXT(uint vaobj, uint buffer, 10755bd8deadSopenharmony_ci sizei stride, intptr offset); 10765bd8deadSopenharmony_ci void VertexArrayIndexOffsetEXT(uint vaobj, uint buffer, 10775bd8deadSopenharmony_ci enum type, sizei stride, 10785bd8deadSopenharmony_ci intptr offset); 10795bd8deadSopenharmony_ci void VertexArrayNormalOffsetEXT(uint vaobj, uint buffer, 10805bd8deadSopenharmony_ci enum type, sizei stride, 10815bd8deadSopenharmony_ci intptr offset); 10825bd8deadSopenharmony_ci void VertexArrayTexCoordOffsetEXT(uint vaobj, uint buffer, 10835bd8deadSopenharmony_ci int size, enum type, sizei stride, 10845bd8deadSopenharmony_ci intptr offset); 10855bd8deadSopenharmony_ci void VertexArrayMultiTexCoordOffsetEXT(uint vaobj, uint buffer, 10865bd8deadSopenharmony_ci enum texunit, 10875bd8deadSopenharmony_ci int size, enum type, sizei stride, 10885bd8deadSopenharmony_ci intptr offset); 10895bd8deadSopenharmony_ci void VertexArrayFogCoordOffsetEXT(uint vaobj, uint buffer, 10905bd8deadSopenharmony_ci enum type, sizei stride, 10915bd8deadSopenharmony_ci intptr offset); 10925bd8deadSopenharmony_ci void VertexArraySecondaryColorOffsetEXT(uint vaobj, uint buffer, 10935bd8deadSopenharmony_ci int size, enum type, 10945bd8deadSopenharmony_ci sizei stride, intptr offset); 10955bd8deadSopenharmony_ci void VertexArrayVertexAttribOffsetEXT(uint vaobj, uint buffer, 10965bd8deadSopenharmony_ci uint index, int size, 10975bd8deadSopenharmony_ci enum type, boolean normalized, 10985bd8deadSopenharmony_ci sizei stride, intptr offset); 10995bd8deadSopenharmony_ci void VertexArrayVertexAttribIOffsetEXT(uint vaobj, uint buffer, 11005bd8deadSopenharmony_ci uint index, int size, 11015bd8deadSopenharmony_ci enum type, sizei stride, 11025bd8deadSopenharmony_ci intptr offset); 11035bd8deadSopenharmony_ci 11045bd8deadSopenharmony_ci <OpenGL 3.0: New vertex array enable commands for vertex array 11055bd8deadSopenharmony_ci objects change "ClientState" to "VertexArray" and add an initial 11065bd8deadSopenharmony_ci "uint vaobj" parameter> 11075bd8deadSopenharmony_ci 11085bd8deadSopenharmony_ci void EnableVertexArrayEXT(uint vaobj, enum array); 11095bd8deadSopenharmony_ci void DisableVertexArrayEXT(uint vaobj, enum array); 11105bd8deadSopenharmony_ci 11115bd8deadSopenharmony_ci <OpenGL 3.0: New vertex attrib array enable commands for vertex 11125bd8deadSopenharmony_ci array objects change "VertexAttribArray" to "VertexArrayAttrib" 11135bd8deadSopenharmony_ci and add an initial "uint vaobj" parameter> 11145bd8deadSopenharmony_ci 11155bd8deadSopenharmony_ci void EnableVertexArrayAttribEXT(uint vaobj, uint index); 11165bd8deadSopenharmony_ci void DisableVertexArrayAttribEXT(uint vaobj, uint index); 11175bd8deadSopenharmony_ci 11185bd8deadSopenharmony_ci <OpenGL 3.0: New queries for vertex array objects> 11195bd8deadSopenharmony_ci 11205bd8deadSopenharmony_ci void GetVertexArrayIntegervEXT(uint vaobj, enum pname, 11215bd8deadSopenharmony_ci int *param); 11225bd8deadSopenharmony_ci void GetVertexArrayPointervEXT(uint vaobj, enum pname, 11235bd8deadSopenharmony_ci void **param); 11245bd8deadSopenharmony_ci void GetVertexArrayIntegeri_vEXT(uint vaobj, 11255bd8deadSopenharmony_ci uint index, 11265bd8deadSopenharmony_ci enum pname, 11275bd8deadSopenharmony_ci int *param); 11285bd8deadSopenharmony_ci void GetVertexArrayPointeri_vEXT(uint vaobj, 11295bd8deadSopenharmony_ci uint index, 11305bd8deadSopenharmony_ci enum pname, 11315bd8deadSopenharmony_ci void **param); 11325bd8deadSopenharmony_ci 11335bd8deadSopenharmony_ci <OpenGL 3.0: New buffer commands replace "Buffer" with "NamedBuffer" 11345bd8deadSopenharmony_ci in name and replace "enum target" parameter with "uint buffer"> 11355bd8deadSopenharmony_ci 11365bd8deadSopenharmony_ci void *MapNamedBufferRangeEXT(uint buffer, intptr offset, 11375bd8deadSopenharmony_ci sizeiptr length, bitfield access); 11385bd8deadSopenharmony_ci void FlushMappedNamedBufferRangeEXT(uint buffer, intptr offset, 11395bd8deadSopenharmony_ci sizeiptr length); 11405bd8deadSopenharmony_ci 11415bd8deadSopenharmony_ciNew Tokens 11425bd8deadSopenharmony_ci 11435bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetBooleanIndexedvEXT, 11445bd8deadSopenharmony_ci GetIntegerIndexedvEXT, GetFloatIndexedvEXT, GetDoubleIndexedvEXT: 11455bd8deadSopenharmony_ci GetBooleani_v, GetIntegeri_v, GetFloati_vEXT, GetDoublei_vEXT: 11465bd8deadSopenharmony_ci 11475bd8deadSopenharmony_ci PROGRAM_MATRIX_EXT 0x8E2D 11485bd8deadSopenharmony_ci TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E 11495bd8deadSopenharmony_ci PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F 11505bd8deadSopenharmony_ci 11515bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.0 Specification (OpenGL Operation) 11525bd8deadSopenharmony_ci 11535bd8deadSopenharmony_ci Insert the following after the 2nd sentence in the 4th paragraph in 11545bd8deadSopenharmony_ci Section 2.5 (Errors): 11555bd8deadSopenharmony_ci 11565bd8deadSopenharmony_ci "Certain commands and queries provide direct state 11575bd8deadSopenharmony_ci access to named objects (such as TextureParameteriEXT, 11585bd8deadSopenharmony_ci NamedProgramLocalParameter4dEXT, NamedRenderbufferStorageEXT, 11595bd8deadSopenharmony_ci NamedFramebufferTexture2DEXT, GetTextureImageEXT, etc.) and perform 11605bd8deadSopenharmony_ci implicit object initialization when provided unused object names. 11615bd8deadSopenharmony_ci When these commands and queries are given an object name not 11625bd8deadSopenharmony_ci currently used, these commands and queries will first (prior to 11635bd8deadSopenharmony_ci any further error checking) make the name used and appropriately 11645bd8deadSopenharmony_ci initialize the named object to a new object state vector. After this 11655bd8deadSopenharmony_ci object initialization for unused names takes place, the command may 11665bd8deadSopenharmony_ci subsequently generate an error. In this case, the command's state 11675bd8deadSopenharmony_ci update or query's result is ignored, but the name still becomes used 11685bd8deadSopenharmony_ci and the object initialization still takes place." 11695bd8deadSopenharmony_ci 11705bd8deadSopenharmony_ci Add after the paragraph describing EnableClientState in Section 2.8 11715bd8deadSopenharmony_ci (Vertex Arrays): 11725bd8deadSopenharmony_ci 11735bd8deadSopenharmony_ci "The following commands: 11745bd8deadSopenharmony_ci 11755bd8deadSopenharmony_ci void EnableClientStateIndexedEXT(enum array, uint index); 11765bd8deadSopenharmony_ci void DisableClientStateIndexedEXT(enum array, uint index); 11775bd8deadSopenharmony_ci void EnableClientStateiEXT(enum array, uint index); 11785bd8deadSopenharmony_ci void DisableClientStateiEXT(enum array, uint index); 11795bd8deadSopenharmony_ci 11805bd8deadSopenharmony_ci are equivalent (assuming no errors) to the following: 11815bd8deadSopenharmony_ci 11825bd8deadSopenharmony_ci if (array == TEXTURE_COORD_ARRAY) { 11835bd8deadSopenharmony_ci int savedClientActiveTexture; 11845bd8deadSopenharmony_ci 11855bd8deadSopenharmony_ci GetIntegerv(CLIENT_ACTIVE_TEXTURE, &savedClientActiveTexture); 11865bd8deadSopenharmony_ci ClientActiveTexture(TEXTURE0+index); 11875bd8deadSopenharmony_ci XXX(array); 11885bd8deadSopenharmony_ci ClientActiveTexture(savedActiveTexture); 11895bd8deadSopenharmony_ci } else { 11905bd8deadSopenharmony_ci // Invalid enum 11915bd8deadSopenharmony_ci } 11925bd8deadSopenharmony_ci 11935bd8deadSopenharmony_ci where index is the index parameter to the listed commands and XXX is 11945bd8deadSopenharmony_ci the name of the command without its "Indexed" or "i" suffix (either 11955bd8deadSopenharmony_ci EnableClientState or DisableClientState). The error INVALID_VALUE 11965bd8deadSopenharmony_ci is generated if index is greater or equal to the implementation's 11975bd8deadSopenharmony_ci NUM_TEXTURE_COORDS value. The error INVALID_ENUM is generated if 11985bd8deadSopenharmony_ci array is not TEXTURE_COORD_ARRAY." 11995bd8deadSopenharmony_ci 12005bd8deadSopenharmony_ci Add before the last paragraph in Section 2.8 (Vertex Arrays): 12015bd8deadSopenharmony_ci 12025bd8deadSopenharmony_ci "The following command: 12035bd8deadSopenharmony_ci 12045bd8deadSopenharmony_ci void MultiTexCoordPointerEXT(enum texunit, int size, enum type, 12055bd8deadSopenharmony_ci sizei stride, const void *pointer); 12065bd8deadSopenharmony_ci 12075bd8deadSopenharmony_ci is equivalent (assuming no errors) to the following: 12085bd8deadSopenharmony_ci 12095bd8deadSopenharmony_ci int savedClientActiveTexture; 12105bd8deadSopenharmony_ci 12115bd8deadSopenharmony_ci GetIntegerv(CLIENT_ACTIVE_TEXTURE, &savedClientActiveTexture); 12125bd8deadSopenharmony_ci ClientActiveTexture(texunit); 12135bd8deadSopenharmony_ci TexCoordPointer(...); 12145bd8deadSopenharmony_ci ClientActiveTexture(savedActiveTexture); 12155bd8deadSopenharmony_ci 12165bd8deadSopenharmony_ci where ... is the list of the arguments for the command excluding 12175bd8deadSopenharmony_ci the index parameter." 12185bd8deadSopenharmony_ci 12195bd8deadSopenharmony_ci Add to the end of section 2.9 (Buffer Objects), before section 2.9.1 12205bd8deadSopenharmony_ci (Vertex Arrays in Buffer Objects): 12215bd8deadSopenharmony_ci 12225bd8deadSopenharmony_ci "The following commands: 12235bd8deadSopenharmony_ci 12245bd8deadSopenharmony_ci void NamedBufferDataEXT(uint buffer, sizeiptr size, 12255bd8deadSopenharmony_ci const void *data, enum usage); 12265bd8deadSopenharmony_ci void NamedBufferSubDataEXT(uint buffer, intptr offset, 12275bd8deadSopenharmony_ci sizeiptr size, const void *data); 12285bd8deadSopenharmony_ci void* MapNamedBufferEXT(uint buffer, enum access); 12295bd8deadSopenharmony_ci boolean UnmapNamedBufferEXT(uint buffer); 12305bd8deadSopenharmony_ci void *MapNamedBufferRangeEXT(uint buffer, intptr offset, 12315bd8deadSopenharmony_ci sizeiptr length, bitfield access); 12325bd8deadSopenharmony_ci void FlushMappedNamedBufferRangeEXT(uint buffer, intptr offset, 12335bd8deadSopenharmony_ci sizeiptr length); 12345bd8deadSopenharmony_ci void NamedCopyBufferSubDataEXT(uint readBuffer, uint writeBuffer, 12355bd8deadSopenharmony_ci intptr readOffset, intptr writeOffset, 12365bd8deadSopenharmony_ci sizeiptr size); 12375bd8deadSopenharmony_ci 12385bd8deadSopenharmony_ci operate identically to the corresponding command where "Named" is 12395bd8deadSopenharmony_ci deleted from the name (and extension suffixes are dropped or updated 12405bd8deadSopenharmony_ci appropriately) except, rather than updating the currently bound buffer 12415bd8deadSopenharmony_ci for the buffer target parameter (a parameter not present for these 12425bd8deadSopenharmony_ci listed commands), these "Named" commands update the buffer object 12435bd8deadSopenharmony_ci named by the initial buffer parameter. The remaining parameters 12445bd8deadSopenharmony_ci following the initial buffer parameter for the listed "Named" commands 12455bd8deadSopenharmony_ci match the parameters for the corresponding non-"Named" buffer command 12465bd8deadSopenharmony_ci (except the target parameter is not needed because the buffer object 12475bd8deadSopenharmony_ci to update is identified by its name) and are interpreted as they 12485bd8deadSopenharmony_ci are for the non-"Named" buffer command. If the buffer object named 12495bd8deadSopenharmony_ci by the buffer parameter has not been previously bound or has been 12505bd8deadSopenharmony_ci deleted since the last binding, the GL first creates a new state 12515bd8deadSopenharmony_ci vector, initialized with a zero-sized memory buffer and comprising the 12525bd8deadSopenharmony_ci state values listed in table 2.6. There is no buffer corresponding 12535bd8deadSopenharmony_ci to the name zero, these commands generate the INVALID_OPERATION 12545bd8deadSopenharmony_ci error if the buffer parameter is zero." 12555bd8deadSopenharmony_ci 12565bd8deadSopenharmony_ci Add to the end of Section 2.10 (Vertex Array Objects): 12575bd8deadSopenharmony_ci 12585bd8deadSopenharmony_ci "The following commands: 12595bd8deadSopenharmony_ci 12605bd8deadSopenharmony_ci void VertexArrayVertexOffsetEXT(uint vaobj, uint buffer, 12615bd8deadSopenharmony_ci int size, enum type, sizei stride, 12625bd8deadSopenharmony_ci intptr offset); 12635bd8deadSopenharmony_ci void VertexArrayColorOffsetEXT(uint vaobj, uint buffer, 12645bd8deadSopenharmony_ci int size, enum type, sizei stride, 12655bd8deadSopenharmony_ci intptr offset); 12665bd8deadSopenharmony_ci void VertexArrayEdgeFlagOffsetEXT(uint vaobj, uint buffer, 12675bd8deadSopenharmony_ci sizei stride, intptr offset); 12685bd8deadSopenharmony_ci void VertexArrayIndexOffsetEXT(uint vaobj, uint buffer, 12695bd8deadSopenharmony_ci enum type, sizei stride, 12705bd8deadSopenharmony_ci intptr offset); 12715bd8deadSopenharmony_ci void VertexArrayNormalOffsetEXT(uint vaobj, uint buffer, 12725bd8deadSopenharmony_ci enum type, sizei stride, 12735bd8deadSopenharmony_ci intptr offset); 12745bd8deadSopenharmony_ci void VertexArrayTexCoordOffsetEXT(uint vaobj, uint buffer, 12755bd8deadSopenharmony_ci int size, enum type, sizei stride, 12765bd8deadSopenharmony_ci intptr offset); 12775bd8deadSopenharmony_ci void VertexArrayMultiTexCoordOffsetEXT(uint vaobj, uint buffer, 12785bd8deadSopenharmony_ci enum texunit, 12795bd8deadSopenharmony_ci int size, enum type, sizei stride, 12805bd8deadSopenharmony_ci intptr offset); 12815bd8deadSopenharmony_ci void VertexArrayFogCoordOffsetEXT(uint vaobj, uint buffer, 12825bd8deadSopenharmony_ci enum type, sizei stride, 12835bd8deadSopenharmony_ci intptr offset); 12845bd8deadSopenharmony_ci void VertexArraySecondaryColorOffsetEXT(uint vaobj, uint buffer, 12855bd8deadSopenharmony_ci int size, enum type, 12865bd8deadSopenharmony_ci sizei stride, intptr offset); 12875bd8deadSopenharmony_ci void VertexArrayVertexAttribOffsetEXT(uint vaobj, uint buffer, 12885bd8deadSopenharmony_ci uint index, int size, 12895bd8deadSopenharmony_ci enum type, boolean normalized, 12905bd8deadSopenharmony_ci sizei stride, intptr offset); 12915bd8deadSopenharmony_ci void VertexArrayVertexAttribIOffsetEXT(uint vaobj, uint buffer, 12925bd8deadSopenharmony_ci uint index, int size, 12935bd8deadSopenharmony_ci enum type, sizei stride, 12945bd8deadSopenharmony_ci intptr offset); 12955bd8deadSopenharmony_ci 12965bd8deadSopenharmony_ci operate identically to the corresponding command where "VertexArray" 12975bd8deadSopenharmony_ci is deleted from the name and "Offset" is changed to "Pointer" (and 12985bd8deadSopenharmony_ci extension suffixes are dropped or updated appropriately) except, 12995bd8deadSopenharmony_ci 1) rather than updating the currently in use vertex array object, 13005bd8deadSopenharmony_ci these "VertexArray" commands update the vertex array object named 13015bd8deadSopenharmony_ci by the initial vaobj parameter, and 2) the corresponding command 13025bd8deadSopenharmony_ci operates as if the ARRAY_BUFFER buffer binding is bound to the 13035bd8deadSopenharmony_ci buffer named by the buffer parameter. The remaining parameters 13045bd8deadSopenharmony_ci following the initial vaobj parameter for the listed "VertexArray" 13055bd8deadSopenharmony_ci commands match the parameters for the corresponding non-"VertexArray" 13065bd8deadSopenharmony_ci vertex array specification command and are interpreted as they 13075bd8deadSopenharmony_ci are for the non-"VertexArray" vertex array specification command. 13085bd8deadSopenharmony_ci The one exception is that final intptr offset parameter of the 13095bd8deadSopenharmony_ci "VertexArray" command is cast to the final pointer parameter of the 13105bd8deadSopenharmony_ci non-"VertexArray" command (intptr is guaranteed to be large enough 13115bd8deadSopenharmony_ci to store any pointer value). 13125bd8deadSopenharmony_ci 13135bd8deadSopenharmony_ci If the vertex array object named by the vaobj parameter has not 13145bd8deadSopenharmony_ci been previously bound but has been generated (without subsequent 13155bd8deadSopenharmony_ci deletion) by GenVertexArrays, the GL first creates a new state 13165bd8deadSopenharmony_ci vector in the same manner as when BindVertexArray creates a new 13175bd8deadSopenharmony_ci vertex array object. However these commands fail and an 13185bd8deadSopenharmony_ci INVALID_OPERATION error is generated if vaobj is not a name returned 13195bd8deadSopenharmony_ci from a previous call to GenVertexArrays, or if such a name has since 13205bd8deadSopenharmony_ci been deleted with DeleteVertexArrays. 13215bd8deadSopenharmony_ci 13225bd8deadSopenharmony_ci If the buffer object named by the buffer parameter is non-zero and 13235bd8deadSopenharmony_ci has not been previously bound or has been deleted since the last 13245bd8deadSopenharmony_ci binding, the GL first creates a new state vector, initialized with 13255bd8deadSopenharmony_ci a zero-sized memory buffer and comprising the state values listed 13265bd8deadSopenharmony_ci in table 2.6. If the buffer object named by the buffer parameter 13275bd8deadSopenharmony_ci is zero, these commands update the vertex array client-state. 13285bd8deadSopenharmony_ci 13295bd8deadSopenharmony_ci If the buffer object named by the buffer parameter is non-zero and 13305bd8deadSopenharmony_ci the offset parameter is negative, generate the INVALID_VALUE error. 13315bd8deadSopenharmony_ci No error is generated in the case where buffer is zero because the 13325bd8deadSopenharmony_ci offset might be valid pointer than just happens to be negative when 13335bd8deadSopenharmony_ci cast to a intptr type. 13345bd8deadSopenharmony_ci 13355bd8deadSopenharmony_ci The following commands: 13365bd8deadSopenharmony_ci 13375bd8deadSopenharmony_ci void EnableVertexArrayEXT(uint vaobj, enum array); 13385bd8deadSopenharmony_ci void DisableVertexArrayEXT(uint vaobj, enum array); 13395bd8deadSopenharmony_ci void EnableVertexArrayAttribEXT(uint vaobj, uint index); 13405bd8deadSopenharmony_ci void DisableVertexArrayAttribEXT(uint vaobj, uint index); 13415bd8deadSopenharmony_ci 13425bd8deadSopenharmony_ci operate identically to EnableClientState, DisableClientState, 13435bd8deadSopenharmony_ci EnableVertexAttribArray, and DisableVertexAttribArray respectively 13445bd8deadSopenharmony_ci except rather than updating the current vertex array client-state 13455bd8deadSopenharmony_ci these "VertexArray" commands update the vertex array enables 13465bd8deadSopenharmony_ci within the vertex array object named by the initial vaobj parameter. 13475bd8deadSopenharmony_ci The array parameter matches the array parameter for the corresponding 13485bd8deadSopenharmony_ci EnableClientState and DisableClientState commands. The index 13495bd8deadSopenharmony_ci parameter matches the index parameter for the corresponding 13505bd8deadSopenharmony_ci EnableVertexAttribArray and DisableVertexAttribArray commands. 13515bd8deadSopenharmony_ci 13525bd8deadSopenharmony_ci Additionally EnableVertexArrayEXT and DisableVertexArrayEXT accept 13535bd8deadSopenharmony_ci the tokens TEXTURE0 through TEXTUREn where n is less than the 13545bd8deadSopenharmony_ci implementation-dependent limit of MAX_TEXTURE_COORDS. For these 13555bd8deadSopenharmony_ci GL_TEXTUREi tokens, EnableVertexArrayEXT and DisableVertexArrayEXT 13565bd8deadSopenharmony_ci act identically to EnableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) 13575bd8deadSopenharmony_ci or DisableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) respectively 13585bd8deadSopenharmony_ci as if the active client texture is set to texture coordinate set i 13595bd8deadSopenharmony_ci based on the token TEXTUREi indicated by array. 13605bd8deadSopenharmony_ci 13615bd8deadSopenharmony_ci If the vertex array object named by the vaobj parameter has not 13625bd8deadSopenharmony_ci been previously bound but has been generated (without subsequent 13635bd8deadSopenharmony_ci deletion) by GenVertexArrays, the GL first creates a new state 13645bd8deadSopenharmony_ci vector in the same manner as when BindVertexArray creates a new 13655bd8deadSopenharmony_ci vertex array object. However these commands fail and an 13665bd8deadSopenharmony_ci INVALID_OPERATION error is generated if vaobj is not a name returned 13675bd8deadSopenharmony_ci from a previous call to GenVertexArrays, or if such a name has since 13685bd8deadSopenharmony_ci been deleted with DeleteVertexArrays." 13695bd8deadSopenharmony_ci 13705bd8deadSopenharmony_ci Add to the end of Section 2.12.2 (Matrices): 13715bd8deadSopenharmony_ci 13725bd8deadSopenharmony_ci "The following commands: 13735bd8deadSopenharmony_ci 13745bd8deadSopenharmony_ci void MatrixLoadfEXT(enum matrixMode, const float *m); 13755bd8deadSopenharmony_ci void MatrixLoaddEXT(enum matrixMode, const double *m); 13765bd8deadSopenharmony_ci 13775bd8deadSopenharmony_ci void MatrixLoadTransposefEXT(enum matrixMode, const float *m); 13785bd8deadSopenharmony_ci void MatrixLoadTransposedEXT(enum matrixMode, const double *m); 13795bd8deadSopenharmony_ci 13805bd8deadSopenharmony_ci void MatrixMultfEXT(enum matrixMode, const float *m); 13815bd8deadSopenharmony_ci void MatrixMultdEXT(enum matrixMode, const double *m); 13825bd8deadSopenharmony_ci 13835bd8deadSopenharmony_ci void MatrixMultTransposefEXT(enum matrixMode, const float *m); 13845bd8deadSopenharmony_ci void MatrixMultTransposedEXT(enum matrixMode, const double *m); 13855bd8deadSopenharmony_ci 13865bd8deadSopenharmony_ci void MatrixLoadIdentityEXT(enum matrixMode); 13875bd8deadSopenharmony_ci 13885bd8deadSopenharmony_ci void MatrixRotatefEXT(enum matrixMode, float angle, 13895bd8deadSopenharmony_ci float x, float y, float z); 13905bd8deadSopenharmony_ci void MatrixRotatedEXT(enum matrixMode, double angle, 13915bd8deadSopenharmony_ci double x, double y, double z); 13925bd8deadSopenharmony_ci 13935bd8deadSopenharmony_ci void MatrixScalefEXT(enum matrixMode, 13945bd8deadSopenharmony_ci float x, float y, float z); 13955bd8deadSopenharmony_ci void MatrixScaledEXT(enum matrixMode, 13965bd8deadSopenharmony_ci double x, double y, double z); 13975bd8deadSopenharmony_ci 13985bd8deadSopenharmony_ci void MatrixTranslatefEXT(enum matrixMode, 13995bd8deadSopenharmony_ci float x, float y, float z); 14005bd8deadSopenharmony_ci void MatrixTranslatedEXT(enum matrixMode, 14015bd8deadSopenharmony_ci double x, double y, double z); 14025bd8deadSopenharmony_ci 14035bd8deadSopenharmony_ci void MatrixOrthoEXT(enum matrixMode, double l, double r, 14045bd8deadSopenharmony_ci double b, double t, double n, double f); 14055bd8deadSopenharmony_ci void MatrixFrustumEXT(enum matrixMode, double l, double r, 14065bd8deadSopenharmony_ci double b, double t, double n, double f); 14075bd8deadSopenharmony_ci 14085bd8deadSopenharmony_ci void MatrixPushEXT(enum matrixMode); 14095bd8deadSopenharmony_ci void MatrixPopEXT(enum matrixMode); 14105bd8deadSopenharmony_ci 14115bd8deadSopenharmony_ci are equivalent (assuming no errors) to the following: 14125bd8deadSopenharmony_ci 14135bd8deadSopenharmony_ci int savedMatrixMode; 14145bd8deadSopenharmony_ci 14155bd8deadSopenharmony_ci GetIntegerv(MATRIX_MODE, &savedMatrixMode); 14165bd8deadSopenharmony_ci if (matrixMode >= TEXTURE0 && matrixMode <= TEXTURE31) { 14175bd8deadSopenharmony_ci int savedActiveTexture; 14185bd8deadSopenharmony_ci 14195bd8deadSopenharmony_ci MatrixMode(TEXTURE); 14205bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 14215bd8deadSopenharmony_ci ActiveTexture(matrixMode); 14225bd8deadSopenharmony_ci XXX(...); 14235bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 14245bd8deadSopenharmony_ci } else { 14255bd8deadSopenharmony_ci MatrixMode(matrixMode); 14265bd8deadSopenharmony_ci XXX(...); 14275bd8deadSopenharmony_ci } 14285bd8deadSopenharmony_ci MatrixMode(savedMatrixMode); 14295bd8deadSopenharmony_ci 14305bd8deadSopenharmony_ci where matrixMode is the matrixMode parameter to the listed commands, 14315bd8deadSopenharmony_ci XXX is found in Table 2.selectorFreeMatrixCommands, and ... is the 14325bd8deadSopenharmony_ci list of the remaining arguments for the command that follow the 14335bd8deadSopenharmony_ci initial matrixMode parameter. 14345bd8deadSopenharmony_ci 14355bd8deadSopenharmony_ci Table 2.selectorFreeMatrixCommands: 14365bd8deadSopenharmony_ci 14375bd8deadSopenharmony_ci Selector-free Command Name XXX 14385bd8deadSopenharmony_ci -------------------------- -------------------- 14395bd8deadSopenharmony_ci MatrixLoadfEXT LoadMatrixf 14405bd8deadSopenharmony_ci MatrixLoaddEXT LoadMatrixd 14415bd8deadSopenharmony_ci 14425bd8deadSopenharmony_ci MatrixLoadTransposefEXT LoadTransposeMatrixf 14435bd8deadSopenharmony_ci MatrixLoadTransposedEXT LoadTransposeMatrixd 14445bd8deadSopenharmony_ci 14455bd8deadSopenharmony_ci MatrixMultfEXT MultMatrixf 14465bd8deadSopenharmony_ci MatrixMultdEXT MultMatrixd 14475bd8deadSopenharmony_ci 14485bd8deadSopenharmony_ci MatrixMultTransposefEXT MultTransposeMatrixf 14495bd8deadSopenharmony_ci MatrixMultTransposedEXT MultTransposeMatrixd 14505bd8deadSopenharmony_ci 14515bd8deadSopenharmony_ci MatrixLoadIdentityEXT LoadIdentity 14525bd8deadSopenharmony_ci 14535bd8deadSopenharmony_ci MatrixRotatefEXT Rotatef 14545bd8deadSopenharmony_ci MatrixRotatedEXT Rotated 14555bd8deadSopenharmony_ci 14565bd8deadSopenharmony_ci MatrixScalefEXT Scalef 14575bd8deadSopenharmony_ci MatrixScaledEXT Scaled 14585bd8deadSopenharmony_ci 14595bd8deadSopenharmony_ci MatrixTranslatefEXT Translatef 14605bd8deadSopenharmony_ci MatrixTranslatedEXT Translated 14615bd8deadSopenharmony_ci 14625bd8deadSopenharmony_ci MatrixOrthoEXT Ortho 14635bd8deadSopenharmony_ci MatrixFrustumEXT Frustum 14645bd8deadSopenharmony_ci 14655bd8deadSopenharmony_ci MatrixPushEXT PushMatrix 14665bd8deadSopenharmony_ci MatrixPopEXT PopMatrix" 14675bd8deadSopenharmony_ci 14685bd8deadSopenharmony_ci Add to the end of Section 2.20.3 (Shader Variables): 14695bd8deadSopenharmony_ci 14705bd8deadSopenharmony_ci "Program-specific Uniform Updates 14715bd8deadSopenharmony_ci 14725bd8deadSopenharmony_ci The following commands: 14735bd8deadSopenharmony_ci 14745bd8deadSopenharmony_ci void ProgramUniform1fEXT(uint program, int location, float v0); 14755bd8deadSopenharmony_ci void ProgramUniform2fEXT(uint program, int location, 14765bd8deadSopenharmony_ci float v0, float v1); 14775bd8deadSopenharmony_ci void ProgramUniform3fEXT(uint program, int location, 14785bd8deadSopenharmony_ci float v0, float v1, float v2); 14795bd8deadSopenharmony_ci void ProgramUniform4fEXT(uint program, int location, 14805bd8deadSopenharmony_ci float v0, float v1, float v2, float v3); 14815bd8deadSopenharmony_ci 14825bd8deadSopenharmony_ci void ProgramUniform1iEXT(uint program, int location, int v0); 14835bd8deadSopenharmony_ci void ProgramUniform2iEXT(uint program, int location, 14845bd8deadSopenharmony_ci int v0, int v1); 14855bd8deadSopenharmony_ci void ProgramUniform3iEXT(uint program, int location, 14865bd8deadSopenharmony_ci int v0, int v1, int v2); 14875bd8deadSopenharmony_ci void ProgramUniform4iEXT(uint program, int location, 14885bd8deadSopenharmony_ci int v0, int v1, int v2, int v3); 14895bd8deadSopenharmony_ci 14905bd8deadSopenharmony_ci void ProgramUniform1fvEXT(uint program, int location, 14915bd8deadSopenharmony_ci sizei count, const float *value); 14925bd8deadSopenharmony_ci void ProgramUniform2fvEXT(uint program, int location, 14935bd8deadSopenharmony_ci sizei count, const float *value); 14945bd8deadSopenharmony_ci void ProgramUniform3fvEXT(uint program, int location, 14955bd8deadSopenharmony_ci sizei count, const float *value); 14965bd8deadSopenharmony_ci void ProgramUniform4fvEXT(uint program, int location, 14975bd8deadSopenharmony_ci sizei count, const float *value); 14985bd8deadSopenharmony_ci 14995bd8deadSopenharmony_ci void ProgramUniform1ivEXT(uint program, int location, 15005bd8deadSopenharmony_ci sizei count, const int *value); 15015bd8deadSopenharmony_ci void ProgramUniform2ivEXT(uint program, int location, 15025bd8deadSopenharmony_ci sizei count, const int *value); 15035bd8deadSopenharmony_ci void ProgramUniform3ivEXT(uint program, int location, 15045bd8deadSopenharmony_ci sizei count, const int *value); 15055bd8deadSopenharmony_ci void ProgramUniform4ivEXT(uint program, int location, 15065bd8deadSopenharmony_ci sizei count, const int *value); 15075bd8deadSopenharmony_ci 15085bd8deadSopenharmony_ci void ProgramUniformMatrix2fvEXT(uint program, int location, 15095bd8deadSopenharmony_ci sizei count, boolean transpose, 15105bd8deadSopenharmony_ci const float *value); 15115bd8deadSopenharmony_ci void ProgramUniformMatrix3fvEXT(uint program, int location, 15125bd8deadSopenharmony_ci sizei count, boolean transpose, 15135bd8deadSopenharmony_ci const float *value); 15145bd8deadSopenharmony_ci void ProgramUniformMatrix4fvEXT(uint program, int location, 15155bd8deadSopenharmony_ci sizei count, boolean transpose, 15165bd8deadSopenharmony_ci const float *value); 15175bd8deadSopenharmony_ci 15185bd8deadSopenharmony_ci void ProgramUniformMatrix2x3fvEXT(uint program, int location, 15195bd8deadSopenharmony_ci sizei count, boolean transpose, 15205bd8deadSopenharmony_ci const float *value); 15215bd8deadSopenharmony_ci void ProgramUniformMatrix3x2fvEXT(uint program, int location, 15225bd8deadSopenharmony_ci sizei count, boolean transpose, 15235bd8deadSopenharmony_ci const float *value); 15245bd8deadSopenharmony_ci void ProgramUniformMatrix2x4fvEXT(uint program, int location, 15255bd8deadSopenharmony_ci sizei count, boolean transpose, 15265bd8deadSopenharmony_ci const float *value); 15275bd8deadSopenharmony_ci void ProgramUniformMatrix4x2fvEXT(uint program, int location, 15285bd8deadSopenharmony_ci sizei count, boolean transpose, 15295bd8deadSopenharmony_ci const float *value); 15305bd8deadSopenharmony_ci void ProgramUniformMatrix3x4fvEXT(uint program, int location, 15315bd8deadSopenharmony_ci sizei count, boolean transpose, 15325bd8deadSopenharmony_ci const float *value); 15335bd8deadSopenharmony_ci void ProgramUniformMatrix4x3fvEXT(uint program, int location, 15345bd8deadSopenharmony_ci sizei count, boolean transpose, 15355bd8deadSopenharmony_ci const float *value); 15365bd8deadSopenharmony_ci 15375bd8deadSopenharmony_ci void ProgramUniform1uiEXT(uint program, int location, uint v0); 15385bd8deadSopenharmony_ci void ProgramUniform2uiEXT(uint program, int location, 15395bd8deadSopenharmony_ci uint v0, uint v1); 15405bd8deadSopenharmony_ci void ProgramUniform3uiEXT(uint program, int location, 15415bd8deadSopenharmony_ci uint v0, uint v1, uint v2); 15425bd8deadSopenharmony_ci void ProgramUniform4uiEXT(uint program, int location, 15435bd8deadSopenharmony_ci uint v0, uint v1, uint v2, uint v3); 15445bd8deadSopenharmony_ci 15455bd8deadSopenharmony_ci void ProgramUniform1uivEXT(uint program, int location, 15465bd8deadSopenharmony_ci sizei count, const uint *value); 15475bd8deadSopenharmony_ci void ProgramUniform2uivEXT(uint program, int location, 15485bd8deadSopenharmony_ci sizei count, const uint *value); 15495bd8deadSopenharmony_ci void ProgramUniform3uivEXT(uint program, int location, 15505bd8deadSopenharmony_ci sizei count, const uint *value); 15515bd8deadSopenharmony_ci void ProgramUniform4uivEXT(uint program, int location, 15525bd8deadSopenharmony_ci sizei count, const uint *value); 15535bd8deadSopenharmony_ci 15545bd8deadSopenharmony_ci operate identically to the corresponding command where "Program" is 15555bd8deadSopenharmony_ci deleted from the name (and extension suffixes are dropped or updated 15565bd8deadSopenharmony_ci appropriately) except, rather than updating the currently in use 15575bd8deadSopenharmony_ci program object, these "Program" commands update the program object 15585bd8deadSopenharmony_ci named by the initial program parameter. The remaining parameters 15595bd8deadSopenharmony_ci following the initial program parameter for the listed "Program" 15605bd8deadSopenharmony_ci commands match the parameters for the corresponding non-"Program" 15615bd8deadSopenharmony_ci uniform command and are interpreted as they are for the non-"Program" 15625bd8deadSopenharmony_ci uniform command. If the program named by the program parameter 15635bd8deadSopenharmony_ci is not created or has not been successfully linked, the error 15645bd8deadSopenharmony_ci INVALID_OPERATION is generated." 15655bd8deadSopenharmony_ci 15665bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.0 Specification (Rasterization) 15675bd8deadSopenharmony_ci 15685bd8deadSopenharmony_ci Add to the end of section 3.8.12 (Texture Objects): 15695bd8deadSopenharmony_ci 15705bd8deadSopenharmony_ci "Texture Object State Update 15715bd8deadSopenharmony_ci 15725bd8deadSopenharmony_ci The command 15735bd8deadSopenharmony_ci 15745bd8deadSopenharmony_ci void BindMultiTextureEXT(enum texunit, enum target, uint texture); 15755bd8deadSopenharmony_ci 15765bd8deadSopenharmony_ci operates identically to BindTexture except, rather than binding the 15775bd8deadSopenharmony_ci named texture object to the current active texture's target binding 15785bd8deadSopenharmony_ci specified by the target parameter, BindMultiTextureEXT binds the 15795bd8deadSopenharmony_ci named texture to the specified target binding of texunit. 15805bd8deadSopenharmony_ci 15815bd8deadSopenharmony_ci These texture object state update commands: 15825bd8deadSopenharmony_ci 15835bd8deadSopenharmony_ci void TextureParameteriEXT(uint texture, enum target, 15845bd8deadSopenharmony_ci enum pname, int param); 15855bd8deadSopenharmony_ci void TextureParameterivEXT(uint texture, enum target, 15865bd8deadSopenharmony_ci enum pname, const int *param); 15875bd8deadSopenharmony_ci 15885bd8deadSopenharmony_ci void TextureParameterfEXT(uint texture, enum target, 15895bd8deadSopenharmony_ci enum pname, float param); 15905bd8deadSopenharmony_ci void TextureParameterfvEXT(uint texture, enum target, 15915bd8deadSopenharmony_ci enum pname, const float *param); 15925bd8deadSopenharmony_ci 15935bd8deadSopenharmony_ci void TextureParameterIivEXT(uint texture, enum target, 15945bd8deadSopenharmony_ci enum pname, const int *params); 15955bd8deadSopenharmony_ci void TextureParameterIuivEXT(uint texture, enum target, 15965bd8deadSopenharmony_ci enum pname, const uint *params); 15975bd8deadSopenharmony_ci 15985bd8deadSopenharmony_ci void TextureImage1DEXT(uint texture, enum target, 15995bd8deadSopenharmony_ci int level, int internalformat, 16005bd8deadSopenharmony_ci sizei width, int border, 16015bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 16025bd8deadSopenharmony_ci void TextureImage2DEXT(uint texture, enum target, 16035bd8deadSopenharmony_ci int level, int internalformat, 16045bd8deadSopenharmony_ci sizei width, sizei height, int border, 16055bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 16065bd8deadSopenharmony_ci 16075bd8deadSopenharmony_ci void TextureSubImage1DEXT(uint texture, enum target, 16085bd8deadSopenharmony_ci int level, int xoffset, sizei width, 16095bd8deadSopenharmony_ci enum format, enum type, 16105bd8deadSopenharmony_ci const void *pixels); 16115bd8deadSopenharmony_ci void TextureSubImage2DEXT(uint texture, enum target, 16125bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 16135bd8deadSopenharmony_ci sizei width, sizei height, 16145bd8deadSopenharmony_ci enum format, enum type, 16155bd8deadSopenharmony_ci const void *pixels); 16165bd8deadSopenharmony_ci 16175bd8deadSopenharmony_ci void CopyTextureImage1DEXT(uint texture, enum target, 16185bd8deadSopenharmony_ci int level, enum internalformat, 16195bd8deadSopenharmony_ci int x, int y, sizei width, int border); 16205bd8deadSopenharmony_ci void CopyTextureImage2DEXT(uint texture, enum target, 16215bd8deadSopenharmony_ci int level, enum internalformat, 16225bd8deadSopenharmony_ci int x, int y, 16235bd8deadSopenharmony_ci sizei width, sizei height, int border); 16245bd8deadSopenharmony_ci 16255bd8deadSopenharmony_ci void CopyTextureSubImage1DEXT(uint texture, enum target, 16265bd8deadSopenharmony_ci int level, int xoffset, 16275bd8deadSopenharmony_ci int x, int y, sizei width); 16285bd8deadSopenharmony_ci void CopyTextureSubImage2DEXT(uint texture, enum target, 16295bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 16305bd8deadSopenharmony_ci int x, int y, 16315bd8deadSopenharmony_ci sizei width, sizei height); 16325bd8deadSopenharmony_ci 16335bd8deadSopenharmony_ci void TextureImage3DEXT(uint texture, enum target, 16345bd8deadSopenharmony_ci int level, int internalformat, 16355bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 16365bd8deadSopenharmony_ci int border, 16375bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 16385bd8deadSopenharmony_ci 16395bd8deadSopenharmony_ci void TextureSubImage3DEXT(uint texture, enum target, 16405bd8deadSopenharmony_ci int level, 16415bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 16425bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 16435bd8deadSopenharmony_ci enum format, enum type, 16445bd8deadSopenharmony_ci const void *pixels); 16455bd8deadSopenharmony_ci void CopyTextureSubImage3DEXT(uint texture, enum target, 16465bd8deadSopenharmony_ci int level, 16475bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 16485bd8deadSopenharmony_ci int x, int y, 16495bd8deadSopenharmony_ci sizei width, sizei height); 16505bd8deadSopenharmony_ci 16515bd8deadSopenharmony_ci void TextureBufferEXT(uint texture, enum target, 16525bd8deadSopenharmony_ci enum internalformat, uint buffer); 16535bd8deadSopenharmony_ci 16545bd8deadSopenharmony_ci void CompressedTextureImage3DEXT(uint texture, enum target, int level, 16555bd8deadSopenharmony_ci enum internalformat, 16565bd8deadSopenharmony_ci sizei width, sizei height, 16575bd8deadSopenharmony_ci sizei depth, int border, 16585bd8deadSopenharmony_ci sizei imageSize, const void *data); 16595bd8deadSopenharmony_ci void CompressedTextureImage2DEXT(uint texture, enum target, int level, 16605bd8deadSopenharmony_ci enum internalformat, 16615bd8deadSopenharmony_ci sizei width, sizei height, 16625bd8deadSopenharmony_ci int border, sizei imageSize, 16635bd8deadSopenharmony_ci const void *data); 16645bd8deadSopenharmony_ci void CompressedTextureImage1DEXT(uint texture, enum target, int level, 16655bd8deadSopenharmony_ci enum internalformat, 16665bd8deadSopenharmony_ci sizei width, int border, 16675bd8deadSopenharmony_ci sizei imageSize, const void *data); 16685bd8deadSopenharmony_ci void CompressedTextureSubImage3DEXT(uint texture, enum target, int level, 16695bd8deadSopenharmony_ci int xoffset, int yoffset, 16705bd8deadSopenharmony_ci int zoffset, 16715bd8deadSopenharmony_ci sizei width, sizei height, 16725bd8deadSopenharmony_ci sizei depth, enum format, 16735bd8deadSopenharmony_ci sizei imageSize, const void *data); 16745bd8deadSopenharmony_ci void CompressedTextureSubImage2DEXT(uint texture, enum target, int level, 16755bd8deadSopenharmony_ci int xoffset, int yoffset, 16765bd8deadSopenharmony_ci sizei width, sizei height, 16775bd8deadSopenharmony_ci enum format, 16785bd8deadSopenharmony_ci sizei imageSize, const void *data); 16795bd8deadSopenharmony_ci void CompressedTextureSubImage1DEXT(uint texture, enum target, int level, 16805bd8deadSopenharmony_ci int xoffset, sizei width, 16815bd8deadSopenharmony_ci enum format, 16825bd8deadSopenharmony_ci sizei imageSize, const void *data); 16835bd8deadSopenharmony_ci void CompressedTextureImage3DEXT(uint texture, enum target, int level, 16845bd8deadSopenharmony_ci enum internalformat, 16855bd8deadSopenharmony_ci sizei width, sizei height, 16865bd8deadSopenharmony_ci sizei depth, int border, 16875bd8deadSopenharmony_ci sizei imageSize, const void *data); 16885bd8deadSopenharmony_ci 16895bd8deadSopenharmony_ci void TextureBufferEXT(uint texture, enum target, 16905bd8deadSopenharmony_ci enum internalformat, uint buffer); 16915bd8deadSopenharmony_ci 16925bd8deadSopenharmony_ci void TextureRenderbufferEXT(uint texture, enum target, 16935bd8deadSopenharmony_ci uint renderbuffer); 16945bd8deadSopenharmony_ci 16955bd8deadSopenharmony_ci operate identically to the corresponding command where "Texture" 16965bd8deadSopenharmony_ci is substituted for "Tex" (and extension suffixes are dropped or 16975bd8deadSopenharmony_ci updated appropriately) except, rather than updating the current bound 16985bd8deadSopenharmony_ci texture for the texture unit indicated by the current active texture 16995bd8deadSopenharmony_ci state and the target parameter, these "Texture" commands update the 17005bd8deadSopenharmony_ci texture object named by the initial texture parameter. If the 17015bd8deadSopenharmony_ci texture parameter is zero, then the target parameter selects the 17025bd8deadSopenharmony_ci default texture of the specified target to update. The remaining 17035bd8deadSopenharmony_ci parameters following the initial texture parameter for the listed 17045bd8deadSopenharmony_ci "Texture" commands match the parameters for the corresponding "Tex" 17055bd8deadSopenharmony_ci command and are interpreted as they are for the "Tex" command. 17065bd8deadSopenharmony_ci If the texture parameter is for an unused name, the name becomes 17075bd8deadSopenharmony_ci used and the named texture object is set to a new state vector, 17085bd8deadSopenharmony_ci comprising all the state values listed in section 3.8.11, set 17095bd8deadSopenharmony_ci to the same initial values prior to the command's state update. 17105bd8deadSopenharmony_ci If the texture parameter is for a used name and that named texture 17115bd8deadSopenharmony_ci object has a different target than the specified target parameter, 17125bd8deadSopenharmony_ci the INVALID_OPERATION error is generated. One consequence of this 17135bd8deadSopenharmony_ci error for commands that accepts TEXTURE_PROXY_* as a valid target 17145bd8deadSopenharmony_ci parameter is TEXTURE_PROXY_* target tokens generate errors if used 17155bd8deadSopenharmony_ci with a non-zero texture parameter because the target of a non-default 17165bd8deadSopenharmony_ci (non-zero) texture object is never a proxy target." 17175bd8deadSopenharmony_ci 17185bd8deadSopenharmony_ci Add before the last paragraph of Section 3.8.16 (Texture Application): 17195bd8deadSopenharmony_ci 17205bd8deadSopenharmony_ci "The following commands (introduced by EXT_draw_buffers2): 17215bd8deadSopenharmony_ci 17225bd8deadSopenharmony_ci void EnableIndexedEXT(enum cap, uint index); 17235bd8deadSopenharmony_ci void Enablei(enum cap, uint index); 17245bd8deadSopenharmony_ci void DisableIndexedEXT(enum cap, uint index); 17255bd8deadSopenharmony_ci void Disablei(enum cap, uint index); 17265bd8deadSopenharmony_ci 17275bd8deadSopenharmony_ci are equivalent (assuming no errors) to the following: 17285bd8deadSopenharmony_ci 17295bd8deadSopenharmony_ci int savedActiveTexture; 17305bd8deadSopenharmony_ci 17315bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 17325bd8deadSopenharmony_ci ActiveTexture(TEXTURE0+index); 17335bd8deadSopenharmony_ci XXX(cap); 17345bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 17355bd8deadSopenharmony_ci 17365bd8deadSopenharmony_ci where index is the index parameter to the listed commands and XXX 17375bd8deadSopenharmony_ci is the name of the command without its "Indexed" or "i" suffix 17385bd8deadSopenharmony_ci (either Enable or Disable) when the cap parameter is one of 17395bd8deadSopenharmony_ci the texture-related enable token depending on the active texture 17405bd8deadSopenharmony_ci state, namely TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_CUBE_MAP, 17415bd8deadSopenharmony_ci TEXTURE_RECTANGLE_ARB, TEXTURE_GEN_S, TEXTURE_GEN_T, TEXTURE_GEN_R, 17425bd8deadSopenharmony_ci or TEXTURE_GEN_Q." 17435bd8deadSopenharmony_ci 17445bd8deadSopenharmony_ci Add NEW section 3.8.X (Multitexture Commands): after section 3.8.16 17455bd8deadSopenharmony_ci (Texture Application): 17465bd8deadSopenharmony_ci 17475bd8deadSopenharmony_ci "These multitexture commands: 17485bd8deadSopenharmony_ci 17495bd8deadSopenharmony_ci void MultiTexCoordPointerEXT(enum texunit, int size, enum type, 17505bd8deadSopenharmony_ci sizei stride, const void *pointer); 17515bd8deadSopenharmony_ci 17525bd8deadSopenharmony_ci void MultiTexEnvfEXT(enum texunit, enum target, enum pname, 17535bd8deadSopenharmony_ci float param); 17545bd8deadSopenharmony_ci void MultiTexEnvfvEXT(enum texunit, enum target, enum pname, 17555bd8deadSopenharmony_ci const float *params); 17565bd8deadSopenharmony_ci void MultiTexEnviEXT(enum texunit, enum target, enum pname, 17575bd8deadSopenharmony_ci int param); 17585bd8deadSopenharmony_ci void MultiTexEnvivEXT(enum texunit, enum target, enum pname, 17595bd8deadSopenharmony_ci const int *params); 17605bd8deadSopenharmony_ci 17615bd8deadSopenharmony_ci void MultiTexGendEXT(enum texunit, enum coord, enum pname, 17625bd8deadSopenharmony_ci double param); 17635bd8deadSopenharmony_ci void MultiTexGendvEXT(enum texunit, enum coord, enum pname, 17645bd8deadSopenharmony_ci const double *params); 17655bd8deadSopenharmony_ci void MultiTexGenfEXT(enum texunit, enum coord, enum pname, 17665bd8deadSopenharmony_ci float param); 17675bd8deadSopenharmony_ci void MultiTexGenfvEXT(enum texunit, enum coord, enum pname, 17685bd8deadSopenharmony_ci const float *params); 17695bd8deadSopenharmony_ci void MultiTexGeniEXT(enum texunit, enum coord, enum pname, 17705bd8deadSopenharmony_ci int param); 17715bd8deadSopenharmony_ci void MultiTexGenivEXT(enum texunit, enum coord, enum pname, 17725bd8deadSopenharmony_ci const int *params); 17735bd8deadSopenharmony_ci 17745bd8deadSopenharmony_ci void MultiTexParameteriEXT(enum texunit, enum target, 17755bd8deadSopenharmony_ci enum pname, int param); 17765bd8deadSopenharmony_ci void MultiTexParameterivEXT(enum texunit, enum target, 17775bd8deadSopenharmony_ci enum pname, const int *param); 17785bd8deadSopenharmony_ci 17795bd8deadSopenharmony_ci void MultiTexParameterfEXT(enum texunit, enum target, 17805bd8deadSopenharmony_ci enum pname, float param); 17815bd8deadSopenharmony_ci void MultiTexParameterfvEXT(enum texunit, enum target, 17825bd8deadSopenharmony_ci enum pname, const float *param); 17835bd8deadSopenharmony_ci 17845bd8deadSopenharmony_ci void MultiTexParameterIivEXT(enum texunit, enum target, 17855bd8deadSopenharmony_ci enum pname, const int *params); 17865bd8deadSopenharmony_ci void MultiTexParameterIuivEXT(enum texunit, enum target, 17875bd8deadSopenharmony_ci enum pname, const uint *params); 17885bd8deadSopenharmony_ci 17895bd8deadSopenharmony_ci void MultiTexImage1DEXT(enum texunit, enum target, 17905bd8deadSopenharmony_ci int level, int internalformat, 17915bd8deadSopenharmony_ci sizei width, int border, 17925bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 17935bd8deadSopenharmony_ci void MultiTexImage2DEXT(enum texunit, enum target, 17945bd8deadSopenharmony_ci int level, int internalformat, 17955bd8deadSopenharmony_ci sizei width, sizei height, int border, 17965bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 17975bd8deadSopenharmony_ci 17985bd8deadSopenharmony_ci void MultiTexSubImage1DEXT(enum texunit, enum target, 17995bd8deadSopenharmony_ci int level, int xoffset, sizei width, 18005bd8deadSopenharmony_ci enum format, enum type, 18015bd8deadSopenharmony_ci const void *pixels); 18025bd8deadSopenharmony_ci void MultiTexSubImage2DEXT(enum texunit, enum target, 18035bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 18045bd8deadSopenharmony_ci sizei width, sizei height, 18055bd8deadSopenharmony_ci enum format, enum type, 18065bd8deadSopenharmony_ci const void *pixels); 18075bd8deadSopenharmony_ci 18085bd8deadSopenharmony_ci void CopyMultiTexImage1DEXT(enum texunit, enum target, 18095bd8deadSopenharmony_ci int level, enum internalformat, 18105bd8deadSopenharmony_ci int x, int y, sizei width, int border); 18115bd8deadSopenharmony_ci void CopyMultiTexImage2DEXT(enum texunit, enum target, 18125bd8deadSopenharmony_ci int level, enum internalformat, 18135bd8deadSopenharmony_ci int x, int y, 18145bd8deadSopenharmony_ci sizei width, sizei height, int border); 18155bd8deadSopenharmony_ci 18165bd8deadSopenharmony_ci void CopyMultiTexSubImage1DEXT(enum texunit, enum target, 18175bd8deadSopenharmony_ci int level, int xoffset, 18185bd8deadSopenharmony_ci int x, int y, sizei width); 18195bd8deadSopenharmony_ci void CopyMultiTexSubImage2DEXT(enum texunit, enum target, 18205bd8deadSopenharmony_ci int level, int xoffset, int yoffset, 18215bd8deadSopenharmony_ci int x, int y, 18225bd8deadSopenharmony_ci sizei width, sizei height); 18235bd8deadSopenharmony_ci 18245bd8deadSopenharmony_ci void MultiTexImage3DEXT(enum texunit, enum target, 18255bd8deadSopenharmony_ci int level, int internalformat, 18265bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 18275bd8deadSopenharmony_ci int border, 18285bd8deadSopenharmony_ci enum format, enum type, const void *pixels); 18295bd8deadSopenharmony_ci 18305bd8deadSopenharmony_ci void MultiTexSubImage3DEXT(enum texunit, enum target, 18315bd8deadSopenharmony_ci int level, 18325bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 18335bd8deadSopenharmony_ci sizei width, sizei height, sizei depth, 18345bd8deadSopenharmony_ci enum format, enum type, 18355bd8deadSopenharmony_ci const void *pixels); 18365bd8deadSopenharmony_ci void CopyMultiTexSubImage3DEXT(enum texunit, enum target, 18375bd8deadSopenharmony_ci int level, 18385bd8deadSopenharmony_ci int xoffset, int yoffset, int zoffset, 18395bd8deadSopenharmony_ci int x, int y, 18405bd8deadSopenharmony_ci sizei width, sizei height); 18415bd8deadSopenharmony_ci 18425bd8deadSopenharmony_ci void CompressedMultiTexImage3DEXT(enum texunit, enum target, int level, 18435bd8deadSopenharmony_ci enum internalformat, 18445bd8deadSopenharmony_ci sizei width, sizei height, 18455bd8deadSopenharmony_ci sizei depth, int border, 18465bd8deadSopenharmony_ci sizei imageSize, const void *data); 18475bd8deadSopenharmony_ci void CompressedMultiTexImage2DEXT(enum texunit, enum target, int level, 18485bd8deadSopenharmony_ci enum internalformat, 18495bd8deadSopenharmony_ci sizei width, sizei height, 18505bd8deadSopenharmony_ci int border, sizei imageSize, 18515bd8deadSopenharmony_ci const void *data); 18525bd8deadSopenharmony_ci void CompressedMultiTexImage1DEXT(enum texunit, enum target, int level, 18535bd8deadSopenharmony_ci enum internalformat, 18545bd8deadSopenharmony_ci sizei width, int border, 18555bd8deadSopenharmony_ci sizei imageSize, const void *data); 18565bd8deadSopenharmony_ci void CompressedMultiTexSubImage3DEXT(enum texunit, enum target, int level, 18575bd8deadSopenharmony_ci int xoffset, int yoffset, 18585bd8deadSopenharmony_ci int zoffset, 18595bd8deadSopenharmony_ci sizei width, sizei height, 18605bd8deadSopenharmony_ci sizei depth, enum format, 18615bd8deadSopenharmony_ci sizei imageSize, const void *data); 18625bd8deadSopenharmony_ci void CompressedMultiTexSubImage2DEXT(enum texunit, enum target, int level, 18635bd8deadSopenharmony_ci int xoffset, int yoffset, 18645bd8deadSopenharmony_ci sizei width, sizei height, 18655bd8deadSopenharmony_ci enum format, 18665bd8deadSopenharmony_ci sizei imageSize, const void *data); 18675bd8deadSopenharmony_ci void CompressedMultiTexSubImage1DEXT(enum texunit, enum target, int level, 18685bd8deadSopenharmony_ci int xoffset, sizei width, 18695bd8deadSopenharmony_ci enum format, 18705bd8deadSopenharmony_ci sizei imageSize, const void *data); 18715bd8deadSopenharmony_ci 18725bd8deadSopenharmony_ci void MultiTexBufferEXT(enum texunit, enum target, 18735bd8deadSopenharmony_ci enum internalformat, uint buffer); 18745bd8deadSopenharmony_ci 18755bd8deadSopenharmony_ci void MultiTexRenderbufferEXT(enum texunit, enum target, 18765bd8deadSopenharmony_ci uint renderbuffer); 18775bd8deadSopenharmony_ci 18785bd8deadSopenharmony_ci are equivalent (assuming no errors) to the following: 18795bd8deadSopenharmony_ci 18805bd8deadSopenharmony_ci int savedActiveTexture; 18815bd8deadSopenharmony_ci 18825bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 18835bd8deadSopenharmony_ci ActiveTexture(texunit); 18845bd8deadSopenharmony_ci XXX(...); 18855bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 18865bd8deadSopenharmony_ci 18875bd8deadSopenharmony_ci where XXX is the name of the command without its "Multi" prefix 18885bd8deadSopenharmony_ci (and extension suffixes are dropped or updated appropriately) 18895bd8deadSopenharmony_ci and ... is the list of the arguments for the command excluding the 18905bd8deadSopenharmony_ci index parameter." 18915bd8deadSopenharmony_ci 18925bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.0 Specification (Per-Fragment 18935bd8deadSopenharmony_ciOperations and the Frame Buffer) 18945bd8deadSopenharmony_ci 18955bd8deadSopenharmony_ci Add new section 4.4.7 (Named Access): 18965bd8deadSopenharmony_ci 18975bd8deadSopenharmony_ci "The following commands: 18985bd8deadSopenharmony_ci 18995bd8deadSopenharmony_ci void NamedRenderbufferStorageEXT(uint renderbuffer, 19005bd8deadSopenharmony_ci enum internalformat, 19015bd8deadSopenharmony_ci sizei width, sizei height); 19025bd8deadSopenharmony_ci 19035bd8deadSopenharmony_ci void NamedRenderbufferStorageMultisampleEXT(uint renderbuffer, 19045bd8deadSopenharmony_ci sizei samples, 19055bd8deadSopenharmony_ci enum internalformat, 19065bd8deadSopenharmony_ci sizei width, sizei height); 19075bd8deadSopenharmony_ci 19085bd8deadSopenharmony_ci void NamedRenderbufferStorageMultisampleCoverageEXT(uint renderbuffer, 19095bd8deadSopenharmony_ci sizei coverageSamples, 19105bd8deadSopenharmony_ci sizei colorSamples, 19115bd8deadSopenharmony_ci enum internalformat, 19125bd8deadSopenharmony_ci sizei width, 19135bd8deadSopenharmony_ci sizei height); 19145bd8deadSopenharmony_ci 19155bd8deadSopenharmony_ci operate identically to the corresponding command where "Named" is 19165bd8deadSopenharmony_ci deleted from the name (and extension suffixes are dropped or updated 19175bd8deadSopenharmony_ci appropriately) except, rather than updating the currently bound 19185bd8deadSopenharmony_ci renderbuffer for the renderbuffer target parameter (a parameter not 19195bd8deadSopenharmony_ci present for these listed commands), these "Named" commands update the 19205bd8deadSopenharmony_ci renderbuffer object named by the initial renderbuffer parameter. 19215bd8deadSopenharmony_ci The remaining parameters following the initial renderbuffer 19225bd8deadSopenharmony_ci parameter for the listed "Named" commands match the parameters 19235bd8deadSopenharmony_ci for the corresponding non-"Named" renderbuffer command and are 19245bd8deadSopenharmony_ci interpreted as they are for the non-"Named" renderbuffer command; 19255bd8deadSopenharmony_ci and the target parameter is assumed to be RENDERBUFFER. If the 19265bd8deadSopenharmony_ci renderbuffer object named by the renderbuffer parameter has not 19275bd8deadSopenharmony_ci been previously bound or has been deleted since the last binding, 19285bd8deadSopenharmony_ci the GL first creates a new state vector in the same manner as when 19295bd8deadSopenharmony_ci BindRenderbuffer creates a new renderbuffer object. 19305bd8deadSopenharmony_ci 19315bd8deadSopenharmony_ci The following commands (and query): 19325bd8deadSopenharmony_ci 19335bd8deadSopenharmony_ci void NamedFramebufferTexture1DEXT(uint framebuffer, 19345bd8deadSopenharmony_ci enum attachment, 19355bd8deadSopenharmony_ci enum textarget, uint texture, 19365bd8deadSopenharmony_ci int level); 19375bd8deadSopenharmony_ci void NamedFramebufferTexture2DEXT(uint framebuffer, 19385bd8deadSopenharmony_ci enum attachment, 19395bd8deadSopenharmony_ci enum textarget, uint texture, 19405bd8deadSopenharmony_ci int level); 19415bd8deadSopenharmony_ci void NamedFramebufferTexture3DEXT(uint framebuffer, 19425bd8deadSopenharmony_ci enum attachment, 19435bd8deadSopenharmony_ci enum textarget, uint texture, 19445bd8deadSopenharmony_ci int level, int zoffset); 19455bd8deadSopenharmony_ci 19465bd8deadSopenharmony_ci void NamedFramebufferRenderbufferEXT(uint framebuffer, 19475bd8deadSopenharmony_ci enum attachment, 19485bd8deadSopenharmony_ci enum renderbuffertarget, 19495bd8deadSopenharmony_ci uint renderbuffer); 19505bd8deadSopenharmony_ci 19515bd8deadSopenharmony_ci void NamedFramebufferTextureEXT(uint framebuffer, enum attachment, 19525bd8deadSopenharmony_ci uint texture, int level); 19535bd8deadSopenharmony_ci void NamedFramebufferTextureLayerEXT(uint framebuffer, 19545bd8deadSopenharmony_ci enum attachment, 19555bd8deadSopenharmony_ci uint texture, 19565bd8deadSopenharmony_ci int level, int layer); 19575bd8deadSopenharmony_ci void NamedFramebufferTextureFaceEXT(uint framebuffer, enum attachment, 19585bd8deadSopenharmony_ci uint texture, 19595bd8deadSopenharmony_ci int level, enum face); 19605bd8deadSopenharmony_ci 19615bd8deadSopenharmony_ci void GetNamedFramebufferAttachmentParameterivEXT(uint framebuffer, 19625bd8deadSopenharmony_ci enum attachment, 19635bd8deadSopenharmony_ci enum pname, 19645bd8deadSopenharmony_ci int *params); 19655bd8deadSopenharmony_ci 19665bd8deadSopenharmony_ci operate identically to the corresponding command (or query) where 19675bd8deadSopenharmony_ci "Named" is deleted from the name (and extension suffixes are dropped 19685bd8deadSopenharmony_ci or updated appropriately) except, rather than updating the currently 19695bd8deadSopenharmony_ci bound framebuffer for the framebuffer target parameter (a parameter 19705bd8deadSopenharmony_ci not present for these listed commands and query), these "Named" 19715bd8deadSopenharmony_ci commands update (or the query queries) the framebuffer object named by 19725bd8deadSopenharmony_ci the initial framebuffer parameter. The remaining parameters following 19735bd8deadSopenharmony_ci the initial framebuffer parameter for the listed "Named" commands 19745bd8deadSopenharmony_ci (or query) match the parameters for the corresponding non-"Named" 19755bd8deadSopenharmony_ci framebuffer command (or query) and are interpreted as they are for the 19765bd8deadSopenharmony_ci non-"Named" framebuffer command (or query); and the target parameter is 19775bd8deadSopenharmony_ci assumed to be FRAMEBUFFER. If the framebuffer object named by 19785bd8deadSopenharmony_ci the framebuffer parameter has not been previously bound or has been 19795bd8deadSopenharmony_ci deleted since the last binding, the GL first creates a new state 19805bd8deadSopenharmony_ci vector in the same manner as when BindFramebuffer creates a new 19815bd8deadSopenharmony_ci framebuffer object. 19825bd8deadSopenharmony_ci 19835bd8deadSopenharmony_ci The commands 19845bd8deadSopenharmony_ci 19855bd8deadSopenharmony_ci void FramebufferDrawBufferEXT(uint framebuffer, enum mode); 19865bd8deadSopenharmony_ci void FramebufferDrawBuffersEXT(uint framebuffer, sizei n, 19875bd8deadSopenharmony_ci const enum *bufs) 19885bd8deadSopenharmony_ci void FramebufferReadBufferEXT(uint framebuffer, enum mode); 19895bd8deadSopenharmony_ci 19905bd8deadSopenharmony_ci 19915bd8deadSopenharmony_ci operate identically to DrawBuffer, DrawBuffers, and ReadBuffer 19925bd8deadSopenharmony_ci (without the initial framebuffer parameter) respectively except rather 19935bd8deadSopenharmony_ci than updating the draw buffers or read buffer of the currently bound 19945bd8deadSopenharmony_ci framebuffer object or the default window-system-provided framebuffer 19955bd8deadSopenharmony_ci (i.e., FRAMEBUFFER_BINDING is zero), these commands update the 19965bd8deadSopenharmony_ci draw buffers or read buffer of the framebuffer object named by the 19975bd8deadSopenharmony_ci framebuffer parameter. When the framebuffer parameter is zero, 19985bd8deadSopenharmony_ci the default window-system provided framebuffer is updated (even if 19995bd8deadSopenharmony_ci the window-system-provided framebuffer is not currently bound). 20005bd8deadSopenharmony_ci If the framebuffer object named by the framebuffer parameter has not 20015bd8deadSopenharmony_ci been previously bound or has been deleted since the last binding, 20025bd8deadSopenharmony_ci the GL first creates a new state vector in the same manner as when 20035bd8deadSopenharmony_ci BindFramebuffer creates a new framebuffer object. 20045bd8deadSopenharmony_ci 20055bd8deadSopenharmony_ci The query 20065bd8deadSopenharmony_ci 20075bd8deadSopenharmony_ci void GetFramebufferParameterivEXT(uint framebuffer, enum pname, 20085bd8deadSopenharmony_ci int *param); 20095bd8deadSopenharmony_ci 20105bd8deadSopenharmony_ci returns the framebuffer state of the framebuffer object specified 20115bd8deadSopenharmony_ci by the framebuffer parameter. The pname parameter must be one of 20125bd8deadSopenharmony_ci framebuffer dependent values listed in either table 4.nnn (namely 20135bd8deadSopenharmony_ci DRAW_BUFFER, READ_BUFFER, or DRAW_BUFFER0 through DRAW_BUFFER15). 20145bd8deadSopenharmony_ci The query returns the same value in param that GetIntegerv would 20155bd8deadSopenharmony_ci return if called with pname and param as if the framebuffer specified 20165bd8deadSopenharmony_ci by the framebuffer parameter had been bound with BindFramebuffer. 20175bd8deadSopenharmony_ci If the framebuffer object named by the framebuffer parameter has not 20185bd8deadSopenharmony_ci been previously bound or has been deleted since the last binding, 20195bd8deadSopenharmony_ci the GL first creates a new state vector in the same manner as when 20205bd8deadSopenharmony_ci BindFramebuffer creates a new framebuffer object. 20215bd8deadSopenharmony_ci 20225bd8deadSopenharmony_ci The command 20235bd8deadSopenharmony_ci 20245bd8deadSopenharmony_ci enum CheckNamedFramebufferStatusEXT(uint framebuffer, 20255bd8deadSopenharmony_ci enum target); 20265bd8deadSopenharmony_ci 20275bd8deadSopenharmony_ci operates identically to CheckFramebufferStatus except rather 20285bd8deadSopenharmony_ci than checking the currently bound framebuffer for the framebuffer 20295bd8deadSopenharmony_ci target parameter, the status of the named framebuffer is checked 20305bd8deadSopenharmony_ci where the target parameter indicates how the framebuffer would 20315bd8deadSopenharmony_ci be bound. Because FRAMEBUFFER_UNSUPPORTED can be returned by 20325bd8deadSopenharmony_ci CheckFramebufferStatus due to an implementation-dependent set of 20335bd8deadSopenharmony_ci restrictions that might not be known until the framebuffer object is 20345bd8deadSopenharmony_ci bound with BindFramebuffer, CheckNamedFramebufferStatusARB may in 20355bd8deadSopenharmony_ci rare circumstances (ideally never) return FRAMEBUFFER_COMPLETE 20365bd8deadSopenharmony_ci when CheckFramebufferStatus with the same framebuffer object bound 20375bd8deadSopenharmony_ci would return FRAMEBUFFER_UNSUPPORTED. The framebuffer is checked 20385bd8deadSopenharmony_ci for drawing if target is FRAMEBUFFER or DRAW_FRAMEBUFFER, 20395bd8deadSopenharmony_ci and checked for reading if the target is READ_FRAMEBUFFER. 20405bd8deadSopenharmony_ci If the framebuffer object named by the framebuffer parameter has not 20415bd8deadSopenharmony_ci been previously bound or has been deleted since the last binding, 20425bd8deadSopenharmony_ci the GL first creates a new state vector in the same manner as when 20435bd8deadSopenharmony_ci BindFramebuffer creates a new framebuffer object. 20445bd8deadSopenharmony_ci 20455bd8deadSopenharmony_ci The commands 20465bd8deadSopenharmony_ci 20475bd8deadSopenharmony_ci void GenerateTextureMipmapEXT(uint texture, enum target); 20485bd8deadSopenharmony_ci 20495bd8deadSopenharmony_ci void GenerateMultiTexMipmapEXT(enum texunit, enum target); 20505bd8deadSopenharmony_ci 20515bd8deadSopenharmony_ci operate identically to GenerateMipmap except they use the 20525bd8deadSopenharmony_ci texture specified by the named texture or specified texture unit 20535bd8deadSopenharmony_ci respectively. The target parameter must be a token accepted by 20545bd8deadSopenharmony_ci GenerateMipmap. 20555bd8deadSopenharmony_ci 20565bd8deadSopenharmony_ci If GenerateTextureMipmapARB's texture parameter is for an unused 20575bd8deadSopenharmony_ci name, the name becomes used and the named texture object is set 20585bd8deadSopenharmony_ci to a new state vector, comprising all the state values listed in 20595bd8deadSopenharmony_ci section 3.8.11, set to the same initial values prior to the command's 20605bd8deadSopenharmony_ci state update. If the texture parameter is for a used name and that 20615bd8deadSopenharmony_ci named texture object has a different target than the specified target 20625bd8deadSopenharmony_ci parameter, the INVALID_OPERATION error is generated." 20635bd8deadSopenharmony_ci 20645bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.0 Specification (Special Functions) 20655bd8deadSopenharmony_ci 20665bd8deadSopenharmony_ci In Section 5.4 (Display Lists): 20675bd8deadSopenharmony_ci 20685bd8deadSopenharmony_ci Add to list (page 310) of "Client state" commands "not compiled into 20695bd8deadSopenharmony_ci the display list but are executed immediately": 20705bd8deadSopenharmony_ci 20715bd8deadSopenharmony_ci PushClientAttribDefaultEXT, ClientAttribDefaultEXT 20725bd8deadSopenharmony_ci 20735bd8deadSopenharmony_ci Add to list (page 310) of "Framebuffer and renderbuffer objects" 20745bd8deadSopenharmony_ci commands "not compiled into the display list but are executed 20755bd8deadSopenharmony_ci immediately": 20765bd8deadSopenharmony_ci 20775bd8deadSopenharmony_ci CheckNamedFramebufferStatusEXT, NamedRenderbufferStorageEXT, 20785bd8deadSopenharmony_ci NamedFramebufferTexture1DEXT, NamedFramebufferTexture2DEXT, 20795bd8deadSopenharmony_ci NamedFramebufferTexture3DEXT, NamedFramebufferRenderbufferEXT, 20805bd8deadSopenharmony_ci GenerateTextureMipmapEXT, GenerateMultiTexMipmapEXT 20815bd8deadSopenharmony_ci 20825bd8deadSopenharmony_ci Add to the list (page 310) of "Vertex Buffer Objects" commands 20835bd8deadSopenharmony_ci "not compiled into the display list but are executed immediately": 20845bd8deadSopenharmony_ci 20855bd8deadSopenharmony_ci NamedCopyBufferSubDataEXT 20865bd8deadSopenharmony_ci 20875bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.0 Specification (State and 20885bd8deadSopenharmony_ciState Requests) 20895bd8deadSopenharmony_ci 20905bd8deadSopenharmony_ci Change section 6.1.1 (Simple Queries) so the second and third 20915bd8deadSopenharmony_ci paragraphs read: 20925bd8deadSopenharmony_ci 20935bd8deadSopenharmony_ci "Indexed simple state variables are queried with the commands: 20945bd8deadSopenharmony_ci 20955bd8deadSopenharmony_ci void GetBooleani_v(enum target, uint index, boolean *data); 20965bd8deadSopenharmony_ci void GetIntegeri_v(enum target, uint index, int *data); 20975bd8deadSopenharmony_ci void GetFloati_vEXT(enum target, uint index, float *data); 20985bd8deadSopenharmony_ci void GetDoublei_vEXT(enum target, uint index, double *data); 20995bd8deadSopenharmony_ci 21005bd8deadSopenharmony_ci void GetBooleanIndexedvEXT(enum target, uint index, boolean *data); 21015bd8deadSopenharmony_ci void GetIntegerIndexedvEXT(enum target, uint index, int *data); 21025bd8deadSopenharmony_ci void GetFloatIndexedvEXT(enum target, uint index, float *data); 21035bd8deadSopenharmony_ci void GetDoubleIndexedvEXT(enum target, uint index, double *data); 21045bd8deadSopenharmony_ci 21055bd8deadSopenharmony_ci target is the name of the indexed state and index is the index of 21065bd8deadSopenharmony_ci the particular element being queried. data is a pointer to a scalar 21075bd8deadSopenharmony_ci or array of the indicated type in which to place the returned data. 21085bd8deadSopenharmony_ci An INVALID_VALUE error is generated if index is outside the valide 21095bd8deadSopenharmony_ci range for the indexed state target. 21105bd8deadSopenharmony_ci 21115bd8deadSopenharmony_ci Table 6.indexedGenericQueryCommands: 21125bd8deadSopenharmony_ci 21135bd8deadSopenharmony_ci Selector-free Command Name GetXXX 21145bd8deadSopenharmony_ci -------------------------- -------------------- 21155bd8deadSopenharmony_ci GetBooleanIndexedvEXT GetBooleanv 21165bd8deadSopenharmony_ci GetIntegerIndexedvEXT GetIntegerv 21175bd8deadSopenharmony_ci GetFloatIndexedvEXT GetFloatv 21185bd8deadSopenharmony_ci GetDoubleIndexedvEXT GetDoublev 21195bd8deadSopenharmony_ci GetBooleani_v GetBooleanv 21205bd8deadSopenharmony_ci GetIntegeri_v GetIntegerv 21215bd8deadSopenharmony_ci GetFloati_vEXT GetFloatv 21225bd8deadSopenharmony_ci GetDoublei_vEXT GetDoublev 21235bd8deadSopenharmony_ci 21245bd8deadSopenharmony_ci When the target to one of these indexed queries is one 21255bd8deadSopenharmony_ci of PROGRAM_MATRIX_EXT, TRANSPOSE_PROGRAM_MATRIX_EXT, or 21265bd8deadSopenharmony_ci PROGRAM_MATRIX_STACK_DEPTH_EXT, the query operates indentically to 21275bd8deadSopenharmony_ci (assuming no errors): 21285bd8deadSopenharmony_ci 21295bd8deadSopenharmony_ci int savedMatrixMode; 21305bd8deadSopenharmony_ci GetIntegerv(MATRIX_MODE, &savedMatrixMode); 21315bd8deadSopenharmony_ci MatrixMode(GL_MATRIX0_ARB+index); 21325bd8deadSopenharmony_ci switch (target) { 21335bd8deadSopenharmony_ci case PROGRAM_MATRIX_EXT: 21345bd8deadSopenharmony_ci GetXXX(CURRENT_MATRIX_ARB, params); 21355bd8deadSopenharmony_ci break; 21365bd8deadSopenharmony_ci case TRANSPOSE_PROGRAM_MATRIX_EXT: 21375bd8deadSopenharmony_ci GetXXX(TRANSPOSE_CURRENT_MATRIX_ARB, params); 21385bd8deadSopenharmony_ci break; 21395bd8deadSopenharmony_ci case PROGRAM_MATRIX_STACK_DEPTH_EXT: 21405bd8deadSopenharmony_ci GetXXX(CURRENT_MATRIX_STACK_DEPTH_ARB, params); 21415bd8deadSopenharmony_ci break; 21425bd8deadSopenharmony_ci } 21435bd8deadSopenharmony_ci MatrixMode(savedMatrixMode); 21445bd8deadSopenharmony_ci 21455bd8deadSopenharmony_ci where GetXXX is found in Table 6.indexedGenericQueryCommands. 21465bd8deadSopenharmony_ci 21475bd8deadSopenharmony_ci When the target to one of these indexed queries is one 21485bd8deadSopenharmony_ci of CURRENT_MATRIX_NV, CURRENT_MATRIX_STACK_DEPTH_NV, 21495bd8deadSopenharmony_ci CURRENT_RASTER_TEXTURE_COORDS, CURRENT_TEXTURE_COORDS, 21505bd8deadSopenharmony_ci TEXTURE_BINDING_1D, TEXTURE_BINDING_1D_ARRAY, 21515bd8deadSopenharmony_ci TEXTURE_BINDING_2D, TEXTURE_BINDING_2D_ARRAY, 21525bd8deadSopenharmony_ci TEXTURE_BINDING_3D, TEXTURE_BINDING_BUFFER_EXT, 21535bd8deadSopenharmony_ci TEXTURE_BINDING_CUBE_MAP, TEXTURE_BINDING_CUBE_MAP_ARRAY_NV, 21545bd8deadSopenharmony_ci TEXTURE_BINDING_RECTANGLE_ARB, TEXTURE_BINDING_RENDERBUFFER_NV, 21555bd8deadSopenharmony_ci TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV, 21565bd8deadSopenharmony_ci TEXTURE_BUFFER_DATA_STORE_BINDING_EXT, TEXTURE_BUFFER_FORMAT_EXT, 21575bd8deadSopenharmony_ci TEXTURE_GEN_Q, TEXTURE_GEN_R, TEXTURE_GEN_S, TEXTURE_GEN_T, 21585bd8deadSopenharmony_ci TEXTURE_MATRIX, TEXTURE_STACK_DEPTH, TRANSPOSE_TEXTURE_MATRIX, 21595bd8deadSopenharmony_ci GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP, or 21605bd8deadSopenharmony_ci GL_TEXTURE_RECTANGLE_ARB, the query operates indentically (assuming 21615bd8deadSopenharmony_ci no errors) to: 21625bd8deadSopenharmony_ci 21635bd8deadSopenharmony_ci int savedActiveTexture; 21645bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 21655bd8deadSopenharmony_ci ActiveTexture(TEXTURE0+index); 21665bd8deadSopenharmony_ci GetXXX(target, params); 21675bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 21685bd8deadSopenharmony_ci 21695bd8deadSopenharmony_ci where GetXXX is found in Table 6.indexedGenericQueryCommands. 21705bd8deadSopenharmony_ci 21715bd8deadSopenharmony_ci When the target to one of these indexed queries is one of 21725bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY, TEXTURE_COORD_ARRAY_BUFFER_BINDING, 21735bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY_COUNT, TEXTURE_COORD_ARRAY_SIZE, 21745bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY_STRIDE, or TEXTURE_COORD_ARRAY_TYPE, the query 21755bd8deadSopenharmony_ci operates indentically (assuming no errors) to: 21765bd8deadSopenharmony_ci 21775bd8deadSopenharmony_ci int savedClientActiveTexture; 21785bd8deadSopenharmony_ci GetIntegerv(CLIENT_ACTIVE_TEXTURE, &savedClientActiveTexture); 21795bd8deadSopenharmony_ci ClientActiveTexture(TEXTURE0+index); 21805bd8deadSopenharmony_ci GetXXX(target, params); 21815bd8deadSopenharmony_ci ClientActiveTexture(savedClientActiveTexture); 21825bd8deadSopenharmony_ci 21835bd8deadSopenharmony_ci where GetXXX is found in Table 6.indexedGenericQueryCommands. 21845bd8deadSopenharmony_ci 21855bd8deadSopenharmony_ci Finally, 21865bd8deadSopenharmony_ci 21875bd8deadSopenharmony_ci boolean IsEnabled(enum value); 21885bd8deadSopenharmony_ci 21895bd8deadSopenharmony_ci can be used to determine if value is currently enabled (as with 21905bd8deadSopenharmony_ci Enable) or disabled and the queries 21915bd8deadSopenharmony_ci 21925bd8deadSopenharmony_ci boolean IsEnabledi(enum target, uint index); 21935bd8deadSopenharmony_ci boolean IsEnabledIndexedEXT(enum cap, uint index); 21945bd8deadSopenharmony_ci 21955bd8deadSopenharmony_ci can be used to determine if the indexed state corresponding to target 21965bd8deadSopenharmony_ci and index is enabled or disabled. An INVALID_VALUE error is generated 21975bd8deadSopenharmony_ci if index is outside the valid range for the indexed state target. 21985bd8deadSopenharmony_ci 21995bd8deadSopenharmony_ci When the target to IsEnabledi or IsEnabledIndexedEXT is 22005bd8deadSopenharmony_ci one of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_CUBE_MAP, 22015bd8deadSopenharmony_ci TEXTURE_RECTANGLE_ARB, TEXTURE_GEN_S, TEXTURE_GEN_T, TEXTURE_GEN_R, 22025bd8deadSopenharmony_ci or TEXTURE_GEN_Q, the query operates indentically (assuming no 22035bd8deadSopenharmony_ci errors) to: 22045bd8deadSopenharmony_ci 22055bd8deadSopenharmony_ci int savedActiveTexture; 22065bd8deadSopenharmony_ci boolean rv; 22075bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 22085bd8deadSopenharmony_ci ActiveTexture(TEXTURE0+index); 22095bd8deadSopenharmony_ci rv = IsEnabled(cap); 22105bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 22115bd8deadSopenharmony_ci return rv; 22125bd8deadSopenharmony_ci 22135bd8deadSopenharmony_ci When the target to IsEnabledi or IsEnabledIndexedEXT is 22145bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY, the query operates indentically (assuming no 22155bd8deadSopenharmony_ci errors) to: 22165bd8deadSopenharmony_ci 22175bd8deadSopenharmony_ci int savedClientActiveTexture; 22185bd8deadSopenharmony_ci boolean rv; 22195bd8deadSopenharmony_ci GetIntegerv(CLIENT_ACTIVE_TEXTURE, &savedClientActiveTexture); 22205bd8deadSopenharmony_ci ClientActiveTexture(TEXTURE0+index); 22215bd8deadSopenharmony_ci rv = IsEnabled(cap); 22225bd8deadSopenharmony_ci ClientActiveTexture(savedClientActiveTexture); 22235bd8deadSopenharmony_ci return rv;" 22245bd8deadSopenharmony_ci 22255bd8deadSopenharmony_ci Add new paragraph to the end of section 6.1.3 (Enumerated Queries): 22265bd8deadSopenharmony_ci 22275bd8deadSopenharmony_ci "These commands 22285bd8deadSopenharmony_ci 22295bd8deadSopenharmony_ci void GetTextureImageEXT(uint texture, enum target, 22305bd8deadSopenharmony_ci int level, 22315bd8deadSopenharmony_ci enum format, enum type, void *pixels); 22325bd8deadSopenharmony_ci 22335bd8deadSopenharmony_ci void GetTextureParameterfvEXT(uint texture, enum target, 22345bd8deadSopenharmony_ci enum pname, float *params); 22355bd8deadSopenharmony_ci void GetTextureParameterivEXT(uint texture, enum target, 22365bd8deadSopenharmony_ci enum pname, int *params); 22375bd8deadSopenharmony_ci 22385bd8deadSopenharmony_ci void GetTextureLevelParameterfvEXT(uint texture, enum target, 22395bd8deadSopenharmony_ci int level, 22405bd8deadSopenharmony_ci enum pname, float *params); 22415bd8deadSopenharmony_ci void GetTextureLevelParameterivEXT(uint texture, enum target, 22425bd8deadSopenharmony_ci int level, 22435bd8deadSopenharmony_ci enum pname, int *params); 22445bd8deadSopenharmony_ci 22455bd8deadSopenharmony_ci void GetTextureParameterIivEXT(uint texture, enum target, 22465bd8deadSopenharmony_ci enum pname, int *params); 22475bd8deadSopenharmony_ci void GetTextureParameterIuivEXT(uint texture, enum target, 22485bd8deadSopenharmony_ci enum pname, uint *params); 22495bd8deadSopenharmony_ci 22505bd8deadSopenharmony_ci operate identically to the corresponding texture query command where 22515bd8deadSopenharmony_ci "Texture" is substituted for "Tex" (and extension suffixes are dropped 22525bd8deadSopenharmony_ci or updated appropriately) except, rather than querying the current 22535bd8deadSopenharmony_ci bound texture for the texture unit indicated by the current active 22545bd8deadSopenharmony_ci texture state and the target parameter, these "Texture" commands 22555bd8deadSopenharmony_ci query the texture object named by the initial texture parameter. 22565bd8deadSopenharmony_ci The remaining parameters following the initial texture parameter 22575bd8deadSopenharmony_ci for the listed "Texture" commands match the parameters for the 22585bd8deadSopenharmony_ci corresponding "Tex" command and are interpreted as they are for the 22595bd8deadSopenharmony_ci "Tex" command." If the texture parameter is for an unused name, the 22605bd8deadSopenharmony_ci name becomes used and the named texture object is set to a new state 22615bd8deadSopenharmony_ci vector, comprising all the state values listed in section 3.8.11, 22625bd8deadSopenharmony_ci set to the same initial values prior to the command's state query. 22635bd8deadSopenharmony_ci If the texture parameter is for a used name and that named texture 22645bd8deadSopenharmony_ci object has a different target than the specified target parameter, 22655bd8deadSopenharmony_ci the INVALID_OPERATION error is generated. One consequence of this 22665bd8deadSopenharmony_ci error for commands that accepts TEXTURE_PROXY_* as a valid target 22675bd8deadSopenharmony_ci parameter (GetTextureLevelParameter*, but not GetTextureParameter*) 22685bd8deadSopenharmony_ci is TEXTURE_PROXY_* target tokens generate errors if used with a 22695bd8deadSopenharmony_ci non-zero texture parameter because the target of a non-default 22705bd8deadSopenharmony_ci (non-zero) texture object is never a proxy target." 22715bd8deadSopenharmony_ci 22725bd8deadSopenharmony_ci Add new paragraph after the GetPointerv description in section 6.1.11 22735bd8deadSopenharmony_ci (Pointer and String Queries): 22745bd8deadSopenharmony_ci 22755bd8deadSopenharmony_ci "The following query 22765bd8deadSopenharmony_ci 22775bd8deadSopenharmony_ci void GetPointerIndexedvEXT(enum pname, uint index, void **params); 22785bd8deadSopenharmony_ci 22795bd8deadSopenharmony_ci is equivalent (assuming no errors) to the following: 22805bd8deadSopenharmony_ci 22815bd8deadSopenharmony_ci int savedClientActiveTexture; 22825bd8deadSopenharmony_ci 22835bd8deadSopenharmony_ci GetIntegerv(CLIENT_ACTIVE_TEXTURE, &savedClientActiveTexture); 22845bd8deadSopenharmony_ci ClientActiveTexture(TEXTURE0+index); 22855bd8deadSopenharmony_ci GetPointerv(pname, params); 22865bd8deadSopenharmony_ci ClientActiveTexture(savedClientActiveTexture); 22875bd8deadSopenharmony_ci 22885bd8deadSopenharmony_ci where index is the index parameter to the listed queries and GetXXX 22895bd8deadSopenharmony_ci is found in Table 6.indexedGenericQueryCommands. when the pname 22905bd8deadSopenharmony_ci parameter is TEXTURE_COORD_ARRAY_POINTER." 22915bd8deadSopenharmony_ci 22925bd8deadSopenharmony_ci Add new paragraph to the end of section 6.1.13 (Buffer Object Queries): 22935bd8deadSopenharmony_ci 22945bd8deadSopenharmony_ci "These commands 22955bd8deadSopenharmony_ci 22965bd8deadSopenharmony_ci void GetNamedBufferParameterivEXT(uint buffer, 22975bd8deadSopenharmony_ci enum pname, int *params); 22985bd8deadSopenharmony_ci void GetNamedBufferPointervEXT(uint buffer, 22995bd8deadSopenharmony_ci enum pname, void* *params); 23005bd8deadSopenharmony_ci void GetNamedBufferSubDataEXT(uint buffer, 23015bd8deadSopenharmony_ci intptr offset, sizeiptr size, void *data); 23025bd8deadSopenharmony_ci 23035bd8deadSopenharmony_ci operate identically to the corresponding command where "Named" is 23045bd8deadSopenharmony_ci deleted from the name (and extension suffixes are dropped or updated 23055bd8deadSopenharmony_ci appropriately) except, rather than querying the currently bound buffer 23065bd8deadSopenharmony_ci for the buffer target parameter (a parameter not present for these 23075bd8deadSopenharmony_ci listed commands), these "Named" commands query the buffer object 23085bd8deadSopenharmony_ci named by the initial buffer parameter. The remaining parameters 23095bd8deadSopenharmony_ci following the initial buffer parameter for the listed "Named" commands 23105bd8deadSopenharmony_ci match the parameters for the corresponding non-"Named" buffer command 23115bd8deadSopenharmony_ci (except the target parameter is not needed because the buffer object 23125bd8deadSopenharmony_ci to query is identified by its name) and are interpreted as they 23135bd8deadSopenharmony_ci are for the non-"Named" buffer command. If the buffer object named 23145bd8deadSopenharmony_ci by the buffer parameter has not been previously bound or has been 23155bd8deadSopenharmony_ci deleted since the last binding, the GL first creates a new state 23165bd8deadSopenharmony_ci vector, initialized with a zero-sized memory buffer and comprising the 23175bd8deadSopenharmony_ci state values listed in table 2.6. There is no buffer corresponding 23185bd8deadSopenharmony_ci to the name zero, these commands generate the INVALID_OPERATION 23195bd8deadSopenharmony_ci error if the buffer parameter is zero." 23205bd8deadSopenharmony_ci 23215bd8deadSopenharmony_ci Add new paragraph to the end of section after 6.1.14 (Vertex Array 23225bd8deadSopenharmony_ci Object Queries): 23235bd8deadSopenharmony_ci 23245bd8deadSopenharmony_ci "The commands 23255bd8deadSopenharmony_ci 23265bd8deadSopenharmony_ci void GetVertexArrayIntegervEXT(uint vaobj, enum pname, 23275bd8deadSopenharmony_ci int *param); 23285bd8deadSopenharmony_ci void GetVertexArrayPointervEXT(uint vaobj, enum pname, 23295bd8deadSopenharmony_ci void **param); 23305bd8deadSopenharmony_ci void GetVertexArrayIntegeri_vEXT(uint vaobj, 23315bd8deadSopenharmony_ci uint index, 23325bd8deadSopenharmony_ci enum pname, 23335bd8deadSopenharmony_ci int *param); 23345bd8deadSopenharmony_ci void GetVertexArrayPointeri_vEXT(uint vaobj, 23355bd8deadSopenharmony_ci uint index, 23365bd8deadSopenharmony_ci enum pname, 23375bd8deadSopenharmony_ci void **param); 23385bd8deadSopenharmony_ci 23395bd8deadSopenharmony_ci queries the parameters of the vertex array object named by vaobj. For 23405bd8deadSopenharmony_ci GetVertexArrayIntegervEXT, pname must be one of the "Get value" tokens 23415bd8deadSopenharmony_ci in tables 6.6, 6.7, 6.8, and 6.9 that use GetIntegerv, IsEnabled, or 23425bd8deadSopenharmony_ci GetPointerv for their "Get command" (so excluding the VERTEX_ATTRIB_* 23435bd8deadSopenharmony_ci tokens). For GetVertexArrayIntegeri_vEXT, pname must be one of the 23445bd8deadSopenharmony_ci "Get value" tokens in tables 6.8 and 6.9 that use GetVertexAttribiv 23455bd8deadSopenharmony_ci or GetVertexAttribPointerv (so allowing only the VERTEX_ATTRIB_* 23465bd8deadSopenharmony_ci tokens) or a token of the form TEXTURE_COORD_ARRAY (the enable) or 23475bd8deadSopenharmony_ci TEXTURE_COORD_ARRAY_*; index identifies the vertex attribute 23485bd8deadSopenharmony_ci array to query or texture coordinate set index respectively. For 23495bd8deadSopenharmony_ci GetVertexArrayPointervEXT, pname must be a *_ARRAY_POINTER token from 23505bd8deadSopenharmony_ci tables 6.6, 6.7, and 6.8 excluding VERTEX_ATTRIB_ARRAY_POINTER. For 23515bd8deadSopenharmony_ci GetVertexArrayPointeri_vEXT, pname must be VERTEX_ATTRIB_ARRAY_POINTER 23525bd8deadSopenharmony_ci or TEXTURE_COORD_ARRAY_POINTER with the index parameter indicating 23535bd8deadSopenharmony_ci the vertex attribute or texture coordindate set index. 23545bd8deadSopenharmony_ci 23555bd8deadSopenharmony_ci If the state queried by GetVertexArrayIntegervEXT or 23565bd8deadSopenharmony_ci GetVertexArrayVertexAttribIntegervEXT is maintained as a pointer, 23575bd8deadSopenharmony_ci the least significant bits of the pointer that fit within an int are 23585bd8deadSopenharmony_ci returned in case a pointer is larger than an int. This behavior 23595bd8deadSopenharmony_ci allows pointers treated as offsets (when less than 2^31) to be 23605bd8deadSopenharmony_ci returned as integer values. 23615bd8deadSopenharmony_ci 23625bd8deadSopenharmony_ci If the vertex array object named by the vaobj parameter has not 23635bd8deadSopenharmony_ci been previously bound but has been generated (without subsequent 23645bd8deadSopenharmony_ci deletion) by GenVertexArrays, the GL first creates a new state 23655bd8deadSopenharmony_ci vector in the same manner as when BindVertexArray creates a new 23665bd8deadSopenharmony_ci vertex array object (hence the initial state will be returned). 23675bd8deadSopenharmony_ci However these queries fail and an INVALID_OPERATION error is 23685bd8deadSopenharmony_ci generated if vaobj is not a name returned from a previous call 23695bd8deadSopenharmony_ci to GenVertexArrays, or if such a name has since been deleted with 23705bd8deadSopenharmony_ci DeleteVertexArrays." 23715bd8deadSopenharmony_ci 23725bd8deadSopenharmony_ci Add NEW section after 6.1.15 (Shader and Program Queries): 23735bd8deadSopenharmony_ci 23745bd8deadSopenharmony_ci "16.1.X Multitexture Queries 23755bd8deadSopenharmony_ci 23765bd8deadSopenharmony_ci These queries 23775bd8deadSopenharmony_ci 23785bd8deadSopenharmony_ci void GetMultiTexEnvfvEXT(enum texunit, enum target, 23795bd8deadSopenharmony_ci enum pname, float *params); 23805bd8deadSopenharmony_ci void GetMultiTexEnvivEXT(enum texunit, enum target, 23815bd8deadSopenharmony_ci enum pname, int *params); 23825bd8deadSopenharmony_ci 23835bd8deadSopenharmony_ci void GetMultiTexGendvEXT(enum texunit, enum coord, 23845bd8deadSopenharmony_ci enum pname, double *params); 23855bd8deadSopenharmony_ci void GetMultiTexGenfvEXT(enum texunit, enum coord, 23865bd8deadSopenharmony_ci enum pname, float *params); 23875bd8deadSopenharmony_ci void GetMultiTexGenivEXT(enum texunit, enum coord, 23885bd8deadSopenharmony_ci enum pname, int *params); 23895bd8deadSopenharmony_ci 23905bd8deadSopenharmony_ci void GetMultiTexImageEXT(enum texunit, enum target, 23915bd8deadSopenharmony_ci int level, 23925bd8deadSopenharmony_ci enum format, enum type, void *pixels); 23935bd8deadSopenharmony_ci 23945bd8deadSopenharmony_ci void GetMultiTexParameterfvEXT(enum texunit, enum target, 23955bd8deadSopenharmony_ci enum pname, float *params); 23965bd8deadSopenharmony_ci void GetMultiTexParameterivEXT(enum texunit, enum target, 23975bd8deadSopenharmony_ci enum pname, int *params); 23985bd8deadSopenharmony_ci 23995bd8deadSopenharmony_ci void GetMultiTexParameterIivEXT(enum texunit, enum target, 24005bd8deadSopenharmony_ci enum pname, int *params); 24015bd8deadSopenharmony_ci void GetMultiTexParameterIuivEXT(enum texunit, enum target, 24025bd8deadSopenharmony_ci enum pname, uint *params); 24035bd8deadSopenharmony_ci 24045bd8deadSopenharmony_ci void GetMultiTexLevelParameterfvEXT(enum texunit, enum target, 24055bd8deadSopenharmony_ci int level, 24065bd8deadSopenharmony_ci enum pname, float *params); 24075bd8deadSopenharmony_ci void GetMultiTexLevelParameterivEXT(enum texunit, enum target, 24085bd8deadSopenharmony_ci int level, 24095bd8deadSopenharmony_ci enum pname, int *params); 24105bd8deadSopenharmony_ci 24115bd8deadSopenharmony_ci void GetCompressedMultiTexImageEXT(enum texunit, enum target, 24125bd8deadSopenharmony_ci int level, void *img); 24135bd8deadSopenharmony_ci 24145bd8deadSopenharmony_ci are equivalent (assuming no errors) to the following: 24155bd8deadSopenharmony_ci 24165bd8deadSopenharmony_ci int savedActiveTexture, savedClientActiveTexture; 24175bd8deadSopenharmony_ci 24185bd8deadSopenharmony_ci GetIntegerv(ACTIVE_TEXTURE, &savedActiveTexture); 24195bd8deadSopenharmony_ci ActiveTexture(texunit); 24205bd8deadSopenharmony_ci GetXXX(...); 24215bd8deadSopenharmony_ci ActiveTexture(savedActiveTexture); 24225bd8deadSopenharmony_ci 24235bd8deadSopenharmony_ci where GetXXX is found in Table 6.MultiTexQueryCommands and 24245bd8deadSopenharmony_ci ... is the list of the arguments for the command excluding the 24255bd8deadSopenharmony_ci index parameter. 24265bd8deadSopenharmony_ci 24275bd8deadSopenharmony_ci Table 6.MultiTexQueryCommands: 24285bd8deadSopenharmony_ci 24295bd8deadSopenharmony_ci Selector-free Command Name GetXXX 24305bd8deadSopenharmony_ci ------------------------------ -------------------- 24315bd8deadSopenharmony_ci GetMultiTexEnvfvEXT GetTexEnvfv 24325bd8deadSopenharmony_ci GetMultiTexEnvivEXT GetTexEnviv 24335bd8deadSopenharmony_ci GetMultiTexGendvEXT GetTexGendv 24345bd8deadSopenharmony_ci GetMultiTexGenfvEXT GetTexGenfv 24355bd8deadSopenharmony_ci GetMultiTexGenivEXT GetTexGeniv 24365bd8deadSopenharmony_ci GetMultiTexImageEXT GetTexImage 24375bd8deadSopenharmony_ci GetMultiTexParameterfvEXT GetTexParameterfv 24385bd8deadSopenharmony_ci GetMultiTexParameterivEXT GetTexParameteriv 24395bd8deadSopenharmony_ci GetMultiTexParameterIivEXT GetTexParameterIiv 24405bd8deadSopenharmony_ci GetMultiTexParameterIuivEXT GetTexParameterIuiv 24415bd8deadSopenharmony_ci GetMultiTexLevelParameterivEXT GetTexLevelParameteriv 24425bd8deadSopenharmony_ci GetMultiTexLevelParameterfvEXT GetTexLevelParameterfv 24435bd8deadSopenharmony_ci GetCompressedMultiTexImageEXT GetCompressedTexImage 24445bd8deadSopenharmony_ci 24455bd8deadSopenharmony_ci Add new paragraphs after the first paragraph of section 6.1.15 24465bd8deadSopenharmony_ci (Saving and Restoring State): 24475bd8deadSopenharmony_ci 24485bd8deadSopenharmony_ci "The command 24495bd8deadSopenharmony_ci 24505bd8deadSopenharmony_ci void ClientAttribDefaultEXT(bitfield mask); 24515bd8deadSopenharmony_ci 24525bd8deadSopenharmony_ci resets portions of the client state, depending on the bits set 24535bd8deadSopenharmony_ci in the mask parameter, to the initial values of the state. 24545bd8deadSopenharmony_ci When CLIENT_PIXEL_STORE_BIT is set in mask, the pixel store 24555bd8deadSopenharmony_ci state is set to the initial values documented in table 6.23. 24565bd8deadSopenharmony_ci When CLIENT_VERTEX_ARRAY_BIT is set in mask, the client vertex 24575bd8deadSopenharmony_ci array state is set to the initial values documented in table 6.6, 24585bd8deadSopenharmony_ci 6.7, and 6.8. 24595bd8deadSopenharmony_ci 24605bd8deadSopenharmony_ci The command 24615bd8deadSopenharmony_ci 24625bd8deadSopenharmony_ci void PushClientAttribDefaultEXT(bitfield mask); 24635bd8deadSopenharmony_ci 24645bd8deadSopenharmony_ci is equivalent to: 24655bd8deadSopenharmony_ci 24665bd8deadSopenharmony_ci PushClientAttrib(mask); 24675bd8deadSopenharmony_ci ClientAttribDefaultEXT(mask);" 24685bd8deadSopenharmony_ci 24695bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 3.0 Specification (Invariance) 24705bd8deadSopenharmony_ci 24715bd8deadSopenharmony_ci None. 24725bd8deadSopenharmony_ci 24735bd8deadSopenharmony_ciInteractions with the ARB_texture_rectangle specification 24745bd8deadSopenharmony_ci 24755bd8deadSopenharmony_ci If ARB_texture_rectangle (or NV_texture_rectangle or 24765bd8deadSopenharmony_ci EXT_texture_rectangle) is NOT supported, ignore references to 24775bd8deadSopenharmony_ci TEXTURE_RECTANGLE_ARB and GL_TEXTURE_BINDING_RECTANGLE_ARB in amended 24785bd8deadSopenharmony_ci section 3.8.16 and new section 6.1.X. 24795bd8deadSopenharmony_ci 24805bd8deadSopenharmony_ciInteractions with the ARB_vertex_program specification 24815bd8deadSopenharmony_ci 24825bd8deadSopenharmony_ci If ARB_vertex_program is NOT supported, ignore the support 24835bd8deadSopenharmony_ci for PROGRAM_MATRIX_EXT, TRANSPOSE_PROGRAM_MATRIX_EXT, 24845bd8deadSopenharmony_ci and PROGRAM_MATRIX_STACK_DEPTH_EXT described for the 24855bd8deadSopenharmony_ci GetBooleanIndexedvEXT, GetIntegerIndexedvEXT, GetFloatIndexedvEXT, 24865bd8deadSopenharmony_ci and GetDoubleIndexedvEXT commands in section 6.1.X. 24875bd8deadSopenharmony_ci 24885bd8deadSopenharmony_ciAdditions to the ARB_vertex_program specification 24895bd8deadSopenharmony_ci 24905bd8deadSopenharmony_ci Add to the end of section 2.14.1 (Program Objects): 24915bd8deadSopenharmony_ci 24925bd8deadSopenharmony_ci "This command 24935bd8deadSopenharmony_ci 24945bd8deadSopenharmony_ci void NamedProgramStringEXT(uint program, enum target, enum format, 24955bd8deadSopenharmony_ci sizei len, const void *string); 24965bd8deadSopenharmony_ci 24975bd8deadSopenharmony_ci operates identically to ProgramStringARB except, rather than 24985bd8deadSopenharmony_ci specifying the string for the currently bound program for the program 24995bd8deadSopenharmony_ci target parameter, NamedProgramStringARB specifies the program string 25005bd8deadSopenharmony_ci for the program object named by the initial program parameter. 25015bd8deadSopenharmony_ci 25025bd8deadSopenharmony_ci If the program parameter is for an unused program, the name becomes 25035bd8deadSopenharmony_ci used and the named program object is set to a new program state 25045bd8deadSopenharmony_ci vector as if BindProgramARB had been called on the unused program 25055bd8deadSopenharmony_ci name with the given target parameter but without changing the target's 25065bd8deadSopenharmony_ci program binding. 25075bd8deadSopenharmony_ci 25085bd8deadSopenharmony_ci If the program parameter is for a used name and that named program 25095bd8deadSopenharmony_ci object has a different target than the specified target parameter, 25105bd8deadSopenharmony_ci the INVALID_OPERATION error is generated. 25115bd8deadSopenharmony_ci 25125bd8deadSopenharmony_ci These commands 25135bd8deadSopenharmony_ci 25145bd8deadSopenharmony_ci void NamedProgramLocalParameter4dEXT(uint program, enum target, 25155bd8deadSopenharmony_ci uint index, 25165bd8deadSopenharmony_ci double x, double y, 25175bd8deadSopenharmony_ci double z, double w); 25185bd8deadSopenharmony_ci void NamedProgramLocalParameter4dvEXT(uint program, enum target, 25195bd8deadSopenharmony_ci uint index, 25205bd8deadSopenharmony_ci const double *params); 25215bd8deadSopenharmony_ci void NamedProgramLocalParameter4fEXT(uint program, enum target, 25225bd8deadSopenharmony_ci uint index, 25235bd8deadSopenharmony_ci float x, float y, 25245bd8deadSopenharmony_ci float z, float w); 25255bd8deadSopenharmony_ci void NamedProgramLocalParameter4fvEXT(uint program, enum target, 25265bd8deadSopenharmony_ci uint index, 25275bd8deadSopenharmony_ci const float *params); 25285bd8deadSopenharmony_ci 25295bd8deadSopenharmony_ci operate identically to the corresponding command where "Named" 25305bd8deadSopenharmony_ci is deleted from the name (and extension suffixes are updated to 25315bd8deadSopenharmony_ci ARB appropriately) except, rather than updating the currently bound 25325bd8deadSopenharmony_ci program for the program target parameter (a parameter not present for 25335bd8deadSopenharmony_ci these listed commands), these "Named" commands update the program 25345bd8deadSopenharmony_ci object named by the initial program parameter. If the program 25355bd8deadSopenharmony_ci parameter is zero, then the target parameter selects the default 25365bd8deadSopenharmony_ci program of the specified target to update. The remaining parameters 25375bd8deadSopenharmony_ci following the initial program parameter for the listed "Named" 25385bd8deadSopenharmony_ci commands match the parameters for the corresponding non-"Named" 25395bd8deadSopenharmony_ci command and are interpreted as they are for the non-"Named" command. 25405bd8deadSopenharmony_ci If the program parameter is for an unused name, the name becomes 25415bd8deadSopenharmony_ci used and the named program object is assigned target-specific 25425bd8deadSopenharmony_ci default values (see section 2.14.7 for vertex programs or section 25435bd8deadSopenharmony_ci 3.11.8 for fragment programs), set to the same initial values prior to 25445bd8deadSopenharmony_ci the command's state update. If the program parameter is for a used 25455bd8deadSopenharmony_ci name and that named program object has a different target than the 25465bd8deadSopenharmony_ci specified target parameter, the INVALID_OPERATION error is generated." 25475bd8deadSopenharmony_ci 25485bd8deadSopenharmony_ci Add to the end of section 6.1.12 (Program Queries): 25495bd8deadSopenharmony_ci 25505bd8deadSopenharmony_ci "These queries 25515bd8deadSopenharmony_ci 25525bd8deadSopenharmony_ci void GetNamedProgramLocalParameterdvEXT(uint program, enum target, 25535bd8deadSopenharmony_ci uint index, 25545bd8deadSopenharmony_ci double *params); 25555bd8deadSopenharmony_ci void GetNamedProgramLocalParameterfvEXT(uint program, enum target, 25565bd8deadSopenharmony_ci uint index, 25575bd8deadSopenharmony_ci float *params); 25585bd8deadSopenharmony_ci void GetNamedProgramivEXT(uint program, enum target, 25595bd8deadSopenharmony_ci enum pname, int *params); 25605bd8deadSopenharmony_ci void GetNamedProgramStringEXT(uint program, enum target, 25615bd8deadSopenharmony_ci enum pname, void *string); 25625bd8deadSopenharmony_ci 25635bd8deadSopenharmony_ci operate identically to the corresponding query where "Named" is 25645bd8deadSopenharmony_ci deleted from the name (and extension suffixes are updated to ARB 25655bd8deadSopenharmony_ci appropriately) except, rather than querying the currently bound 25665bd8deadSopenharmony_ci program for the program target parameter (a parameter not present for 25675bd8deadSopenharmony_ci these listed query), these "Named" queries query the program object 25685bd8deadSopenharmony_ci named by the initial program parameter. If the program parameter 25695bd8deadSopenharmony_ci is zero, then the target parameter selects the default program of 25705bd8deadSopenharmony_ci the specified target to query. The remaining parameters following 25715bd8deadSopenharmony_ci the initial program parameter for the listed "Named" queries match 25725bd8deadSopenharmony_ci the parameters for the corresponding non-"Named" query and are 25735bd8deadSopenharmony_ci interpreted as they are for the non-"Named" query. If the program 25745bd8deadSopenharmony_ci parameter is for an unused name, the name becomes used and the named 25755bd8deadSopenharmony_ci program object is assigned target-specific default values (see section 25765bd8deadSopenharmony_ci 2.14.7 for vertex programs or section 3.11.8 for fragment programs), 25775bd8deadSopenharmony_ci set to the same initial values prior to the query's state query. 25785bd8deadSopenharmony_ci If the program parameter is for a used name and that named program 25795bd8deadSopenharmony_ci object has a different target than the specified target parameter, 25805bd8deadSopenharmony_ci the INVALID_OPERATION error is generated." 25815bd8deadSopenharmony_ci 25825bd8deadSopenharmony_ciAdditions to the EXT_gpu_program_parameters specification 25835bd8deadSopenharmony_ci 25845bd8deadSopenharmony_ci Add to the end of section 2.14.1 (Program Objects): 25855bd8deadSopenharmony_ci 25865bd8deadSopenharmony_ci "This command 25875bd8deadSopenharmony_ci 25885bd8deadSopenharmony_ci void NamedProgramLocalParameters4fvEXT(uint program, enum target, 25895bd8deadSopenharmony_ci uint index, sizei count, 25905bd8deadSopenharmony_ci const float *params); 25915bd8deadSopenharmony_ci 25925bd8deadSopenharmony_ci operate identically to ProgramLocalParameters4fvEXT except, rather 25935bd8deadSopenharmony_ci than updating the currently bound program for the program target 25945bd8deadSopenharmony_ci parameter (a parameter not present for these listed commands), these 25955bd8deadSopenharmony_ci "Named" commands update the program object named by the initial 25965bd8deadSopenharmony_ci program parameter. If the program parameter is zero, then the 25975bd8deadSopenharmony_ci target parameter selects the default program of the specified target 25985bd8deadSopenharmony_ci to update. The remaining parameters following the initial program 25995bd8deadSopenharmony_ci parameter for the listed "Named" commands match the parameters for 26005bd8deadSopenharmony_ci the corresponding non-"Named" command and are interpreted as they 26015bd8deadSopenharmony_ci are for the non-"Named" command. If the program parameter is for 26025bd8deadSopenharmony_ci an unused name, the name becomes used and the named program object 26035bd8deadSopenharmony_ci is assigned target-specific default values (see section 2.14.7 26045bd8deadSopenharmony_ci for vertex programs or section 3.11.8 for fragment programs), set 26055bd8deadSopenharmony_ci to the same initial values prior to the command's state update. 26065bd8deadSopenharmony_ci If the program parameter is for a used name and that named program 26075bd8deadSopenharmony_ci object has a different target than the specified target parameter, 26085bd8deadSopenharmony_ci the INVALID_OPERATION error is generated." 26095bd8deadSopenharmony_ci 26105bd8deadSopenharmony_ciAdditions to the NV_gpu_program4 specification 26115bd8deadSopenharmony_ci 26125bd8deadSopenharmony_ci Add to the end of section 2.14.1 (Program Objects): 26135bd8deadSopenharmony_ci 26145bd8deadSopenharmony_ci "These commands 26155bd8deadSopenharmony_ci 26165bd8deadSopenharmony_ci void NamedProgramLocalParameterI4iEXT(uint program, enum target, 26175bd8deadSopenharmony_ci uint index, 26185bd8deadSopenharmony_ci int x, int y, 26195bd8deadSopenharmony_ci int z, int w); 26205bd8deadSopenharmony_ci void NamedProgramLocalParameterI4ivEXT(uint program, enum target, 26215bd8deadSopenharmony_ci uint index, 26225bd8deadSopenharmony_ci const int *params); 26235bd8deadSopenharmony_ci void NamedProgramLocalParametersI4ivEXT(uint program, enum target, 26245bd8deadSopenharmony_ci uint index, sizei count, 26255bd8deadSopenharmony_ci const int *params); 26265bd8deadSopenharmony_ci void NamedProgramLocalParameterI4uiEXT(uint program, enum target, 26275bd8deadSopenharmony_ci uint index, 26285bd8deadSopenharmony_ci uint x, uint y, 26295bd8deadSopenharmony_ci uint z, uint w); 26305bd8deadSopenharmony_ci void NamedProgramLocalParameterI4uivEXT(uint program, enum target, 26315bd8deadSopenharmony_ci uint index, 26325bd8deadSopenharmony_ci const uint *params); 26335bd8deadSopenharmony_ci void NamedProgramLocalParametersI4uivEXT(uint program, enum target, 26345bd8deadSopenharmony_ci uint index, sizei count, 26355bd8deadSopenharmony_ci const uint *params); 26365bd8deadSopenharmony_ci 26375bd8deadSopenharmony_ci operate identically to the corresponding command where "Named" 26385bd8deadSopenharmony_ci is deleted from the name (and extension suffixes are updated to 26395bd8deadSopenharmony_ci NV appropriately) except, rather than updating the currently bound 26405bd8deadSopenharmony_ci program for the program target parameter (a parameter not present for 26415bd8deadSopenharmony_ci these listed commands), these "Named" commands update the program 26425bd8deadSopenharmony_ci object named by the initial program parameter. If the program 26435bd8deadSopenharmony_ci parameter is zero, then the target parameter selects the default 26445bd8deadSopenharmony_ci program of the specified target to update. The remaining parameters 26455bd8deadSopenharmony_ci following the initial program parameter for the listed "Named" 26465bd8deadSopenharmony_ci commands match the parameters for the corresponding non-"Named" 26475bd8deadSopenharmony_ci command and are interpreted as they are for the non-"Named" command. 26485bd8deadSopenharmony_ci If the program parameter is for an unused name, the name becomes 26495bd8deadSopenharmony_ci used and the named program object is assigned target-specific 26505bd8deadSopenharmony_ci default values (see section 2.14.7 for vertex programs or section 26515bd8deadSopenharmony_ci 3.11.8 for fragment programs), set to the same initial values prior to 26525bd8deadSopenharmony_ci the command's state update. If the program parameter is for a used 26535bd8deadSopenharmony_ci name and that named program object has a different target than the 26545bd8deadSopenharmony_ci specified target parameter, the INVALID_OPERATION error is generated." 26555bd8deadSopenharmony_ci 26565bd8deadSopenharmony_ci Add to the end of section 6.1.12 (Program Queries): 26575bd8deadSopenharmony_ci 26585bd8deadSopenharmony_ci "These queries 26595bd8deadSopenharmony_ci 26605bd8deadSopenharmony_ci void GetNamedProgramLocalParameterIivEXT(uint program, enum target, uint index, 26615bd8deadSopenharmony_ci int *params); 26625bd8deadSopenharmony_ci void GetNamedProgramLocalParameterIuivEXT(uint program, enum target, uint index, 26635bd8deadSopenharmony_ci uint *params); 26645bd8deadSopenharmony_ci 26655bd8deadSopenharmony_ci operate identically to the corresponding query where "Named" is 26665bd8deadSopenharmony_ci deleted from the name (and extension suffixes are updated to NV 26675bd8deadSopenharmony_ci appropriately) except, rather than querying the currently bound 26685bd8deadSopenharmony_ci program for the program target parameter (a parameter not present for 26695bd8deadSopenharmony_ci these listed query), these "Named" queries query the program object 26705bd8deadSopenharmony_ci named by the initial program parameter. If the program parameter 26715bd8deadSopenharmony_ci is zero, then the target parameter selects the default program of 26725bd8deadSopenharmony_ci the specified target to query. The remaining parameters following 26735bd8deadSopenharmony_ci the initial program parameter for the listed "Named" queries match 26745bd8deadSopenharmony_ci the parameters for the corresponding non-"Named" query and are 26755bd8deadSopenharmony_ci interpreted as they are for the non-"Named" query. If the program 26765bd8deadSopenharmony_ci parameter is for an unused name, the name becomes used and the named 26775bd8deadSopenharmony_ci program object is assigned target-specific default values (see section 26785bd8deadSopenharmony_ci 2.14.7 for vertex programs or section 3.11.8 for fragment programs), 26795bd8deadSopenharmony_ci set to the same initial values prior to the query's state query. 26805bd8deadSopenharmony_ci If the program parameter is for a used name and that named program 26815bd8deadSopenharmony_ci object has a different target than the specified target parameter, 26825bd8deadSopenharmony_ci the INVALID_OPERATION error is generated." 26835bd8deadSopenharmony_ci 26845bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or the EXT_texture_integer specification 26855bd8deadSopenharmony_ci 26865bd8deadSopenharmony_ci If NEITHER OpenGL 3.0 nor EXT_texture_integer are supported, ignore 26875bd8deadSopenharmony_ci the support for TextureParameterIivARB, TextureParameterIuivARB, 26885bd8deadSopenharmony_ci GetTextureParameterIivARB, GetTextureParameterIuivARB, 26895bd8deadSopenharmony_ci MultiTexParameterIivARB, MultiTexParameterIuivARB, 26905bd8deadSopenharmony_ci GetMultiTexParameterIivARB, and GetMultiTexParameterIuivARB. 26915bd8deadSopenharmony_ci 26925bd8deadSopenharmony_ciInteractions with the EXT_texture_buffer_object specification 26935bd8deadSopenharmony_ci 26945bd8deadSopenharmony_ci If EXT_texture_buffer_object is NOT supported, ignore the support 26955bd8deadSopenharmony_ci for TextureBufferARB and MultiTexBufferARB. 26965bd8deadSopenharmony_ci 26975bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or the APPLE_vertex_array_object 26985bd8deadSopenharmony_ci 26995bd8deadSopenharmony_ci If NEITHER OpenGL 3.0 nor EXT_texture_integer are supported, ignore XXX 27005bd8deadSopenharmony_ci 27015bd8deadSopenharmony_ci If either OpenGL 3.0 or APPLE_vertex_array_object is supported, then 27025bd8deadSopenharmony_ci ClientAttribDefaultARB also sets the VERTEX_ARRAY_BINDING vertex-array 27035bd8deadSopenharmony_ci state to zero if the mask parameter has CLIENT_VERTEX_ARRAY_BIT set. 27045bd8deadSopenharmony_ci 27055bd8deadSopenharmony_ci This means PushClientAttribDefaultARB also sets the 27065bd8deadSopenharmony_ci VERTEX_ARRAY_BINDING_APPLE vertex-array state to zero after pushing 27075bd8deadSopenharmony_ci the client state. if the mask parameter has CLIENT_VERTEX_ARRAY_BIT 27085bd8deadSopenharmony_ci set. 27095bd8deadSopenharmony_ci 27105bd8deadSopenharmony_ciInteractions with EXT_geometry_shader4 or NV_gpu_program4 27115bd8deadSopenharmony_ci 27125bd8deadSopenharmony_ci If both EXT_geometry_shader4 and NV_gpu_program4 are NOT 27135bd8deadSopenharmony_ci supported, ignore the support for NamedFramebufferTextureARB, 27145bd8deadSopenharmony_ci NamedFramebufferTextureLayerARB, and NamedFramebufferTextureFaceARB. 27155bd8deadSopenharmony_ci 27165bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or EXT_framebuffer_blit 27175bd8deadSopenharmony_ci 27185bd8deadSopenharmony_ci If NEITHER OpenGL 3.0 nor EXT_framebuffer_blit are supported, 27195bd8deadSopenharmony_ci ignore the references to DRAW_FRAMEBUFFER and READ_FRAMEBUFFER in 27205bd8deadSopenharmony_ci the discussion of CheckNamedFramebufferStatusARB and do not allow 27215bd8deadSopenharmony_ci these tokens for the command's target parameter. 27225bd8deadSopenharmony_ci 27235bd8deadSopenharmony_ciInteractions with OpenGL 3.0 or EXT_framebuffer_multisample 27245bd8deadSopenharmony_ci 27255bd8deadSopenharmony_ci If NEITHER OpenGL 3.0 or EXT_framebuffer_multisample are supported, 27265bd8deadSopenharmony_ci ignore the support for NamedRenderbufferStorageMultisampleARB. 27275bd8deadSopenharmony_ci 27285bd8deadSopenharmony_ciInteractions with NV_framebuffer_multisample_coverage 27295bd8deadSopenharmony_ci 27305bd8deadSopenharmony_ci If NV_framebuffer_multisample_coverage is NOT supported, ignore the 27315bd8deadSopenharmony_ci support for NamedRenderbufferStorageMultisampleCoverageARB. 27325bd8deadSopenharmony_ci 27335bd8deadSopenharmony_ciInteractions with the NV_explicit_multisample specification 27345bd8deadSopenharmony_ci 27355bd8deadSopenharmony_ci If NV_explicit_multisample is NOT supported, ignore the 27365bd8deadSopenharmony_ci support for TextureRenderbufferARB, MultiTexRenderbufferARB, 27375bd8deadSopenharmony_ci TEXTURE_BINDING_RENDERBUFFER_NV, 27385bd8deadSopenharmony_ci and TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV. 27395bd8deadSopenharmony_ci 27405bd8deadSopenharmony_ciInteractions with the NV_texture_cube_map_array specification 27415bd8deadSopenharmony_ci 27425bd8deadSopenharmony_ci If NV_texture_cube_map_array is NOT supported, ignore the support 27435bd8deadSopenharmony_ci for TEXTURE_BINDING_CUBE_MAP_ARRAY_NV. 27445bd8deadSopenharmony_ci 27455bd8deadSopenharmony_ciInteractions with OpenGL 3.0 27465bd8deadSopenharmony_ci 27475bd8deadSopenharmony_ci If OpenGL 3.0 is NOT supported, ignore the support for 27485bd8deadSopenharmony_ci EnableClientStateiEXT, DisableClientStateiEXT, GetFloati_vEXT, 27495bd8deadSopenharmony_ci GetDoublei_vEXT, GetPointeri_vEXT, VertexArrayVertexOffsetEXT, 27505bd8deadSopenharmony_ci VertexArrayColorOffsetEXT, VertexArrayEdgeFlagOffsetEXT, 27515bd8deadSopenharmony_ci VertexArrayIndexOffsetEXT, VertexArrayNormalOffsetEXT, 27525bd8deadSopenharmony_ci VertexArrayTexCoordOffsetEXT, VertexArrayMultiTexCoordOffsetEXT, 27535bd8deadSopenharmony_ci VertexArrayFogCoordOffsetEXT, VertexArraySecondaryColorOffsetEXT, 27545bd8deadSopenharmony_ci VertexArrayVertexAttribOffsetEXT, 27555bd8deadSopenharmony_ci VertexArrayVertexAttribIOffsetEXT, EnableVertexArrayEXT, 27565bd8deadSopenharmony_ci DisableVertexArrayEXT, EnableVertexArrayAttribEXT, 27575bd8deadSopenharmony_ci DisableVertexArrayAttribEXT, GetVertexArrayIntegervEXT, 27585bd8deadSopenharmony_ci GetVertexArrayPointervEXT, GetVertexArrayVertexAttribParameterivEXT, 27595bd8deadSopenharmony_ci GetVertexArrayVertexAttribPointervEXT, MapNamedBufferRangeEXT, 27605bd8deadSopenharmony_ci and FlushMappedNamedBufferRangeEXT. 27615bd8deadSopenharmony_ci 27625bd8deadSopenharmony_ci If OpenGL 3.0 is NOT supported, ignore references to Enablei, 27635bd8deadSopenharmony_ci Disablei, IsEnabledi, GetBooleani_v, and GetIntegeri_v. 27645bd8deadSopenharmony_ci 27655bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 27665bd8deadSopenharmony_ci 27675bd8deadSopenharmony_ci None. 27685bd8deadSopenharmony_ci 27695bd8deadSopenharmony_ciGLX Protocol 27705bd8deadSopenharmony_ci 27715bd8deadSopenharmony_ci XXX incomplete! ZZZZ values need to be registered! 27725bd8deadSopenharmony_ci XXX ARB_vertex_program support is specified. 27735bd8deadSopenharmony_ci 27745bd8deadSopenharmony_ci The following rendering commands are sent to the server as part of a 27755bd8deadSopenharmony_ci glXRender request: 27765bd8deadSopenharmony_ci 27775bd8deadSopenharmony_ci NamedProgramLocalParameter4fvEXT 27785bd8deadSopenharmony_ci 2 36 rendering command length 27795bd8deadSopenharmony_ci 2 ZZZZ rendering command opcode 27805bd8deadSopenharmony_ci 4 ENUM program 27815bd8deadSopenharmony_ci 4 ENUM target 27825bd8deadSopenharmony_ci 4 CARD32 index 27835bd8deadSopenharmony_ci 4 FLOAT32 params[0] 27845bd8deadSopenharmony_ci 4 FLOAT32 params[1] 27855bd8deadSopenharmony_ci 4 FLOAT32 params[2] 27865bd8deadSopenharmony_ci 4 FLOAT32 params[3] 27875bd8deadSopenharmony_ci 27885bd8deadSopenharmony_ci NamedProgramLocalParameter4dvEXT 27895bd8deadSopenharmony_ci 2 48 rendering command length 27905bd8deadSopenharmony_ci 2 ZZZZ rendering command opcode 27915bd8deadSopenharmony_ci 4 ENUM program 27925bd8deadSopenharmony_ci 4 ENUM target 27935bd8deadSopenharmony_ci 4 CARD32 index 27945bd8deadSopenharmony_ci 8 FLOAT64 params[0] 27955bd8deadSopenharmony_ci 8 FLOAT64 params[1] 27965bd8deadSopenharmony_ci 8 FLOAT64 params[2] 27975bd8deadSopenharmony_ci 8 FLOAT64 params[3] 27985bd8deadSopenharmony_ci 27995bd8deadSopenharmony_ci The NamedProgramStringEXT is potentially large, and hence can be 28005bd8deadSopenharmony_ci sent in a glXRender or glXRenderLarge request. 28015bd8deadSopenharmony_ci 28025bd8deadSopenharmony_ci NamedProgramStringEXT 28035bd8deadSopenharmony_ci 2 20+len+p rendering command length 28045bd8deadSopenharmony_ci 2 ZZZZ rendering command opcode 28055bd8deadSopenharmony_ci 4 ENUM program 28065bd8deadSopenharmony_ci 4 ENUM target 28075bd8deadSopenharmony_ci 4 ENUM format 28085bd8deadSopenharmony_ci 4 sizei len 28095bd8deadSopenharmony_ci len LISTofBYTE program 28105bd8deadSopenharmony_ci p unused, p=pad(len) 28115bd8deadSopenharmony_ci 28125bd8deadSopenharmony_ci If the command is encoded in a glxRenderLarge request, the command 28135bd8deadSopenharmony_ci opcode and command length fields above are expanded to 4 bytes each: 28145bd8deadSopenharmony_ci 28155bd8deadSopenharmony_ci 4 20+len+p rendering command length 28165bd8deadSopenharmony_ci 4 ZZZZ rendering command opcode 28175bd8deadSopenharmony_ci 28185bd8deadSopenharmony_ci The remaining commands are non-rendering commands. These commands are 28195bd8deadSopenharmony_ci sent separately (i.e., not as part of a glXRender or glXRenderLarge 28205bd8deadSopenharmony_ci request), using the glXVendorPrivateWithReply request: 28215bd8deadSopenharmony_ci 28225bd8deadSopenharmony_ci GetNamedProgramLocalParameterfvEXT 28235bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 28245bd8deadSopenharmony_ci 1 17 GLX opcode (glXVendorPrivateWithReply) 28255bd8deadSopenharmony_ci 2 6 request length 28265bd8deadSopenharmony_ci 4 ZZZZ vendor specific opcode 28275bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 28285bd8deadSopenharmony_ci 4 ENUM program 28295bd8deadSopenharmony_ci 4 ENUM target 28305bd8deadSopenharmony_ci 4 CARD32 index 28315bd8deadSopenharmony_ci => 28325bd8deadSopenharmony_ci 1 1 reply 28335bd8deadSopenharmony_ci 1 unused 28345bd8deadSopenharmony_ci 2 CARD16 sequence number 28355bd8deadSopenharmony_ci 4 m reply length, m=(n==1?0:n) 28365bd8deadSopenharmony_ci 4 unused 28375bd8deadSopenharmony_ci 4 CARD32 n (number of parameter components) 28385bd8deadSopenharmony_ci 28395bd8deadSopenharmony_ci if (n=1) this follows: 28405bd8deadSopenharmony_ci 28415bd8deadSopenharmony_ci 4 FLOAT32 params 28425bd8deadSopenharmony_ci 12 unused 28435bd8deadSopenharmony_ci 28445bd8deadSopenharmony_ci otherwise this follows: 28455bd8deadSopenharmony_ci 28465bd8deadSopenharmony_ci 16 unused 28475bd8deadSopenharmony_ci n*4 LISTofFLOAT32 params 28485bd8deadSopenharmony_ci 28495bd8deadSopenharmony_ci GetNamedProgramLocalParameterdvEXT 28505bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 28515bd8deadSopenharmony_ci 1 17 GLX opcode (glXVendorPrivateWithReply) 28525bd8deadSopenharmony_ci 2 6 request length 28535bd8deadSopenharmony_ci 4 ZZZZ vendor specific opcode 28545bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 28555bd8deadSopenharmony_ci 4 ENUM program 28565bd8deadSopenharmony_ci 4 CARD32 index 28575bd8deadSopenharmony_ci 4 ENUM target 28585bd8deadSopenharmony_ci => 28595bd8deadSopenharmony_ci 1 1 reply 28605bd8deadSopenharmony_ci 1 unused 28615bd8deadSopenharmony_ci 2 CARD16 sequence number 28625bd8deadSopenharmony_ci 4 m reply length, m=(n==1?0:n*2) 28635bd8deadSopenharmony_ci 4 unused 28645bd8deadSopenharmony_ci 4 CARD32 n (number of parameter components) 28655bd8deadSopenharmony_ci 28665bd8deadSopenharmony_ci if (n=1) this follows: 28675bd8deadSopenharmony_ci 28685bd8deadSopenharmony_ci 8 FLOAT64 params 28695bd8deadSopenharmony_ci 8 unused 28705bd8deadSopenharmony_ci 28715bd8deadSopenharmony_ci otherwise this follows: 28725bd8deadSopenharmony_ci 28735bd8deadSopenharmony_ci 16 unused 28745bd8deadSopenharmony_ci n*8 LISTofFLOAT64 params 28755bd8deadSopenharmony_ci 28765bd8deadSopenharmony_ci GetNamedProgramivEXT 28775bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 28785bd8deadSopenharmony_ci 1 17 GLX opcode (glXVendorPrivateWithReply) 28795bd8deadSopenharmony_ci 2 6 request length 28805bd8deadSopenharmony_ci 4 ZZZZ vendor specific opcode 28815bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 28825bd8deadSopenharmony_ci 4 ENUM program 28835bd8deadSopenharmony_ci 4 ENUM target 28845bd8deadSopenharmony_ci 4 ENUM pname 28855bd8deadSopenharmony_ci => 28865bd8deadSopenharmony_ci 1 1 reply 28875bd8deadSopenharmony_ci 1 unused 28885bd8deadSopenharmony_ci 2 CARD16 sequence number 28895bd8deadSopenharmony_ci 4 m reply length, m=(n==1?0:n) 28905bd8deadSopenharmony_ci 4 unused 28915bd8deadSopenharmony_ci 4 CARD32 n 28925bd8deadSopenharmony_ci 28935bd8deadSopenharmony_ci if (n=1) this follows: 28945bd8deadSopenharmony_ci 28955bd8deadSopenharmony_ci 4 INT32 params 28965bd8deadSopenharmony_ci 12 unused 28975bd8deadSopenharmony_ci 28985bd8deadSopenharmony_ci otherwise this follows: 28995bd8deadSopenharmony_ci 29005bd8deadSopenharmony_ci 16 unused 29015bd8deadSopenharmony_ci n*4 LISTofINT32 params 29025bd8deadSopenharmony_ci 29035bd8deadSopenharmony_ci GetNamedProgramStringEXT 29045bd8deadSopenharmony_ci 1 CARD8 opcode (X assigned) 29055bd8deadSopenharmony_ci 1 17 GLX opcode (glXVendorPrivateWithReply) 29065bd8deadSopenharmony_ci 2 6 request length 29075bd8deadSopenharmony_ci 4 ZZZZ vendor specific opcode 29085bd8deadSopenharmony_ci 4 GLX_CONTEXT_TAG context tag 29095bd8deadSopenharmony_ci 4 ENUM program 29105bd8deadSopenharmony_ci 4 ENUM target 29115bd8deadSopenharmony_ci 4 ENUM pname 29125bd8deadSopenharmony_ci => 29135bd8deadSopenharmony_ci 1 1 reply 29145bd8deadSopenharmony_ci 1 unused 29155bd8deadSopenharmony_ci 2 CARD16 sequence number 29165bd8deadSopenharmony_ci 4 (n+p)/4 reply length 29175bd8deadSopenharmony_ci 4 unused 29185bd8deadSopenharmony_ci 4 CARD32 n 29195bd8deadSopenharmony_ci 16 unused 29205bd8deadSopenharmony_ci n STRING program 29215bd8deadSopenharmony_ci p unused, p=pad(n) 29225bd8deadSopenharmony_ci 29235bd8deadSopenharmony_ciErrors 29245bd8deadSopenharmony_ci 29255bd8deadSopenharmony_ci All the commands in this extension excepting ClientAttribDefaultEXT 29265bd8deadSopenharmony_ci are expressed in terms of existing GL commands and the error that 29275bd8deadSopenharmony_ci apply to those commands apply to the new commands. If an error 29285bd8deadSopenharmony_ci occurs for any of the commands introduced by this extension, any 29295bd8deadSopenharmony_ci selector used by the command is left undisturbed. 29305bd8deadSopenharmony_ci 29315bd8deadSopenharmony_ci Several errors are truly "new" with this extension: 29325bd8deadSopenharmony_ci 29335bd8deadSopenharmony_ci INVALID_OPERATION is generated by CopyTextureImage1DEXT, 29345bd8deadSopenharmony_ci CopyTextureImage2DEXT, CopyTextureSubImage1DEXT, 29355bd8deadSopenharmony_ci CopyTextureSubImage2DEXT, CopyTextureSubImage3DEXT, 29365bd8deadSopenharmony_ci GetCompressedTextureImageEXT, GetTextureImageEXT, 29375bd8deadSopenharmony_ci GetTextureLevelParameterfvEXT, GetTextureLevelParameterivEXT, 29385bd8deadSopenharmony_ci GetTextureParameterfvEXT, GetTextureParameterIivEXT, 29395bd8deadSopenharmony_ci GetTextureParameterIuivEXT, GetTextureParameterivEXT, 29405bd8deadSopenharmony_ci TextureBufferEXT, TextureImage1DEXT, TextureImage2DEXT, 29415bd8deadSopenharmony_ci TextureImage3DEXT, TextureParameterfEXT, TextureParameterfvEXT, 29425bd8deadSopenharmony_ci TextureParameteriEXT, TextureParameterIivEXT, TextureParameterIuivEXT, 29435bd8deadSopenharmony_ci TextureParameterivEXT, TextureSubImage1DEXT, TextureSubImage2DEXT, 29445bd8deadSopenharmony_ci TextureSubImage3DEXT, and GenerateMultiTexMipmapEXT if the target 29455bd8deadSopenharmony_ci parameter does not match the target type of the texture object named 29465bd8deadSopenharmony_ci by the texture parameter. 29475bd8deadSopenharmony_ci 29485bd8deadSopenharmony_ci INVALID_OPERATION is generated by GetNamedBufferParameterivEXT, 29495bd8deadSopenharmony_ci GetNamedBufferPointervEXT, GetNamedBufferSubDataEXT, 29505bd8deadSopenharmony_ci MapNamedBufferEXT, NamedBufferDataEXT, NamedBufferSubDataEXT, and 29515bd8deadSopenharmony_ci UnmapNamedBufferEXT if the buffer parameter is zero. 29525bd8deadSopenharmony_ci 29535bd8deadSopenharmony_ci INVALID_OPERATION is generated by ProgramUniform1fEXT, 29545bd8deadSopenharmony_ci ProgramUniform2fEXT, ProgramUniform3fEXT, ProgramUniform4fEXT, 29555bd8deadSopenharmony_ci ProgramUniform1iEXT, ProgramUniform2iEXT, ProgramUniform3iEXT, 29565bd8deadSopenharmony_ci ProgramUniform4iEXT, ProgramUniform1fvEXT, ProgramUniform2fvEXT, 29575bd8deadSopenharmony_ci ProgramUniform3fvEXT, ProgramUniform4fvEXT, ProgramUniform1ivEXT, 29585bd8deadSopenharmony_ci ProgramUniform2ivEXT, ProgramUniform3ivEXT, ProgramUniform4ivEX, 29595bd8deadSopenharmony_ci ProgramUniformMatrix2fvEXT, ProgramUniformMatrix3fvEXT, 29605bd8deadSopenharmony_ci ProgramUniformMatrix4fvEXT, ProgramUniformMatrix2x3fv, 29615bd8deadSopenharmony_ci ProgramUniformMatrix3x2fv, ProgramUniformMatrix2x4fv, 29625bd8deadSopenharmony_ci ProgramUniformMatrix4x2fv, ProgramUniformMatrix3x4fv, 29635bd8deadSopenharmony_ci ProgramUniformMatrix4x3fv, ProgramUniform1uiEXT, ProgramUniform2uiEXT, 29645bd8deadSopenharmony_ci ProgramUniform3uiEXT, ProgramUniform4uiEXT, ProgramUniform1uivEXT, 29655bd8deadSopenharmony_ci ProgramUniform2uivEXT, ProgramUniform3uivEXT, and 29665bd8deadSopenharmony_ci ProgramUniform4uivEXT if the program named by the program parameter 29675bd8deadSopenharmony_ci has not been successfully linked. 29685bd8deadSopenharmony_ci 29695bd8deadSopenharmony_ci INVALID_VALUE is generated by NamedProgramLocalParameter4dEXT, 29705bd8deadSopenharmony_ci NamedProgramLocalParameter4dvEXT, NamedProgramLocalParameter4fEXT, 29715bd8deadSopenharmony_ci NamedProgramLocalParameter4fvEXT, GetNamedProgramLocalParameterdvEXT, 29725bd8deadSopenharmony_ci GetNamedProgramLocalParameterfvEXT, GetNamedProgramivEXT, and 29735bd8deadSopenharmony_ci GetNamedProgramStringEXT if the program named by the program parameter 29745bd8deadSopenharmony_ci does not exist. 29755bd8deadSopenharmony_ci 29765bd8deadSopenharmony_ci INVALID_OPERATION is generated by MultiTexCoordPointerEXT, 29775bd8deadSopenharmony_ci VertexArrayMultiTexCoordOffsetEXT, MultiTexEnvfEXT, MultiTexEnvfvEXT, 29785bd8deadSopenharmony_ci MultiTexEnviEXT, MultiTexEnvivEXT, MultiTexGendEXT, MultiTexGendvEXT, 29795bd8deadSopenharmony_ci MultiTexGenfEXT, MultiTexGenfvEXT, MultiTexGeniEXT, MultiTexGenivEXT, 29805bd8deadSopenharmony_ci MultiTexParameteriEXT, MultiTexParameterivEXT, MultiTexParameterfEXT, 29815bd8deadSopenharmony_ci MultiTexParameterfvEXT, MultiTexParameterIivEXT, 29825bd8deadSopenharmony_ci MultiTexParameterIuivEXT, MultiTexImage1DEXT, MultiTexImage2DEXT, 29835bd8deadSopenharmony_ci MultiTexSubImage1DEXT, MultiTexSubImage2DEXT, CopyMultiTexImage1DEXT, 29845bd8deadSopenharmony_ci CopyMultiTexImage2DEXT, CopyMultiTexSubImage1DEXT, 29855bd8deadSopenharmony_ci CopyMultiTexSubImage2DEXT, MultiTexImage3DEXT, MultiTexSubImage3DEXT, 29865bd8deadSopenharmony_ci CopyMultiTexSubImage3DEXT, MultiTexBufferEXT, GetMultiTexEnvfvEXT, 29875bd8deadSopenharmony_ci GetMultiTexEnvivEXT, GetMultiTexGendvEXT, GetMultiTexGenfvEXT, 29885bd8deadSopenharmony_ci GetMultiTexGenivEXT, GetMultiTexImageEXT, GetMultiTexParameterfvEXT, 29895bd8deadSopenharmony_ci GetMultiTexParameterivEXT, GetMultiTexParameterIivEXT, 29905bd8deadSopenharmony_ci GetMultiTexParameterIuivEXT, GetMultiTexLevelParameterivEXT, 29915bd8deadSopenharmony_ci GetMultiTexLevelParameterfvEXT, and GetCompressedMultiTexImageEXT if 29925bd8deadSopenharmony_ci the texunit parameter names a texture unit that is greater or equal in 29935bd8deadSopenharmony_ci number to the implementations limit for maximum texture image units. 29945bd8deadSopenharmony_ci 29955bd8deadSopenharmony_ci INVALID_OPERATION is generated by FramebufferDrawBuffersEXT if a 29965bd8deadSopenharmony_ci color buffer not currently allocated to the GL context is specified. 29975bd8deadSopenharmony_ci 29985bd8deadSopenharmony_ci INVALID_OPERATION is generated by FramebufferDrawBuffersEXT if <n> 29995bd8deadSopenharmony_ci is greater than the state MAX_DRAW_BUFFERS. 30005bd8deadSopenharmony_ci 30015bd8deadSopenharmony_ci INVALID_OPERATION is generated by FramebufferDrawBuffersEXT if value 30025bd8deadSopenharmony_ci in <bufs> does not correspond to one of the allowed buffers. 30035bd8deadSopenharmony_ci 30045bd8deadSopenharmony_ci INVALID_OPERATION is generated by FramebufferDrawBuffersEXT if a 30055bd8deadSopenharmony_ci draw buffer other then NONE is specified more then once in <bufs>. 30065bd8deadSopenharmony_ci 30075bd8deadSopenharmony_ciNew State 30085bd8deadSopenharmony_ci 30095bd8deadSopenharmony_ci None. 30105bd8deadSopenharmony_ci 30115bd8deadSopenharmony_ciNew Implementation Dependent State 30125bd8deadSopenharmony_ci 30135bd8deadSopenharmony_ci None. 30145bd8deadSopenharmony_ci 30155bd8deadSopenharmony_ciNVIDIA Implementation Details 30165bd8deadSopenharmony_ci 30175bd8deadSopenharmony_ci NVIDIA drivers prior to 330.00 (August 2013) have a bug where 30185bd8deadSopenharmony_ci glMultiTexGeniEXT acts identically to glTexGeni (so glMultiTexGeniEXT 30195bd8deadSopenharmony_ci ignores its texture unit parameter). 30205bd8deadSopenharmony_ci 30215bd8deadSopenharmony_ci As a workaround, use glMultiTexGenivEXT. So problematic code written 30225bd8deadSopenharmony_ci as: 30235bd8deadSopenharmony_ci 30245bd8deadSopenharmony_ci glMultiTexGeniEXT(texUnit, coord, pname, value); 30255bd8deadSopenharmony_ci 30265bd8deadSopenharmony_ci can be rewritten as: 30275bd8deadSopenharmony_ci 30285bd8deadSopenharmony_ci GLenum pvalue = value; 30295bd8deadSopenharmony_ci glMultiTexGenivEXT(texUnit, coord, pname, &pvalue); 30305bd8deadSopenharmony_ci 30315bd8deadSopenharmony_ci NVIDIA drivers prior to 330.00 (August 2013) do not support 30325bd8deadSopenharmony_ci the glEnableVertexArrayEXT and glDisableVertexArrayEXT with the 30335bd8deadSopenharmony_ci GL_TEXTUREi tokens and instead generate a GL_INVALID_ENUM error. 30345bd8deadSopenharmony_ci See issue 32. The only workaround is to change the texture 30355bd8deadSopenharmony_ci unit selector (glActiveTexture) and bind the vertex array 30365bd8deadSopenharmony_ci object (glBindVertexArray) and call glEnable or glDisable with 30375bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY. Alternatively use generic vertex attribute 30385bd8deadSopenharmony_ci arrays instead of texture coordinate arrays. 30395bd8deadSopenharmony_ci 30405bd8deadSopenharmony_ciIssues 30415bd8deadSopenharmony_ci 30425bd8deadSopenharmony_ci (0) What is changed from version 1.0 to version 1.1 of this extension 30435bd8deadSopenharmony_ci to support OpenGL 3.0? 30445bd8deadSopenharmony_ci 30455bd8deadSopenharmony_ci RESOLVED: Changes are primarily cosmetic except the addition 30465bd8deadSopenharmony_ci of API for selector-free access to vertex array objects since 30475bd8deadSopenharmony_ci that functionality is part of OpenGL 3.0: 30485bd8deadSopenharmony_ci 30495bd8deadSopenharmony_ci 1) Update all references to section numbering to OpenGL 3.0 30505bd8deadSopenharmony_ci section numbers. 30515bd8deadSopenharmony_ci 30525bd8deadSopenharmony_ci 2) Where EXT extensions have become part of OpenGL 3.0, refer 30535bd8deadSopenharmony_ci to the functionality as part of OpenGL 3.0 rather than by 30545bd8deadSopenharmony_ci extension name. 30555bd8deadSopenharmony_ci 30565bd8deadSopenharmony_ci 3) New selector-free API for vertex buffer objects since these 30575bd8deadSopenharmony_ci were introduced by OpenGL 3.0. The EXT version specified 30585bd8deadSopenharmony_ci a necessary glClientAttribDefaultEXT interaction with 30595bd8deadSopenharmony_ci APPLE_vertex_buffer_object but didn't provide an selector-free 30605bd8deadSopenharmony_ci API for vertex buffer objects. 30615bd8deadSopenharmony_ci 30625bd8deadSopenharmony_ci 4) Add new selector-free API for fine control over mapping 30635bd8deadSopenharmony_ci buffer subranges into client space (glMapNamedBufferRangeEXT) 30645bd8deadSopenharmony_ci and flushing modified data (glFlushMappedNamedBufferRangeEXT). 30655bd8deadSopenharmony_ci 30665bd8deadSopenharmony_ci 5) Add OpenGL 3.0-style aliases for the version 1.0 commands 30675bd8deadSopenharmony_ci and queries that have "Indexed" in the name. OpenGL 3.0 has a 30685bd8deadSopenharmony_ci convention where an "i" indexed indexed commands and queries. 30695bd8deadSopenharmony_ci For example, glGetFloati_v and glGetFloatIndexedvEXT are 30705bd8deadSopenharmony_ci identical queries. Likewise glEnableClientStateIndexedEXT and 30715bd8deadSopenharmony_ci glEnableClientStateiEXT are identical commands. 30725bd8deadSopenharmony_ci 30735bd8deadSopenharmony_ci (1) What should this extension be called? 30745bd8deadSopenharmony_ci 30755bd8deadSopenharmony_ci RESOLVED: EXT_direct_state_access 30765bd8deadSopenharmony_ci 30775bd8deadSopenharmony_ci "direct" means state updates and queries are not indirected 30785bd8deadSopenharmony_ci through a selector such as the matrix mode, active texture 30795bd8deadSopenharmony_ci unit, active client texture unit, current texture binding, 30805bd8deadSopenharmony_ci current vertex/fragment/geometry program, current GLSL program, 30815bd8deadSopenharmony_ci or current buffer binding. 30825bd8deadSopenharmony_ci 30835bd8deadSopenharmony_ci "state" so there's not confusion about what this extension 30845bd8deadSopenharmony_ci provides direct access to (not direct access to the hardware or 30855bd8deadSopenharmony_ci the framebuffer, etc.). 30865bd8deadSopenharmony_ci 30875bd8deadSopenharmony_ci "access" is because this extension applies to both queries (reads) 30885bd8deadSopenharmony_ci and updates (writes) of OpenGL state. Access is general enough 30895bd8deadSopenharmony_ci to encompass both queries and updates. 30905bd8deadSopenharmony_ci 30915bd8deadSopenharmony_ci (2) Should we have a "direct_state_access" extension for each type 30925bd8deadSopenharmony_ci of OpenGL state involved (matrix, program, GLSL, texture unit, 30935bd8deadSopenharmony_ci texture object) or have one uber-extension? For example, 30945bd8deadSopenharmony_ci EXT_direct_matrix_access, EXT_direct_texture_access, etc. 30955bd8deadSopenharmony_ci 30965bd8deadSopenharmony_ci RESOLVED: One uber-extension. 30975bd8deadSopenharmony_ci 30985bd8deadSopenharmony_ci This extension introduces no additional hardware functionality 30995bd8deadSopenharmony_ci but rather provides commands to perform state updates and queries 31005bd8deadSopenharmony_ci without having to change (and possibly query and restore) API 31015bd8deadSopenharmony_ci selectors. 31025bd8deadSopenharmony_ci 31035bd8deadSopenharmony_ci The dependencies sections make it clear that if some functionality 31045bd8deadSopenharmony_ci (say, GLSL) is not supported, implementations supporting this 31055bd8deadSopenharmony_ci extension ignore the direct access API for the particular missing 31065bd8deadSopenharmony_ci functionality. 31075bd8deadSopenharmony_ci 31085bd8deadSopenharmony_ci This simplifies the burden on applications to use the new direct 31095bd8deadSopenharmony_ci access API. When this extension is supported, the application can 31105bd8deadSopenharmony_ci assume all functionality supported by their respective extensions 31115bd8deadSopenharmony_ci is available through the direct access commands introduced by 31125bd8deadSopenharmony_ci this extension. 31135bd8deadSopenharmony_ci 31145bd8deadSopenharmony_ci (3) Explain the methodology for naming selector-free commands. 31155bd8deadSopenharmony_ci 31165bd8deadSopenharmony_ci The naming conventions seek to maximize consistency but 31175bd8deadSopenharmony_ci differences between the various selectors and command subsets 31185bd8deadSopenharmony_ci dictate differences in approach. 31195bd8deadSopenharmony_ci 31205bd8deadSopenharmony_ci The chosen naming conventions has two guiding principles: 1) 31215bd8deadSopenharmony_ci making the selector-free commands similar to the existing 31225bd8deadSopenharmony_ci selector-based commands in naming but also clearly and 31235bd8deadSopenharmony_ci consistently distinguished (at least within each group of 31245bd8deadSopenharmony_ci commands) from the existing selector-based commands to which 31255bd8deadSopenharmony_ci selector-free commands correspond by a simple pattern, and 2) 31265bd8deadSopenharmony_ci being conscious of the length in characters of the resulting 31275bd8deadSopenharmony_ci command names. 31285bd8deadSopenharmony_ci 31295bd8deadSopenharmony_ci Selector-less matrix commands all start glMatrix* (rather than gl* 31305bd8deadSopenharmony_ci or gl*Matrix[fd] for the corresponding selector-based commands). 31315bd8deadSopenharmony_ci 31325bd8deadSopenharmony_ci Rationale: The selector-based matrix commands have the 31335bd8deadSopenharmony_ci classic verb-noun format (example: glLoadMatrixf) described 31345bd8deadSopenharmony_ci in Kurt Akeley's "Syntax Rules for OpenGL Extensions" document 31355bd8deadSopenharmony_ci (henceforth abbreviated SRfOE) while the selector-free versions 31365bd8deadSopenharmony_ci have a noun-verb format. This variance from SRfOE conventions 31375bd8deadSopenharmony_ci is deemed warranted for the sake of consistent naming of all the 31385bd8deadSopenharmony_ci selector-free matrix commands. 31395bd8deadSopenharmony_ci 31405bd8deadSopenharmony_ci The alternative of using "NamedMatrix" as a suffix to the 31415bd8deadSopenharmony_ci matrix commands was considered (example: glLoadNamedMatrixf 31425bd8deadSopenharmony_ci rather than glLoadMatrixf) but most matrix commands do not 31435bd8deadSopenharmony_ci contain the word Matrix so this leads to awkward constructions 31445bd8deadSopenharmony_ci such as glFrustumNamedMatrix and glLoadIdentityNamedMatrix. 31455bd8deadSopenharmony_ci glMatrixFrustum and glMatrixLoadIdentity were preferred despite 31465bd8deadSopenharmony_ci the variance this creates with SRfOE. Also considered was 31475bd8deadSopenharmony_ci adding "Named" or "NamedMatrix" as a prefix to the matrix 31485bd8deadSopenharmony_ci commands (example: glNamedLoadMatrixf, glNamedFrustum, 31495bd8deadSopenharmony_ci glNamedLoadIdentity; or glNamedMatrixLoadMatrixf, 31505bd8deadSopenharmony_ci glNamedMatrixFrustum, glNamedMatrixLoadIdentity). But the 31515bd8deadSopenharmony_ci "Named" prefix is awkward because it is not the frustum, 31525bd8deadSopenharmony_ci etc. that is named but rather a matrix. The "NamedMatrix" prefix 31535bd8deadSopenharmony_ci becomes awkward because of the length of the resulting commands 31545bd8deadSopenharmony_ci while having a noun-verb format. The "Matrix" prefixed format 31555bd8deadSopenharmony_ci (where "Matrix" appears in the command name only once) provides 31565bd8deadSopenharmony_ci consistency of naming and minimizes command name length but 31575bd8deadSopenharmony_ci at the consistency cost of varying with the SRfOE's verb-noun 31585bd8deadSopenharmony_ci convention. 31595bd8deadSopenharmony_ci 31605bd8deadSopenharmony_ci Selector-less texture object commands all start glTexture* 31615bd8deadSopenharmony_ci or glGetTexture* (rather than glTex* and glGetTex* for the 31625bd8deadSopenharmony_ci corresponding selector-based commands). 31635bd8deadSopenharmony_ci 31645bd8deadSopenharmony_ci Rationale: SRfOE states "Tex" is an abbreviation for "Texture" 31655bd8deadSopenharmony_ci in command names. However in the context of texture objects, the 31665bd8deadSopenharmony_ci abbreviated "Texture" is used instead (example: glIsTexture, 31675bd8deadSopenharmony_ci not glIsTex). The abbreviation "Tex" is used when texture is 31685bd8deadSopenharmony_ci used as an adjective to describe state being specified (examples: 31695bd8deadSopenharmony_ci glTexParameter* and glTexImage*). The unabbreviated "Texture" 31705bd8deadSopenharmony_ci is used as a noun in command names. 31715bd8deadSopenharmony_ci 31725bd8deadSopenharmony_ci The selector-free texture object commands use the unabbreviated 31735bd8deadSopenharmony_ci "Texture" as an adjective since a texture object is accessed 31745bd8deadSopenharmony_ci directly where the "Tex" commands refer to texture state accessed 31755bd8deadSopenharmony_ci indirectly based on the currently bound texture object. 31765bd8deadSopenharmony_ci 31775bd8deadSopenharmony_ci Selector-less multitexture texture unit commands and queries 31785bd8deadSopenharmony_ci all replace "Tex" with "MultiTex" and a new initial texunit 31795bd8deadSopenharmony_ci identifies the texture unit by token (mimicking how TexCoord2f 31805bd8deadSopenharmony_ci is MultiTexCoord2f for multitexture immediate mode). 31815bd8deadSopenharmony_ci 31825bd8deadSopenharmony_ci Selector-less generic enables (glEnable, glDisable) 31835bd8deadSopenharmony_ci for texture unit enables make use of the convention for 31845bd8deadSopenharmony_ci indexed queries introduced by EXT_draw_buffers2 and also 31855bd8deadSopenharmony_ci used by EXT_transform_feedback so use glEnableIndexedEXT and 31865bd8deadSopenharmony_ci glDisableIndexedEXT. 31875bd8deadSopenharmony_ci 31885bd8deadSopenharmony_ci Selector-less generic queries (glGetIntegerv, glGetFloatv, 31895bd8deadSopenharmony_ci glGetPointerv, etc) for texture unit state make use 31905bd8deadSopenharmony_ci of the convention for indexed queries introduced by 31915bd8deadSopenharmony_ci EXT_draw_buffers2 and also used by EXT_transform_feedback so use 31925bd8deadSopenharmony_ci glGetIntegerIndexedvEXT, glGetFloatIndexedvEXT, 31935bd8deadSopenharmony_ci glGetDoubleIndexedvEXT, glGetBooleanIndexedvEXT, and 31945bd8deadSopenharmony_ci glIsEnabledIndexedEXT. 31955bd8deadSopenharmony_ci 31965bd8deadSopenharmony_ci OpenGL 3.0 introduced a new naming convention for indexed 31975bd8deadSopenharmony_ci state enables and queries so glGetIntegeri_v, glGetFloati_vEXT, 31985bd8deadSopenharmony_ci glGetDoublei_vEXT, and glGetBooleani_v, glIsEnabledi operate 31995bd8deadSopenharmony_ci identically respectively to the prior indexed query list. 32005bd8deadSopenharmony_ci 32015bd8deadSopenharmony_ci Selector-less buffer object commands all start with glNamedBuffer 32025bd8deadSopenharmony_ci or glGetNamedBuffer. 32035bd8deadSopenharmony_ci 32045bd8deadSopenharmony_ci Selector-less program parameter commands (for 32055bd8deadSopenharmony_ci ARB_vertex_program-based extensions) all start glNamedProgram 32065bd8deadSopenharmony_ci or glGetNamedProgram. 32075bd8deadSopenharmony_ci 32085bd8deadSopenharmony_ci Selector-less uniform commands for GLSL all start glProgramUniform. 32095bd8deadSopenharmony_ci 32105bd8deadSopenharmony_ci Selector-less framebuffer object commands all start 32115bd8deadSopenharmony_ci with glNamedFramebufer, glGetNamedFramebuffer, or 32125bd8deadSopenharmony_ci glCheckNamedFramebuffer. The selector-less framebuffer 32135bd8deadSopenharmony_ci control commands are glFramebufferDrawBufferEXT, 32145bd8deadSopenharmony_ci glFramebufferDrawBuffersEXT, and glFramebufferReadBufferEXT. 32155bd8deadSopenharmony_ci 32165bd8deadSopenharmony_ci Selector-less renderbuffer object commands all start 32175bd8deadSopenharmony_ci with glNamedRenderbuffer or glGetNamedRenderbuffer. 32185bd8deadSopenharmony_ci 32195bd8deadSopenharmony_ci (4) Should the selector-free glTexture* and glNamedProgram* commands 32205bd8deadSopenharmony_ci and glGetTexture* and glGetNamedProgram* queries have target 32215bd8deadSopenharmony_ci parameters (for passing GL_TEXTURE_2D or GL_VERTEX_PROGRAM_ARB, 32225bd8deadSopenharmony_ci etc.)? 32235bd8deadSopenharmony_ci 32245bd8deadSopenharmony_ci RESOLVED: Yes. 32255bd8deadSopenharmony_ci 32265bd8deadSopenharmony_ci It would be desirable to update a texture parameter for a given 32275bd8deadSopenharmony_ci texture object without having to know the target of the texture 32285bd8deadSopenharmony_ci object. For example, one could change the GL_TEXTURE_MIN_FILTER 32295bd8deadSopenharmony_ci of a texture object without knowing if the texture object was 32305bd8deadSopenharmony_ci a 1D, 2D, 3D, or cube map texture. 32315bd8deadSopenharmony_ci 32325bd8deadSopenharmony_ci As desirable as that might be, OpenGL's texture target scheme 32335bd8deadSopenharmony_ci makes that difficult in general for several reasons. 32345bd8deadSopenharmony_ci 32355bd8deadSopenharmony_ci First, a side-effect of glBindTexture is that a texture object of 32365bd8deadSopenharmony_ci the indicated target is created if the specified texture object 32375bd8deadSopenharmony_ci name does not map to an existent texture object. In this case, 32385bd8deadSopenharmony_ci a texture object of the specified target is created and its state 32395bd8deadSopenharmony_ci is initialized to the initial texture object state based on the 32405bd8deadSopenharmony_ci specified target. The selector-free texture object commands 32415bd8deadSopenharmony_ci should operate the same way if a non-existent texture object 32425bd8deadSopenharmony_ci is specified. 32435bd8deadSopenharmony_ci 32445bd8deadSopenharmony_ci Second, cube maps have face-specific targets 32455bd8deadSopenharmony_ci (GL_TEXTURE_CUBE_MAP_POSITIVE_X, etc.) as well as the 32465bd8deadSopenharmony_ci face-independent target (GL_TEXTURE_CUBE_MAP). Commands for 32475bd8deadSopenharmony_ci texture image specification (glTexImage2D, etc.) and query 32485bd8deadSopenharmony_ci (glGetTexImage) require the target parameter to select the 32495bd8deadSopenharmony_ci appropriate face. 32505bd8deadSopenharmony_ci 32515bd8deadSopenharmony_ci Assembly program commands have a similar need for a target 32525bd8deadSopenharmony_ci parameter. Calling glBindProgramARB is specified to create an 32535bd8deadSopenharmony_ci empty program of the specified target type of the bind. 32545bd8deadSopenharmony_ci 32555bd8deadSopenharmony_ci Semantically, glTexture* commands (and glGetTexture* queries) are 32565bd8deadSopenharmony_ci semantically equivalent of performing a glBindTexture followed 32575bd8deadSopenharmony_ci atomically by the equivalent glTex* command (or equivalent 32585bd8deadSopenharmony_ci glGetTex* query). 32595bd8deadSopenharmony_ci 32605bd8deadSopenharmony_ci Likewise semantically, glNamedProgram* commands (and 32615bd8deadSopenharmony_ci glGetNamedProgram* queries) are semantically equivalent of 32625bd8deadSopenharmony_ci performing a glBindProgramARB followed atomically by the 32635bd8deadSopenharmony_ci equivalent glProgram* command (or equivalent glGetProgram* query). 32645bd8deadSopenharmony_ci 32655bd8deadSopenharmony_ci Note that buffer commands do not have this same need for a target 32665bd8deadSopenharmony_ci parameter in their selector-less form. 32675bd8deadSopenharmony_ci 32685bd8deadSopenharmony_ci (5) The OpenGL API has "latched" state. Explain latched state 32695bd8deadSopenharmony_ci and how this extension addresses latched state. 32705bd8deadSopenharmony_ci 32715bd8deadSopenharmony_ci RESOLVED: Examples of latched state in the OpenGL API are the 32725bd8deadSopenharmony_ci current array and array element buffers and the pixel store 32735bd8deadSopenharmony_ci pack/unpack state. Latched stated is all client-side state 32745bd8deadSopenharmony_ci (pixel store or vertex array). 32755bd8deadSopenharmony_ci 32765bd8deadSopenharmony_ci The state of the current array buffer acts as an extra parameter 32775bd8deadSopenharmony_ci to all the gl*Pointer calls to configure vertex arrays. The state 32785bd8deadSopenharmony_ci of the current element array buffer acts as an extra parameter to 32795bd8deadSopenharmony_ci the glDrawElements family of commands. The pixel store unpack 32805bd8deadSopenharmony_ci state acts as a collection of extra parameters to glTexImage*, 32815bd8deadSopenharmony_ci glTexSubImage*, glDrawPixels, glBitmap, glColorTable, 32825bd8deadSopenharmony_ci glPolygonStipple, glConvolutionFilter*, etc. The pixel store pack 32835bd8deadSopenharmony_ci state acts as a collection of extra parameters to glReadPixels, 32845bd8deadSopenharmony_ci glGetTexImage, glGetColorTable, etc. 32855bd8deadSopenharmony_ci 32865bd8deadSopenharmony_ci Whereas a selector is an extra parameter that designates what 32875bd8deadSopenharmony_ci state variable is to be updated or queried, latched state is 32885bd8deadSopenharmony_ci actual state values the command uses to update other state 32895bd8deadSopenharmony_ci variables or control the operation of the command. 32905bd8deadSopenharmony_ci 32915bd8deadSopenharmony_ci Latched state is similar in its undesirability for layered 32925bd8deadSopenharmony_ci libraries because it requires OpenGL state variables to be 32935bd8deadSopenharmony_ci modified to update particular state variables or control the 32945bd8deadSopenharmony_ci operation of the command. 32955bd8deadSopenharmony_ci 32965bd8deadSopenharmony_ci Fixing the latched state problem with additional API is involved 32975bd8deadSopenharmony_ci because it would require introducing a new command for every 32985bd8deadSopenharmony_ci existing OpenGL command accepting a pointer to specify vertex 32995bd8deadSopenharmony_ci arrays or pixel data or transform feedback buffer with a "uint 33005bd8deadSopenharmony_ci buffer, intptr offset" set of parameters rather than a pointer. 33015bd8deadSopenharmony_ci 33025bd8deadSopenharmony_ci This extension addresses latched state by adding a new command 33035bd8deadSopenharmony_ci glClientAttribDefaultEXT that uses its mask parameter to set all 33045bd8deadSopenharmony_ci the client vertex array or pixel store state to its default state. 33055bd8deadSopenharmony_ci 33065bd8deadSopenharmony_ci The glPushClientAttribDefaultEXT performs the 33075bd8deadSopenharmony_ci glClientAttribDefaultEXT in combination with a glPushClientAttrib 33085bd8deadSopenharmony_ci command. This provides an inexpensive way to save-and-restore the 33095bd8deadSopenharmony_ci latched client state so layered libraries that want well-defined 33105bd8deadSopenharmony_ci latched client state can use these commands. 33115bd8deadSopenharmony_ci 33125bd8deadSopenharmony_ci Because the state affected by glPushClientAttribDefaultEXT 33135bd8deadSopenharmony_ci and glClientAttribDefaultEXT is all client-side, this state 33145bd8deadSopenharmony_ci is inexpensive to update (unlike the glPushAttrib/glPopAttrib 33155bd8deadSopenharmony_ci commands). 33165bd8deadSopenharmony_ci 33175bd8deadSopenharmony_ci Some consideration was given to providing extra mask bits to 33185bd8deadSopenharmony_ci control just the vertex array enables (to disable them all) or 33195bd8deadSopenharmony_ci pixel store pack and unpack state independently (just the pack 33205bd8deadSopenharmony_ci or just the unpack state). The entire set of vertex array and 33215bd8deadSopenharmony_ci pixel store state is compact enough that it doesn't make sense 33225bd8deadSopenharmony_ci to add extra mask bits for subsets of the state. 33235bd8deadSopenharmony_ci 33245bd8deadSopenharmony_ci (6) How is the expense of a per-command specified texture object, 33255bd8deadSopenharmony_ci assembly program object, buffer object, or GLSL program object 33265bd8deadSopenharmony_ci name lookup minimized? 33275bd8deadSopenharmony_ci 33285bd8deadSopenharmony_ci RESOLVED: Modern OpenGL driver implementations implementing 33295bd8deadSopenharmony_ci this extension are expected to cache most recently used object 33305bd8deadSopenharmony_ci names so accessing the last name repeatedly is fast. 33315bd8deadSopenharmony_ci 33325bd8deadSopenharmony_ci The details of this is left up to the OpenGL implementation but 33335bd8deadSopenharmony_ci developers can expect consecutive direct access commands to the 33345bd8deadSopenharmony_ci same named object will be efficient. 33355bd8deadSopenharmony_ci 33365bd8deadSopenharmony_ci (7) What should the selector-free glBindTexture routine be called? 33375bd8deadSopenharmony_ci 33385bd8deadSopenharmony_ci RESOLVED: glBindMultiTextureEXT 33395bd8deadSopenharmony_ci 33405bd8deadSopenharmony_ci This name shares the same "Multi" subword with the other routines 33415bd8deadSopenharmony_ci (glMultiTexGen*, glMultiTexEnv*, glMultiTexParameter*, etc.). 33425bd8deadSopenharmony_ci 33435bd8deadSopenharmony_ci The name uses "MultiTexture" instead of simply "MultiTex" because 33445bd8deadSopenharmony_ci the glBindMultiTextureEXT command takes a texture object parameter 33455bd8deadSopenharmony_ci (hence "Texture" instead of "Tex" used for texture unit-based 33465bd8deadSopenharmony_ci commands) as well as a texture unit parameter. 33475bd8deadSopenharmony_ci 33485bd8deadSopenharmony_ci (8) Should glGetIntegeri_v, glGetIntegerIndexedvEXT, glIsEnabledi, 33495bd8deadSopenharmony_ci glIsEnabledIndexedEXT, etc. work of all query tokens or just 33505bd8deadSopenharmony_ci query tokens for indexed state such as query tokens where the 33515bd8deadSopenharmony_ci active texture or client active texture apply? 33525bd8deadSopenharmony_ci 33535bd8deadSopenharmony_ci RESOLVED: Just for query tokens for indexed state. 33545bd8deadSopenharmony_ci 33555bd8deadSopenharmony_ci This is consistent with how EXT_draw_buffers2 and 33565bd8deadSopenharmony_ci EXT_transform_feedback work for their Indexed commands. 33575bd8deadSopenharmony_ci 33585bd8deadSopenharmony_ci How the index parameter is interpreted depends on the queried state. 33595bd8deadSopenharmony_ci For texture related state the index refers to the active texture unit 33605bd8deadSopenharmony_ci or active client texture unit appropriately. 33615bd8deadSopenharmony_ci 33625bd8deadSopenharmony_ci Said index texture tokens are: 33635bd8deadSopenharmony_ci 33645bd8deadSopenharmony_ci GL_CURRENT_MATRIX_NV 33655bd8deadSopenharmony_ci GL_CURRENT_MATRIX_STACK_DEPTH_NV 33665bd8deadSopenharmony_ci GL_CURRENT_RASTER_TEXTURE_COORDS 33675bd8deadSopenharmony_ci GL_CURRENT_TEXTURE_COORDS 33685bd8deadSopenharmony_ci GL_TEXTURE_BINDING_1D 33695bd8deadSopenharmony_ci GL_TEXTURE_BINDING_1D_ARRAY 33705bd8deadSopenharmony_ci GL_TEXTURE_BINDING_2D 33715bd8deadSopenharmony_ci GL_TEXTURE_BINDING_2D_ARRAY 33725bd8deadSopenharmony_ci GL_TEXTURE_BINDING_3D 33735bd8deadSopenharmony_ci GL_TEXTURE_BINDING_BUFFER_EXT 33745bd8deadSopenharmony_ci GL_TEXTURE_BINDING_CUBE_MAP 33755bd8deadSopenharmony_ci GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_NV 33765bd8deadSopenharmony_ci GL_TEXTURE_BINDING_RECTANGLE_ARB 33775bd8deadSopenharmony_ci GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 33785bd8deadSopenharmony_ci GL_TEXTURE_BUFFER_FORMAT_EXT 33795bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY 33805bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 33815bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_COUNT 33825bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_POINTER 33835bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_SIZE 33845bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_STRIDE 33855bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY_TYPE 33865bd8deadSopenharmony_ci GL_TEXTURE_GEN_Q 33875bd8deadSopenharmony_ci GL_TEXTURE_GEN_R 33885bd8deadSopenharmony_ci GL_TEXTURE_GEN_S 33895bd8deadSopenharmony_ci GL_TEXTURE_GEN_T 33905bd8deadSopenharmony_ci GL_TEXTURE_MATRIX 33915bd8deadSopenharmony_ci GL_TEXTURE_STACK_DEPTH 33925bd8deadSopenharmony_ci GL_TRANSPOSE_TEXTURE_MATRIX 33935bd8deadSopenharmony_ci GL_TEXTURE_1D 33945bd8deadSopenharmony_ci GL_TEXTURE_2D 33955bd8deadSopenharmony_ci GL_TEXTURE_3D 33965bd8deadSopenharmony_ci GL_TEXTURE_CUBE_MAP 33975bd8deadSopenharmony_ci GL_TEXTURE_RECTANGLE_ARB 33985bd8deadSopenharmony_ci 33995bd8deadSopenharmony_ci For EXT_draw_buffers2 or EXT_transform_feedback queries, the 34005bd8deadSopenharmony_ci index refers to the draw buffer or transform feedback buffer 34015bd8deadSopenharmony_ci appropriately. 34025bd8deadSopenharmony_ci 34035bd8deadSopenharmony_ci (9) Why does the equivalent code for glGetIntegeri_v, 34045bd8deadSopenharmony_ci glGetIntegerIndexedvEXT, glIsEnabledi, glIsEnabledIndexedEXT, 34055bd8deadSopenharmony_ci etc. save and restore the active texture and client active 34065bd8deadSopenharmony_ci texture state appropriately? 34075bd8deadSopenharmony_ci 34085bd8deadSopenharmony_ci RESOLVED: Most query tokens use the active texture but some 34095bd8deadSopenharmony_ci (those starting with GL_TEXTURE_COORD_ARRAY involving vertex 34105bd8deadSopenharmony_ci arrays) use the client active texture. 34115bd8deadSopenharmony_ci 34125bd8deadSopenharmony_ci For historical reasons, glEnable/glDisable can be used to 34135bd8deadSopenharmony_ci enable/disable client state that would be better enabled/disabled 34145bd8deadSopenharmony_ci with glEnableClientState/glDisableClientState. 34155bd8deadSopenharmony_ci 34165bd8deadSopenharmony_ci The appropriate selector (active texture or client active texture) 34175bd8deadSopenharmony_ci is saved or restored based on the query target. 34185bd8deadSopenharmony_ci 34195bd8deadSopenharmony_ci (10) Can these selector-free state update commands be compiled into 34205bd8deadSopenharmony_ci display lists? 34215bd8deadSopenharmony_ci 34225bd8deadSopenharmony_ci RESOLVED: YES 34235bd8deadSopenharmony_ci 34245bd8deadSopenharmony_ci The object name, texture unit, or matrix mode parameter is 34255bd8deadSopenharmony_ci compiled into the display list by-value like any other value 34265bd8deadSopenharmony_ci parameter. 34275bd8deadSopenharmony_ci 34285bd8deadSopenharmony_ci This capability to compile selector-free commands into display 34295bd8deadSopenharmony_ci lists is one of the significant benefits of this extension. 34305bd8deadSopenharmony_ci Prior to this extension, the only reliable way to update 34315bd8deadSopenharmony_ci state for a particular texture unit, matrix, buffer, or 34325bd8deadSopenharmony_ci texture without disturbing OpenGL selector state was using 34335bd8deadSopenharmony_ci glPushAttrib/glPopAttrib which is too expensive to be practical. 34345bd8deadSopenharmony_ci 34355bd8deadSopenharmony_ci However the glGet* selector-free commands, being queries, cannot 34365bd8deadSopenharmony_ci be compiled into display lists. 34375bd8deadSopenharmony_ci 34385bd8deadSopenharmony_ci (11) Why are there no glGetProgramUniform* query commands for GLSL? 34395bd8deadSopenharmony_ci 34405bd8deadSopenharmony_ci RESOLVED: OpenGL 2.0 already has glGetUniform* query commands 34415bd8deadSopenharmony_ci that accept a program parameter as a parameter so are already 34425bd8deadSopenharmony_ci selector-free. 34435bd8deadSopenharmony_ci 34445bd8deadSopenharmony_ci (12) Is glMatrixLoadfEXT(GL_TEXTURE, matrixData), etc. legal? 34455bd8deadSopenharmony_ci 34465bd8deadSopenharmony_ci RESOLVED: YES. 34475bd8deadSopenharmony_ci 34485bd8deadSopenharmony_ci This will update the texture matrix based on the current active 34495bd8deadSopenharmony_ci texture. This avoids the matrix mode selector but still relies 34505bd8deadSopenharmony_ci on the active texture selector. 34515bd8deadSopenharmony_ci 34525bd8deadSopenharmony_ci Use GL_TEXTUREn where n is the texture unit to reference a 34535bd8deadSopenharmony_ci specific texture unit's texture matrix without changing either 34545bd8deadSopenharmony_ci the matrix mode or active texture state. 34555bd8deadSopenharmony_ci 34565bd8deadSopenharmony_ci (13) Some glTex* and glGetTex* routines accept proxy targets. How do 34575bd8deadSopenharmony_ci proxy textures work with the selector-free commands? 34585bd8deadSopenharmony_ci 34595bd8deadSopenharmony_ci RESOLVED: Proxy targets work with the glTex* (glTexImage*) 34605bd8deadSopenharmony_ci and glGetTex* (glGetTexLevelParameter*) commands that support 34615bd8deadSopenharmony_ci proxy textures BUT the texture name must be 0 to avoid a 34625bd8deadSopenharmony_ci GL_INVALID_OPERATION error. 34635bd8deadSopenharmony_ci 34645bd8deadSopenharmony_ci This is a consequence of the requirement that the target parameter 34655bd8deadSopenharmony_ci must match the target of the named texture object. 34665bd8deadSopenharmony_ci 34675bd8deadSopenharmony_ci Only the texture object name zero (which exists for all the 34685bd8deadSopenharmony_ci supported texture targets, including proxies) exists as a 34695bd8deadSopenharmony_ci proxy target. 34705bd8deadSopenharmony_ci 34715bd8deadSopenharmony_ci This should work: 34725bd8deadSopenharmony_ci 34735bd8deadSopenharmony_ci GLuint texobj = 0; 34745bd8deadSopenharmony_ci GLint width; 34755bd8deadSopenharmony_ci glTexureImage2D(texobj, GL_PROXY_TEXTURE_2D, 34765bd8deadSopenharmony_ci 0, GL_RGB, 32, 32, 0, GL_RGB, 34775bd8deadSopenharmony_ci GL_UNSIGNED_BYTE, image); 34785bd8deadSopenharmony_ci glGetTextureLevelParameterivEXT(texobj, GL_PROXY_TEXTURE_2D, 34795bd8deadSopenharmony_ci GL_TEXTURE_WIDTH, &width) 34805bd8deadSopenharmony_ci if (width > 0) { 34815bd8deadSopenharmony_ci // 32x32 RGB texture supported by implementation 34825bd8deadSopenharmony_ci } else { 34835bd8deadSopenharmony_ci // 32x32 RGB texture NOT supported by implementation 34845bd8deadSopenharmony_ci } 34855bd8deadSopenharmony_ci 34865bd8deadSopenharmony_ci This same code would generate a GL_INVALID_OPERATION error if 34875bd8deadSopenharmony_ci texobj was a non-zero value. 34885bd8deadSopenharmony_ci 34895bd8deadSopenharmony_ci (14) What does glClientAttribDefaultEXT(GL_CLIENT_PIXEL_STORE_BIT) do? 34905bd8deadSopenharmony_ci 34915bd8deadSopenharmony_ci RESOLVED: It is equivalent to: 34925bd8deadSopenharmony_ci 34935bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); 34945bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE); 34955bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, 0); 34965bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_SKIP_IMAGES, 0); 34975bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); 34985bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); 34995bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); 35005bd8deadSopenharmony_ci glPixelStorei(GL_UNPACK_ALIGNMENT, 4); 35015bd8deadSopenharmony_ci glPixelStorei(GL_PACK_SWAP_BYTES, GL_FALSE); 35025bd8deadSopenharmony_ci glPixelStorei(GL_PACK_LSB_FIRST, GL_FALSE); 35035bd8deadSopenharmony_ci glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0); 35045bd8deadSopenharmony_ci glPixelStorei(GL_PACK_SKIP_IMAGES, 0); 35055bd8deadSopenharmony_ci glPixelStorei(GL_PACK_ROW_LENGTH, 0); 35065bd8deadSopenharmony_ci glPixelStorei(GL_PACK_SKIP_ROWS, 0); 35075bd8deadSopenharmony_ci glPixelStorei(GL_PACK_SKIP_PIXELS, 0); 35085bd8deadSopenharmony_ci glPixelStorei(GL_PACK_ALIGNMENT, 4); 35095bd8deadSopenharmony_ci 35105bd8deadSopenharmony_ci glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); 35115bd8deadSopenharmony_ci glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); 35125bd8deadSopenharmony_ci 35135bd8deadSopenharmony_ci Note both the pack and unpack state are set to their initial 35145bd8deadSopenharmony_ci values. 35155bd8deadSopenharmony_ci 35165bd8deadSopenharmony_ci Keep in mind that the initial unpack/pack alignment of 4, while 35175bd8deadSopenharmony_ci the specified initial value, is often surprising to OpenGL 35185bd8deadSopenharmony_ci developers who expect the alignment to be 1. 35195bd8deadSopenharmony_ci 35205bd8deadSopenharmony_ci (15) What does glClientAttribDefaultEXT(GL_CLIENT_VERTEX_ARRAY_BIT) do? 35215bd8deadSopenharmony_ci 35225bd8deadSopenharmony_ci RESOLVED: It is equivalent to: 35235bd8deadSopenharmony_ci 35245bd8deadSopenharmony_ci int i; 35255bd8deadSopenharmony_ci GLint max; 35265bd8deadSopenharmony_ci 35275bd8deadSopenharmony_ci glBindBuffer(GL_ARRAY_BUFFER, 0); 35285bd8deadSopenharmony_ci glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 35295bd8deadSopenharmony_ci 35305bd8deadSopenharmony_ci glDisableClientState(GL_EDGE_FLAG_ARRAY); 35315bd8deadSopenharmony_ci glEdgePointer(0, 0); 35325bd8deadSopenharmony_ci 35335bd8deadSopenharmony_ci glDisableClientState(GL_INDEX_ARRAY); 35345bd8deadSopenharmony_ci glIndexPointer(GL_FLOAT, 0, 0); 35355bd8deadSopenharmony_ci 35365bd8deadSopenharmony_ci glDisableClientState(GL_SECONDARY_COLOR_ARRAY); 35375bd8deadSopenharmony_ci glSecondaryColorPointer(4, GL_FLOAT, 0, 0); 35385bd8deadSopenharmony_ci 35395bd8deadSopenharmony_ci glDisableClientState(GL_FOG_COORD_ARRAY); 35405bd8deadSopenharmony_ci glFogCoordPointer(GL_FLOAT, 0, 0); 35415bd8deadSopenharmony_ci 35425bd8deadSopenharmony_ci glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max); 35435bd8deadSopenharmony_ci for (i=0; i<max; i++) { 35445bd8deadSopenharmony_ci glClientActiveTexture(GL_TEXTURE0 + i); 35455bd8deadSopenharmony_ci glDisableClientState(GL_TEXTURE_COORD_ARRAY); 35465bd8deadSopenharmony_ci glTexCoordPointer(4, GL_FLOAT, 0, 0); 35475bd8deadSopenharmony_ci } 35485bd8deadSopenharmony_ci 35495bd8deadSopenharmony_ci glDisableClientState(GL_COLOR_ARRAY); 35505bd8deadSopenharmony_ci glColorPointer(4, GL_FLOAT, 0, 0); 35515bd8deadSopenharmony_ci 35525bd8deadSopenharmony_ci glDisableClientState(GL_NORMAL_ARRAY); 35535bd8deadSopenharmony_ci glNormalPointer(GL_FLOAT, 0, 0); 35545bd8deadSopenharmony_ci 35555bd8deadSopenharmony_ci glDisableClientState(GL_VERTEX_ARRAY); 35565bd8deadSopenharmony_ci glVertexPointer(4, GL_FLOAT, 0, 0); 35575bd8deadSopenharmony_ci 35585bd8deadSopenharmony_ci glDisableClientState(GL_WEIGHT_ARRAY_ARB); 35595bd8deadSopenharmony_ci glWeightPointerARB(0, GL_FLOAT, 0, 0); 35605bd8deadSopenharmony_ci 35615bd8deadSopenharmony_ci glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &max); 35625bd8deadSopenharmony_ci for (i=0; i<max; i++) { 35635bd8deadSopenharmony_ci glDisableVertexAttribArray(i); 35645bd8deadSopenharmony_ci glVertexAttribPointer(i, 4, GL_FLOAT, GL_FALSE, 0, 0); 35655bd8deadSopenharmony_ci } 35665bd8deadSopenharmony_ci 35675bd8deadSopenharmony_ci glClientActiveTexture(GL_TEXTURE0); 35685bd8deadSopenharmony_ci 35695bd8deadSopenharmony_ci Keep in mind the initial state of the vertex array enable 35705bd8deadSopenharmony_ci is disabled. Applications will typically at least 35715bd8deadSopenharmony_ci want glEnableClientState(GL_VERTEX_ARRAY) called after 35725bd8deadSopenharmony_ci glClientAttribDefaultEXT(GL_CLIENT_VERTEX_ARRAY_BIT) for this 35735bd8deadSopenharmony_ci reason. 35745bd8deadSopenharmony_ci 35755bd8deadSopenharmony_ci (16) Should glGetFloatIndexedvEXT and glGetDoubleIndexedvEXT return 35765bd8deadSopenharmony_ci values for non-texture state parameters similar to the parameters 35775bd8deadSopenharmony_ci that work for glGetIntegerIndexedvEXT and glGetBooleanIndexedvEXT 35785bd8deadSopenharmony_ci that EXT_draw_buffers2, EXT_transform_feedback, and 35795bd8deadSopenharmony_ci NV_transform_feedback support? 35805bd8deadSopenharmony_ci 35815bd8deadSopenharmony_ci RESOLVED: glGetFloatIndexedvEXT and glGetDoubleIndexedvEXT 35825bd8deadSopenharmony_ci should accept without error parameter tokens supported 35835bd8deadSopenharmony_ci by glGetIntegerIndexedvEXT and glGetBooleanIndexedvEXT 35845bd8deadSopenharmony_ci through the EXT_draw_buffers2, EXT_transform_feedback, and 35855bd8deadSopenharmony_ci NV_transform_feedback extensions. In these cases, GLfloat or 35865bd8deadSopenharmony_ci GLdouble values respectively of the indexed state should be 35875bd8deadSopenharmony_ci returned. 35885bd8deadSopenharmony_ci 35895bd8deadSopenharmony_ci The EXT_draw_buffers2 extension specifically considered adding 35905bd8deadSopenharmony_ci glGetFloatIndexedvEXT and glGetDoubleIndexedvEXT queries but 35915bd8deadSopenharmony_ci left them out since none of the indexed state introduced was 35925bd8deadSopenharmony_ci floating-point. This extension adds floating-point indexed state 35935bd8deadSopenharmony_ci and so adds glGetFloatIndexedvEXT and glGetDoubleIndexedvEXT 35945bd8deadSopenharmony_ci and thereby enhances the functionality of these unrelated 35955bd8deadSopenharmony_ci extensions supporting glGetIndexedv, etc. by introducing 35965bd8deadSopenharmony_ci glGetFloatIndexedvEXT and glGetDoubleIndexedvEXT and expecting 35975bd8deadSopenharmony_ci them to operate consistently with glGetIntegerIndexedvEXT except 35985bd8deadSopenharmony_ci returning GLfloat and GLdouble versions of the queried state 35995bd8deadSopenharmony_ci respectively. 36005bd8deadSopenharmony_ci 36015bd8deadSopenharmony_ci Following the OpenGL 3.0 function naming convention for indexed 36025bd8deadSopenharmony_ci state, version 1.1 of this specification adds glGetFloati_vEXT 36035bd8deadSopenharmony_ci and glGetDoublei_vEXT queries. 36045bd8deadSopenharmony_ci 36055bd8deadSopenharmony_ci (17) Should there be a selector-free way to query the "program" 36065bd8deadSopenharmony_ci matrices introduced by ARB_vertex_program? 36075bd8deadSopenharmony_ci 36085bd8deadSopenharmony_ci RESOLVED: Yes. The GL_PROGRAM_MATRIX_EXT, 36095bd8deadSopenharmony_ci GL_TRANSPOSE_PROGRAM_MATRIX_EXT, and 36105bd8deadSopenharmony_ci GL_PROGRAM_MATRIX_STACK_DEPTH_EXT tokens supported by 36115bd8deadSopenharmony_ci glGetFloati_vEXT, glGetFloatIndexedvEXT, etc. query the program 36125bd8deadSopenharmony_ci matrices specified by GL_MATRIX0_ARB, etc. 36135bd8deadSopenharmony_ci 36145bd8deadSopenharmony_ci The ARB_vertex_program (and NV_vertex_program) introduced the 36155bd8deadSopenharmony_ci GL_CURRENT_MATRIX_ARB, GL_TRANSPOSE_CURRENT_MATRIX_ARB, and 36165bd8deadSopenharmony_ci GL_CURRENT_MATRIX_STACK_DEPTH_ARB query tokens to get back the 36175bd8deadSopenharmony_ci current matrix based on the glMatrixMode state. This avoided 36185bd8deadSopenharmony_ci adding a large set of tokens to query the matrix, transpose 36195bd8deadSopenharmony_ci matrix, and matrix stack depth for all the program matrices. 36205bd8deadSopenharmony_ci But this made querying these matrices always dependent on the 36215bd8deadSopenharmony_ci matrix mode selector. The indexed glGet queries are allow 36225bd8deadSopenharmony_ci indexed access to the program matrices but the above new query 36235bd8deadSopenharmony_ci tokens must be added for this purpose. 36245bd8deadSopenharmony_ci 36255bd8deadSopenharmony_ci (18) How does this extension interact with APPLE_vertex_array_object? 36265bd8deadSopenharmony_ci 36275bd8deadSopenharmony_ci RESOLVED: The VERTEX_ARRAY_BINDING_APPLE state is 36285bd8deadSopenharmony_ci client vertex-array state so glClientAttribDefaultEXT and 36295bd8deadSopenharmony_ci glPushClientAttribDefaultEXT should, when their mask parameter has 36305bd8deadSopenharmony_ci CLIENT_VERTEX_ARRAY_BIT set, set the VERTEX_ARRAY_BINDING_APPLE 36315bd8deadSopenharmony_ci state to its initial value of zero. 36325bd8deadSopenharmony_ci 36335bd8deadSopenharmony_ci This could go unsaid if the APPLE_vertex_array_object 36345bd8deadSopenharmony_ci specification explicitly listed the VERTEX_ARRAY_BINDING_APPLE 36355bd8deadSopenharmony_ci state in one of tables 6.6, 6.7, and 6.8. 36365bd8deadSopenharmony_ci 36375bd8deadSopenharmony_ci (19) glGetProgramivARB queries per-program state corresponding to 36385bd8deadSopenharmony_ci the current program for the specified target but also queries 36395bd8deadSopenharmony_ci per-target state. Should glGetNamedProgramivEXT return 36405bd8deadSopenharmony_ci only per-program state and not per-target state? Or should 36415bd8deadSopenharmony_ci glGetNamedProgramivEXT return both per-program and per-target 36425bd8deadSopenharmony_ci state? 36435bd8deadSopenharmony_ci 36445bd8deadSopenharmony_ci RESOLVED: glGetNamedProgramivEXT should accept the same pname 36455bd8deadSopenharmony_ci parameters as glGetProgramivARB and thus should handle BOTH 36465bd8deadSopenharmony_ci per-program AND per-target queries. 36475bd8deadSopenharmony_ci 36485bd8deadSopenharmony_ci However glGetNamedProgramivEXT does require the specified 36495bd8deadSopenharmony_ci program object's target must match the specified (supported) 36505bd8deadSopenharmony_ci target parameter otherwise an INVALID_OPERATION error occurs. 36515bd8deadSopenharmony_ci Program object zero applies to all program targets so specifying 36525bd8deadSopenharmony_ci program object zero avoids the possibility of this error. 36535bd8deadSopenharmony_ci 36545bd8deadSopenharmony_ci This resolution avoids having to keep a list of allowed 36555bd8deadSopenharmony_ci per-program vs. disallowed per-target tokens up-to-date with 36565bd8deadSopenharmony_ci future extensions. 36575bd8deadSopenharmony_ci 36585bd8deadSopenharmony_ci The ARB_vertex_program and ARB_fragment_program per-target 36595bd8deadSopenharmony_ci program query tokens are GL_PROGRAM_BINDING_ARB, 36605bd8deadSopenharmony_ci GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, 36615bd8deadSopenharmony_ci GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 36625bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 36635bd8deadSopenharmony_ci GL_MAX_PROGRAM_INSTRUCTIONS_ARB, 36645bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, 36655bd8deadSopenharmony_ci GL_MAX_PROGRAM_TEMPORARIES_ARB, 36665bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, 36675bd8deadSopenharmony_ci GL_MAX_PROGRAM_PARAMETERS_ARB, 36685bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, GL_MAX_PROGRAM_ATTRIBS_ARB, 36695bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 36705bd8deadSopenharmony_ci GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB, 36715bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, 36725bd8deadSopenharmony_ci GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, 36735bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, 36745bd8deadSopenharmony_ci GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, 36755bd8deadSopenharmony_ci GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, 36765bd8deadSopenharmony_ci GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, 36775bd8deadSopenharmony_ci GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV, GL_MAX_PROGRAM_CALL_DEPTH_NV, 36785bd8deadSopenharmony_ci GL_MAX_PROGRAM_IF_DEPTH_NV, GL_MAX_PROGRAM_LOOP_DEPTH_NV, 36795bd8deadSopenharmony_ci GL_MAX_PROGRAM_LOOP_COUNT_NV. The NV_gpu_program4 36805bd8deadSopenharmony_ci extension adds GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV, 36815bd8deadSopenharmony_ci GL_MAX_PROGRAM_RESULT_COMPONENTS_NV, 36825bd8deadSopenharmony_ci GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV, 36835bd8deadSopenharmony_ci GL_MAX_PROGRAM_GENERIC_RESULTS_NV, 36845bd8deadSopenharmony_ci GL_MAX_PROGRAM_OUTPUT_VERTICES_NV and 36855bd8deadSopenharmony_ci GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV. 36865bd8deadSopenharmony_ci The NV_parameter_buffer_object extension adds 36875bd8deadSopenharmony_ci GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV and 36885bd8deadSopenharmony_ci GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV. 36895bd8deadSopenharmony_ci 36905bd8deadSopenharmony_ci The ARB_vertex_program and ARB_fragment_program per-program 36915bd8deadSopenharmony_ci program query tokens are GL_PROGRAM_LENGTH_ARB, 36925bd8deadSopenharmony_ci GL_PROGRAM_FORMAT_ARB, GL_PROGRAM_INSTRUCTIONS_ARB, 36935bd8deadSopenharmony_ci GL_PROGRAM_TEMPORARIES_ARB, GL_PROGRAM_PARAMETERS_ARB, 36945bd8deadSopenharmony_ci GL_PROGRAM_ATTRIBS_ARB, GL_PROGRAM_ADDRESS_REGISTERS_ARB, 36955bd8deadSopenharmony_ci GL_PROGRAM_ALU_INSTRUCTIONS_ARB, GL_PROGRAM_TEX_INSTRUCTIONS_ARB, 36965bd8deadSopenharmony_ci GL_PROGRAM_TEX_INDIRECTIONS_ARB, 36975bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 36985bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_TEMPORARIES_ARB, 36995bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_PARAMETERS_ARB, GL_PROGRAM_NATIVE_ATTRIBS_ARB, 37005bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 37015bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, 37025bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, 37035bd8deadSopenharmony_ci GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, and 37045bd8deadSopenharmony_ci GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB. 37055bd8deadSopenharmony_ci The NV_gpu_program4 extension adds GL_GEOMETRY_VERTICES_OUT_EXT, 37065bd8deadSopenharmony_ci GL_GEOMETRY_INPUT_TYPE_EXT, GL_GEOMETRY_OUTPUT_TYPE_EXT, 37075bd8deadSopenharmony_ci GL_PROGRAM_ATTRIB_COMPONENTS_NV, and 37085bd8deadSopenharmony_ci GL_PROGRAM_RESULT_COMPONENTS_NV. 37095bd8deadSopenharmony_ci 37105bd8deadSopenharmony_ci (20) When multiple contexts are sharing objects such as textures, 37115bd8deadSopenharmony_ci programs, and/or buffers what expectations exist for when other 37125bd8deadSopenharmony_ci contexts will see the state updates to textures, programs, 37135bd8deadSopenharmony_ci and buffers manipulated by this extension? 37145bd8deadSopenharmony_ci 37155bd8deadSopenharmony_ci RESOLVED: This extension doesn't change the expected semantics 37165bd8deadSopenharmony_ci for multiple context sharing objects within a share group, but 37175bd8deadSopenharmony_ci this is an appropriate place to document these expectations for 37185bd8deadSopenharmony_ci both developers and implementers. 37195bd8deadSopenharmony_ci 37205bd8deadSopenharmony_ci Object state updates are visible in two ways: 1) queries return 37215bd8deadSopenharmony_ci the current (most recently updated) state, and 2) rendering 37225bd8deadSopenharmony_ci results are affected by the updated state. 37235bd8deadSopenharmony_ci 37245bd8deadSopenharmony_ci When a context updates objects, that updating context must observe 37255bd8deadSopenharmony_ci those updates immediately for both queries and rendering results. 37265bd8deadSopenharmony_ci This is a strong requirement for "sequential consistency" of 37275bd8deadSopenharmony_ci updates and queries based on the context's own sequential stream 37285bd8deadSopenharmony_ci of commands and queries. 37295bd8deadSopenharmony_ci 37305bd8deadSopenharmony_ci Queries by other OpenGL rendering contexts in the same share 37315bd8deadSopenharmony_ci group with a context updating some shared OpenGL object must 37325bd8deadSopenharmony_ci observe the effect of another context's update with "transactional 37335bd8deadSopenharmony_ci consistency". Program state updates and queries are treated as 37345bd8deadSopenharmony_ci "transactions" that must be consistent with some serialized order. 37355bd8deadSopenharmony_ci Implementations typically achieved this by guaranteeing mutual 37365bd8deadSopenharmony_ci exclusion for all object updates and queries. This is a strong 37375bd8deadSopenharmony_ci consistency requirement. 37385bd8deadSopenharmony_ci 37395bd8deadSopenharmony_ci Rendering results based on updated state are subject to a 37405bd8deadSopenharmony_ci weaker consistency requirement. Rendering results by other 37415bd8deadSopenharmony_ci OpenGL rendering contexts in the same share group with a context 37425bd8deadSopenharmony_ci updating some shared OpenGL object may see a stale version of 37435bd8deadSopenharmony_ci the object's state if the those contexts sharing the object are 37445bd8deadSopenharmony_ci bound to the object when the state update occurs. 37455bd8deadSopenharmony_ci 37465bd8deadSopenharmony_ci Even so, the stale values of the object's state must always 37475bd8deadSopenharmony_ci represent a consistent state of the object transactionally 37485bd8deadSopenharmony_ci consistent when the object was last "bound" or otherwise used 37495bd8deadSopenharmony_ci for rendering. We refer to this weaker consistency as "bind 37505bd8deadSopenharmony_ci consistency". 37515bd8deadSopenharmony_ci 37525bd8deadSopenharmony_ci This requirement means, for example, a texture object should NEVER 37535bd8deadSopenharmony_ci observe the red and green components to be from one state update 37545bd8deadSopenharmony_ci while the red and alpha components correspond to a subsequent 37555bd8deadSopenharmony_ci state update. 37565bd8deadSopenharmony_ci 37575bd8deadSopenharmony_ci A context other than the context performing an update is 37585bd8deadSopenharmony_ci guaranteed to see a "transactional consistent" view of an 37595bd8deadSopenharmony_ci object's state when the context next processes a command to bind 37605bd8deadSopenharmony_ci or otherwise "use" an object for rendering. However if the 37615bd8deadSopenharmony_ci object being updated is currently bound or "used" by another 37625bd8deadSopenharmony_ci context, when this update is observed is not well-defined. 37635bd8deadSopenharmony_ci So to guarantee an up-to-date version of a bound object's state, 37645bd8deadSopenharmony_ci the context must re-bind to the updated object. 37655bd8deadSopenharmony_ci 37665bd8deadSopenharmony_ci (UNRESOLVED: Should a re-bind require binding to a different 37675bd8deadSopenharmony_ci object and then binding back to the object, or is simply rebinding 37685bd8deadSopenharmony_ci to the same name already bound enough? As a performance 37695bd8deadSopenharmony_ci optimization, an OpenGL implementation may treat binding to 37705bd8deadSopenharmony_ci an already bound object as a no-op. However it would be nice 37715bd8deadSopenharmony_ci if binding to any already bound object at least checked if the 37725bd8deadSopenharmony_ci object had been updated since the last bind and, if an update 37735bd8deadSopenharmony_ci has occurred, update the context's view of the object used for 37745bd8deadSopenharmony_ci rendering.) 37755bd8deadSopenharmony_ci 37765bd8deadSopenharmony_ci Some examples (with serialized order shown): 37775bd8deadSopenharmony_ci 37785bd8deadSopenharmony_ci Sequential consistency for one thread: 37795bd8deadSopenharmony_ci 37805bd8deadSopenharmony_ci thread A: 37815bd8deadSopenharmony_ci glBindMultiTextureEXT(GL_TEXTURE1, GL_TEXTURE_2D, 23); 37825bd8deadSopenharmony_ci glEnablei(GL_TEXTURE_2D, 1); 37835bd8deadSopenharmony_ci glTextureParameterivEXT(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 37845bd8deadSopenharmony_ci glDrawElements(...); // first render 37855bd8deadSopenharmony_ci glTextureParameterivEXT(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 37865bd8deadSopenharmony_ci glDrawElements(...); // second render 37875bd8deadSopenharmony_ci 37885bd8deadSopenharmony_ci The first render must observer texture 23 using GL_LINEAR 37895bd8deadSopenharmony_ci minification filtering while the second render must observe 37905bd8deadSopenharmony_ci GL_NEAREST minification filtering. 37915bd8deadSopenharmony_ci 37925bd8deadSopenharmony_ci Transactional consistency for queries by multiple sharing 37935bd8deadSopenharmony_ci contexts: 37945bd8deadSopenharmony_ci 37955bd8deadSopenharmony_ci thread A: 37965bd8deadSopenharmony_ci glTextureParameteriv(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 37975bd8deadSopenharmony_ci glGetTextureParameteriv(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &geti1); 37985bd8deadSopenharmony_ci thread B: 37995bd8deadSopenharmony_ci glTextureParameteriv(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 38005bd8deadSopenharmony_ci thread A: 38015bd8deadSopenharmony_ci glGetTextureParameteriv(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &geti2); 38025bd8deadSopenharmony_ci 38035bd8deadSopenharmony_ci geti1 should return GL_LINEAR bug geti2 should return GL_NEAREST. 38045bd8deadSopenharmony_ci 38055bd8deadSopenharmony_ci Bind consistency for rendering by multiple sharing contexts: 38065bd8deadSopenharmony_ci 38075bd8deadSopenharmony_ci thread A: 38085bd8deadSopenharmony_ci glBindMultiTextureEXT(GL_TEXTURE1, GL_TEXTURE_2D, 23); 38095bd8deadSopenharmony_ci glEnablei(GL_TEXTURE_2D, 1); 38105bd8deadSopenharmony_ci glTextureParameterivEXT(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 38115bd8deadSopenharmony_ci thread B: 38125bd8deadSopenharmony_ci glTextureParameterivEXT(23, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 38135bd8deadSopenharmony_ci thread A: 38145bd8deadSopenharmony_ci glDrawElements(...); // first render 38155bd8deadSopenharmony_ci glBindMultiTextureEXT(GL_TEXTURE1, GL_TEXTURE_2D, 23); 38165bd8deadSopenharmony_ci glDrawElements(...); // second render 38175bd8deadSopenharmony_ci 38185bd8deadSopenharmony_ci The first render may or may not observe the minification 38195bd8deadSopenharmony_ci filter be set to GL_NEAREST; an implementation could use the 38205bd8deadSopenharmony_ci stale GL_LINEAR state. The second render should observe the 38215bd8deadSopenharmony_ci minification filter be set to GL_NEAREST. 38225bd8deadSopenharmony_ci 38235bd8deadSopenharmony_ci Perhaps a bind away might be required for consistency, binding 38245bd8deadSopenharmony_ci away from 23, then back to 23: 38255bd8deadSopenharmony_ci 38265bd8deadSopenharmony_ci thread A: 38275bd8deadSopenharmony_ci glBindMultiTextureEXT(GL_TEXTURE1, GL_TEXTURE_2D, 0); 38285bd8deadSopenharmony_ci glBindMultiTextureEXT(GL_TEXTURE1, GL_TEXTURE_2D, 23); 38295bd8deadSopenharmony_ci glDrawElements(...); // second render 38305bd8deadSopenharmony_ci 38315bd8deadSopenharmony_ci (20) Should direct access commands and queries be added for 38325bd8deadSopenharmony_ci renderbuffer and framebuffer objects? 38335bd8deadSopenharmony_ci 38345bd8deadSopenharmony_ci RESOLVED: Yes. 38355bd8deadSopenharmony_ci 38365bd8deadSopenharmony_ci These should be added for completeness. 38375bd8deadSopenharmony_ci 38385bd8deadSopenharmony_ci (21) Should the Named framebuffer and renderbuffer object commands take 38395bd8deadSopenharmony_ci a target parameter in addition to the initial GLuint 38405bd8deadSopenharmony_ci framebuffer/renderbuffer parameter? 38415bd8deadSopenharmony_ci 38425bd8deadSopenharmony_ci RESOLVED: No, except for CheckNamedFramebufferStatusEXT (see 38435bd8deadSopenharmony_ci the next issue). 38445bd8deadSopenharmony_ci 38455bd8deadSopenharmony_ci The rationale for including a target parameter for the texture 38465bd8deadSopenharmony_ci commands is that the default texture object zero and cube map 38475bd8deadSopenharmony_ci face targets need the target for disambiguation. 38485bd8deadSopenharmony_ci 38495bd8deadSopenharmony_ci Likewise assembly programs needs a target parameter to know 38505bd8deadSopenharmony_ci how source text should be parsed, etc. Programs really have 38515bd8deadSopenharmony_ci different target types (vertex, geometry, fragment). 38525bd8deadSopenharmony_ci 38535bd8deadSopenharmony_ci Buffer objects do not include a target parameter in their Named 38545bd8deadSopenharmony_ci commands because the target identifies the binding point for the 38555bd8deadSopenharmony_ci buffer while buffers themselves do not have a target type so the 38565bd8deadSopenharmony_ci target is relevant for binding buffers, but not accessing buffers. 38575bd8deadSopenharmony_ci 38585bd8deadSopenharmony_ci The only legal values for target or RENDERBUFFER and 38595bd8deadSopenharmony_ci FRAMEBUFFER respectively so there is really one type of 38605bd8deadSopenharmony_ci renderbuffer and framebuffer respectively. 38615bd8deadSopenharmony_ci 38625bd8deadSopenharmony_ci The target parameter could be used by future extensions but 38635bd8deadSopenharmony_ci so far the several extensions that extend framebuffer and 38645bd8deadSopenharmony_ci renderbuffer objects already (EXT_framebuffer_multisample, 38655bd8deadSopenharmony_ci NV_framebuffer_multisample_coverage, EXT_geometry_shader4, 38665bd8deadSopenharmony_ci and NV_gpu_program4) maintain a single legal framebuffer and 38675bd8deadSopenharmony_ci renderbuffer target value. 38685bd8deadSopenharmony_ci 38695bd8deadSopenharmony_ci This does not preclude new binding targets for renderbuffer or 38705bd8deadSopenharmony_ci framebuffers in the way buffer objects support lots of binding 38715bd8deadSopenharmony_ci targets but buffers themselves are target-free (unlike textures 38725bd8deadSopenharmony_ci and programs). 38735bd8deadSopenharmony_ci 38745bd8deadSopenharmony_ci (22) How should the target parameter work for 38755bd8deadSopenharmony_ci glCheckNamedFramebufferStatusEXT? 38765bd8deadSopenharmony_ci 38775bd8deadSopenharmony_ci RESOLVED: The target parameter determines whether the status 38785bd8deadSopenharmony_ci check is for reading or drawing. 38795bd8deadSopenharmony_ci 38805bd8deadSopenharmony_ci OpenGL 3.0 (by incorporating the EXT_framebuffer_blit extension) 38815bd8deadSopenharmony_ci introduces GL_DRAW_FRAMEBUFFER and GL_READ_FRAMEBUFFER targets. 38825bd8deadSopenharmony_ci A framebuffer object may be supported for drawing but perhaps 38835bd8deadSopenharmony_ci not reading (or vice versa). glCheckNamedFramebufferStatusEXT 38845bd8deadSopenharmony_ci uses its target parameter to determine whether the check is for 38855bd8deadSopenharmony_ci reading or writing. 38865bd8deadSopenharmony_ci 38875bd8deadSopenharmony_ci Because glCheckFramebufferStatus allows for "an 38885bd8deadSopenharmony_ci implementation-dependent set of restrictions" for 38895bd8deadSopenharmony_ci which GL_FRAMEBUFFER_UNSUPPORTED may be returned, 38905bd8deadSopenharmony_ci it is possible for glCheckNamedFramebufferStatusEXT 38915bd8deadSopenharmony_ci to return GL_FRAMEBUFFER_COMPLETE when binding to 38925bd8deadSopenharmony_ci the framebuffer object with glBindFramebuffer and 38935bd8deadSopenharmony_ci then calling glCheckFramebufferStatus may generate 38945bd8deadSopenharmony_ci GL_FRAMEBUFFER_COMPLETE may be returned, it is possible 38955bd8deadSopenharmony_ci for glCheckNamedFramebufferStatusEXT could return still return 38965bd8deadSopenharmony_ci GL_FRAMEBUFFER_UNSUPPORTED. 38975bd8deadSopenharmony_ci 38985bd8deadSopenharmony_ci Despite this allowance, the intent here however is that an 38995bd8deadSopenharmony_ci application should be able to create a framebuffer object and 39005bd8deadSopenharmony_ci determine in most cases that a framebuffer object can be supported 39015bd8deadSopenharmony_ci with glCheckNamedFramebufferStatusEXT. 39025bd8deadSopenharmony_ci 39035bd8deadSopenharmony_ci (23) Do we need glFramebufferDrawBufferEXT, glFramebufferDrawBuffersEXT 39045bd8deadSopenharmony_ci and glFramebufferReadBufferEXT commands? 39055bd8deadSopenharmony_ci 39065bd8deadSopenharmony_ci UNRESOLVED: Yes, add them. 39075bd8deadSopenharmony_ci 39085bd8deadSopenharmony_ci The READ_BUFFER and DRAW_BUFFER state is per-framebuffer object 39095bd8deadSopenharmony_ci and glDrawBuffers, glReadBuffer, and glDrawBuffer update the 39105bd8deadSopenharmony_ci currently bound framebuffer object. These commands use the 39115bd8deadSopenharmony_ci current framebuffer object binding as a selector so there should 39125bd8deadSopenharmony_ci be selector-free versions of this commands. 39135bd8deadSopenharmony_ci 39145bd8deadSopenharmony_ci Since these commands didn't have Framebuffer in the name before, 39155bd8deadSopenharmony_ci we avoid saying "NamedFramebuffer" in the commands. 39165bd8deadSopenharmony_ci 39175bd8deadSopenharmony_ci (24) Should there be a selector-free way to query the Framebuffer 39185bd8deadSopenharmony_ci Dependent Values (table 9.nnn) for a named framebuffer object? 39195bd8deadSopenharmony_ci 39205bd8deadSopenharmony_ci RESOLVED: No. 39215bd8deadSopenharmony_ci 39225bd8deadSopenharmony_ci It makes sense to provide selector-free queries for API-settable 39235bd8deadSopenharmony_ci state such as GL_READ_BUFFER, GL_DRAW_BUFFER, and GL_DRAW_BUFFERi 39245bd8deadSopenharmony_ci but framebuffer dependent values of a framebuffer object state 39255bd8deadSopenharmony_ci are really derived state value and depends on the status of a 39265bd8deadSopenharmony_ci framebuffer object bind. 39275bd8deadSopenharmony_ci 39285bd8deadSopenharmony_ci OpenGL 3.0 (by incorporating the EXT_framebuffer_object) 39295bd8deadSopenharmony_ci describes per-framebuffer object state in its tables 4.nnn 39305bd8deadSopenharmony_ci and 9.nnn. The framebuffer object API allows this state to be 39315bd8deadSopenharmony_ci queried with glGetIntegerv, etc. based on the current framebuffer 39325bd8deadSopenharmony_ci object binding (a selector). The glGetFramebufferParameteriv 39335bd8deadSopenharmony_ci command queries table 4.nnn state, but not table 9.nnn state. 39345bd8deadSopenharmony_ci 39355bd8deadSopenharmony_ci Issue #25 in the EXT_framebuffer_object specification is relevant 39365bd8deadSopenharmony_ci here. Issue #25 (the issue could be more clear...) indicates 39375bd8deadSopenharmony_ci that zero may be returned if a given buffer is not attached 39385bd8deadSopenharmony_ci (the case where the framebuffer object is inconsistent). 39395bd8deadSopenharmony_ci 39405bd8deadSopenharmony_ci The GL_FRAMEBUFFER_UNSUPPORTED status can occur due to "an 39415bd8deadSopenharmony_ci implementation-dependent set of restrictions". Presumably these 39425bd8deadSopenharmony_ci restrictions might not be evaluated until glBindFramebuffer 39435bd8deadSopenharmony_ci time. This blanket "didn't work" status means the appropriate 39445bd8deadSopenharmony_ci per-framebuffer state may not be determined without binding to 39455bd8deadSopenharmony_ci the framebuffer object. 39465bd8deadSopenharmony_ci 39475bd8deadSopenharmony_ci A future revision of this specification (such as its integration 39485bd8deadSopenharmony_ci into an FBO-enabled core specification) may wish to reconsider 39495bd8deadSopenharmony_ci this issue and add table 9.nnn state to the state queriable by 39505bd8deadSopenharmony_ci glGetFramebufferParameteriv. 39515bd8deadSopenharmony_ci 39525bd8deadSopenharmony_ci If so, there should also be a query 39535bd8deadSopenharmony_ci glGetFramebufferMultisamplefvEXT for NV_explicit_multisample 39545bd8deadSopenharmony_ci for similar reasons. 39555bd8deadSopenharmony_ci 39565bd8deadSopenharmony_ci void GetFramebufferMultisamplefvEXT(uint framebuffer, 39575bd8deadSopenharmony_ci enum pname, uint index, 39585bd8deadSopenharmony_ci float *val); 39595bd8deadSopenharmony_ci 39605bd8deadSopenharmony_ci (25) Should the selector-free versions of various OpenGL 3.0 and 39615bd8deadSopenharmony_ci EXT_framebuffer_object framebuffer object commands not be allowed 39625bd8deadSopenharmony_ci in display lists when the selector-based versions are specified 39635bd8deadSopenharmony_ci to not be compiled into display lists? 39645bd8deadSopenharmony_ci 39655bd8deadSopenharmony_ci RESOLVED: Yes, keep this same restriction. 39665bd8deadSopenharmony_ci 39675bd8deadSopenharmony_ci It is unfortunate that commands such as glGenerateMipmap 39685bd8deadSopenharmony_ci are explicitly specified to not be compiled into display lists; 39695bd8deadSopenharmony_ci this extension simply retains these same restrictions. 39705bd8deadSopenharmony_ci 39715bd8deadSopenharmony_ci (26) Direct state access commands and queries can implicit object 39725bd8deadSopenharmony_ci initialization when provided unused object names. If implicit 39735bd8deadSopenharmony_ci object initialization is required but the command would 39745bd8deadSopenharmony_ci subsequently generate an error, should the object be initialized 39755bd8deadSopenharmony_ci and the name now be used? 39765bd8deadSopenharmony_ci 39775bd8deadSopenharmony_ci RESOLVED: Yes, an object for an unused name can be initialized 39785bd8deadSopenharmony_ci but if the command generates an error, the object should still 39795bd8deadSopenharmony_ci be initialized and the name now used. 39805bd8deadSopenharmony_ci 39815bd8deadSopenharmony_ci Most OpenGL commands (excepting GL_OUT_OF_MEMORY errors) are 39825bd8deadSopenharmony_ci ignored if an error occurs. 39835bd8deadSopenharmony_ci 39845bd8deadSopenharmony_ci Direct state access commands are an exception because they 39855bd8deadSopenharmony_ci should be "morally equivalent" to doing a glBind* followed by 39865bd8deadSopenharmony_ci the selector-based command. For example: 39875bd8deadSopenharmony_ci 39885bd8deadSopenharmony_ci GLuint update2D = 27; 39895bd8deadSopenharmony_ci glTextureImage2D(update2D, GL_TEXTURE_2D, ...); 39905bd8deadSopenharmony_ci 39915bd8deadSopenharmony_ci should be morally equivalent to: 39925bd8deadSopenharmony_ci 39935bd8deadSopenharmony_ci GLuint update2D = 27; 39945bd8deadSopenharmony_ci GLint bound2D; 39955bd8deadSopenharmony_ci glGetIntegerv(GL_TEXTURE_BINDING_2D, &bound2D); 39965bd8deadSopenharmony_ci glBindTexture(GL_TEXTURE_2D, update2D); 39975bd8deadSopenharmony_ci glTexImage2D(GL_TEXTURE_2D, ...); 39985bd8deadSopenharmony_ci glBindTexture(GL_TEXTURE_2D, bound2D); 39995bd8deadSopenharmony_ci 40005bd8deadSopenharmony_ci If the ... arguments to glTexImage2D and glTextureImage2D 40015bd8deadSopenharmony_ci resulted in an error (say a GL_INVALID_ENUM), in both cases we 40025bd8deadSopenharmony_ci want texture object 27 to exist after the sequence. 40035bd8deadSopenharmony_ci 40045bd8deadSopenharmony_ci The rationale for this behavior is an application lacking 40055bd8deadSopenharmony_ci EXT_direct_state_access should be able to generate equivalent 40065bd8deadSopenharmony_ci command sequences and have "morally equivalent" error behavior. 40075bd8deadSopenharmony_ci 40085bd8deadSopenharmony_ci It is deemed undesirable for an non-EXT_direct_state_access path 40095bd8deadSopenharmony_ci to behave differently (initializing unused objects on glBind*) 40105bd8deadSopenharmony_ci despite an error in the subsequent state-setting command or 40115bd8deadSopenharmony_ci state-querying query. 40125bd8deadSopenharmony_ci 40135bd8deadSopenharmony_ci (27) How many entry points are introduced? 40145bd8deadSopenharmony_ci 40155bd8deadSopenharmony_ci This extension adds just 3 tokens but specifies 214 functions 40165bd8deadSopenharmony_ci (192 for version 1.0 plus 22 for OpenGL 3.0 support added by 40175bd8deadSopenharmony_ci version 1.1). 40185bd8deadSopenharmony_ci 40195bd8deadSopenharmony_ci Technically 5 of these functions were previously introduced by 40205bd8deadSopenharmony_ci EXT_draw_buffers2 and are now part of OpenGL 3.0. 40215bd8deadSopenharmony_ci 40225bd8deadSopenharmony_ci OpenGL 2.1 and 3.0 contains 583 and 666 functions respectively. 40235bd8deadSopenharmony_ci So the OpenGL 2.1 subset of EXT_direct_state_access is +22% 40245bd8deadSopenharmony_ci more functions beyond OpenGL 2.1's function set. 40255bd8deadSopenharmony_ci 40265bd8deadSopenharmony_ci By comparison, OpenGL 2.0 added 93 functions (primarily for GLSL 40275bd8deadSopenharmony_ci support) to OpenGL 1.5's 484 functions, a +19% increase in the 40285bd8deadSopenharmony_ci function set. OpenGL 3.0 added 83 new functions. 40295bd8deadSopenharmony_ci 40305bd8deadSopenharmony_ci OpenGL's immediate mode API function count is considerably 40315bd8deadSopenharmony_ci larger than the number of EXT_direct_state_access functions. 40325bd8deadSopenharmony_ci There are 212 "vertex attribute" functions (counting all core 40335bd8deadSopenharmony_ci OpenGL 2.1 glVertex*, glColor*, glSecondaryColor*, glNormal*, 40345bd8deadSopenharmony_ci glTexCoord*, glMultiTexCoord*, glVertexAttrib*, glMaterial*, 40355bd8deadSopenharmony_ci glRasterPos*, and glWindowPos* variants). 40365bd8deadSopenharmony_ci 40375bd8deadSopenharmony_ci So the core EXT_direct_state_access function count is 63% of 40385bd8deadSopenharmony_ci the count of core OpenGL 2.1 "vertex attribute" functions. 40395bd8deadSopenharmony_ci 40405bd8deadSopenharmony_ci Another way to measure the footprint of EXT_direct_state_access 40415bd8deadSopenharmony_ci is in terms of the optimized compiled user-space driver 40425bd8deadSopenharmony_ci the size (text+data) of a modern Windows XP OpenGL driver 40435bd8deadSopenharmony_ci supporting EXT_direct_state_access compared to the same 40445bd8deadSopenharmony_ci driver without EXT_direct_state_access supported compiled in. 40455bd8deadSopenharmony_ci The EXT_direct_state_access driver is +2.5% larger. 40465bd8deadSopenharmony_ci 40475bd8deadSopenharmony_ci (28) How should vertex array objects be supported? 40485bd8deadSopenharmony_ci 40495bd8deadSopenharmony_ci RESOLVED: The EXT version of this specification didn't provide 40505bd8deadSopenharmony_ci interactions with the glVertexArrayBindAPPLE selector introduced 40515bd8deadSopenharmony_ci by the APPLE_vertex_buffer_object extension. Now that this 40525bd8deadSopenharmony_ci extension is incorporated into OpenGL 3.0, it makes sense for 40535bd8deadSopenharmony_ci an ARB extension to incorporate selector-free support for vertex 40545bd8deadSopenharmony_ci buffer objects. 40555bd8deadSopenharmony_ci 40565bd8deadSopenharmony_ci Selector-free versions of the vertex array specification commands 40575bd8deadSopenharmony_ci are of the form (using glColorPointer as an example): 40585bd8deadSopenharmony_ci 40595bd8deadSopenharmony_ci void glVertexArrayColorOffsetEXT(uint vaobj, uint buffer, 40605bd8deadSopenharmony_ci int size, enum type, sizei stride, 40615bd8deadSopenharmony_ci intptr offset); 40625bd8deadSopenharmony_ci 40635bd8deadSopenharmony_ci There are two initial parameter for both the vertex array 40645bd8deadSopenharmony_ci object selector (vaobj) and the latched buffer state (buffer). 40655bd8deadSopenharmony_ci 40665bd8deadSopenharmony_ci The vaobj parameter is needed for the commands to be 40675bd8deadSopenharmony_ci selector-free. The latched buffer is an explicit parameter to 40685bd8deadSopenharmony_ci avoid having disturb the GL_ARRAY_BUFFER selector. 40695bd8deadSopenharmony_ci 40705bd8deadSopenharmony_ci (While using glPushClientAttribDefaultEXT/glPopClientAttrib 40715bd8deadSopenharmony_ci works to avoid disturbing latched client vertex array buffer 40725bd8deadSopenharmony_ci binding state--ignoring client attrib stack overflows--that 40735bd8deadSopenharmony_ci approach doesn't work for vertex array objects because 40745bd8deadSopenharmony_ci glPushClientAttribDefaultARB/glPopClientAttrib would default all 40755bd8deadSopenharmony_ci the initial values of the currently bound vertex array object.) 40765bd8deadSopenharmony_ci 40775bd8deadSopenharmony_ci Also the last "const GLvoid * pointer" parameter is changed to 40785bd8deadSopenharmony_ci an "intptr offset" parameter. This change reflects the more 40795bd8deadSopenharmony_ci encouraged and generally more efficient usage of pulling vertex 40805bd8deadSopenharmony_ci arrays from vertex buffer objects. This usage avoids having to 40815bd8deadSopenharmony_ci always cast an offset to a pointer. 40825bd8deadSopenharmony_ci 40835bd8deadSopenharmony_ci Because the GLintptr type has the same sizeof as a pointer, 40845bd8deadSopenharmony_ci applications seeking to pass pointers with a zero value for the 40855bd8deadSopenharmony_ci buffer parameter can do so by casting their pointer to a GLintptr. 40865bd8deadSopenharmony_ci Example: 40875bd8deadSopenharmony_ci 40885bd8deadSopenharmony_ci static GLfloat colors[3*20]; 40895bd8deadSopenharmony_ci glVertexArrayColorOffsetEXT(27, /*client-state*/0, 40905bd8deadSopenharmony_ci 3, GL_FLOAT, 12, (GLintptr)colors); 40915bd8deadSopenharmony_ci 40925bd8deadSopenharmony_ci Also added are selector-free vertex array object enable/disable 40935bd8deadSopenharmony_ci commands and queries. The queries return GLintptr values to 40945bd8deadSopenharmony_ci make sure pointers as well as offsets can be returned. 40955bd8deadSopenharmony_ci 40965bd8deadSopenharmony_ci (29) How should vertex array object queries be supported? 40975bd8deadSopenharmony_ci 40985bd8deadSopenharmony_ci RESOLVED: Provide both glGetVertexArray*Parameteriv and 40995bd8deadSopenharmony_ci glGetVertexArray*Pointerv queries. 41005bd8deadSopenharmony_ci 41015bd8deadSopenharmony_ci Rather than providing both integer and pointer queries, it is 41025bd8deadSopenharmony_ci tempting to provide just a query accepting a GLintptr pointer. 41035bd8deadSopenharmony_ci But that's a likely pitfall for 64-bit coding. Someone coding for 41045bd8deadSopenharmony_ci 32-bit could pass a GLint* without complaint from the compiler 41055bd8deadSopenharmony_ci since both GLint* and GLintptr* are pointers to a 32-bit value, 41065bd8deadSopenharmony_ci but in a 64-bit compilation environment, GLintptr* is a pointer 41075bd8deadSopenharmony_ci to a 64-bit value. While 64-bit compilers are likely to error 41085bd8deadSopenharmony_ci (or at least warn) about this situation, a GLintptr* is likely 41095bd8deadSopenharmony_ci to encourage 64-bit portability problems. Having both a pointer 41105bd8deadSopenharmony_ci and integer query avoids this problem. 41115bd8deadSopenharmony_ci 41125bd8deadSopenharmony_ci (30) What should happen when a negative offset is passed to the 41135bd8deadSopenharmony_ci glVertexArray*OffsetEXT routines? 41145bd8deadSopenharmony_ci 41155bd8deadSopenharmony_ci RESOLVED: When the buffer is non-zero, the offset really should 41165bd8deadSopenharmony_ci be a positive value so generate a GL_INVALID_VALUE if a negative 41175bd8deadSopenharmony_ci offset is passed to these routines when buffer is non-zero. 41185bd8deadSopenharmony_ci When the buffer is non-negative, the GLintptr offset parameter 41195bd8deadSopenharmony_ci will be treated as a pointer; in this case, there should be 41205bd8deadSopenharmony_ci no check for negative values of the offset parameter since the 41215bd8deadSopenharmony_ci negative parameter could, in fact, be a valid pointer. 41225bd8deadSopenharmony_ci 41235bd8deadSopenharmony_ci This raises the interesting point as to whether the several 41245bd8deadSopenharmony_ci core OpenGL buffer API commands such as glBufferSubData, 41255bd8deadSopenharmony_ci glMapBufferRange, and glFlushMappedBufferRange should actually 41265bd8deadSopenharmony_ci have a type of GLsizeiptr for their offset parameter. Doing so 41275bd8deadSopenharmony_ci would simplify the language in section 2.9 (Buffer Object) by 41285bd8deadSopenharmony_ci eliminating the need to document GL_INVALID_OFFSET errors for 41295bd8deadSopenharmony_ci negative offset parameters. Such a change could be made in a 41305bd8deadSopenharmony_ci compatible way because GLintptr and GLsizeiptr are typedef'ed 41315bd8deadSopenharmony_ci to the same underlying type (a signed int of the same size in 41325bd8deadSopenharmony_ci bytes as a pointer). 41335bd8deadSopenharmony_ci 41345bd8deadSopenharmony_ci (31) Should the internalformat parameter of various DSA versions of 41355bd8deadSopenharmony_ci gl*Tex*Image* routines be a GLint or GLenum? 41365bd8deadSopenharmony_ci 41375bd8deadSopenharmony_ci RESOLVED: Match the type for internalformat of the pre-DSA 41385bd8deadSopenharmony_ci version of the routine. 41395bd8deadSopenharmony_ci 41405bd8deadSopenharmony_ci This is a legacy of OpenGL 1.0 where the internalformat parameter 41415bd8deadSopenharmony_ci to glTexImage1D and glTexImage2D was a GLint-typed value that 41425bd8deadSopenharmony_ci could be 1, 2, 3, or 4 for the number of components. 41435bd8deadSopenharmony_ci 41445bd8deadSopenharmony_ci In OpenGL 1.1, internal texture formats were introduced to provide 41455bd8deadSopenharmony_ci more specificity to the internal representation of texels within 41465bd8deadSopenharmony_ci a texture. This was part of introducing texture objects to OpenGL 41475bd8deadSopenharmony_ci (a feature not originally in OpenGL 1.0). 41485bd8deadSopenharmony_ci 41495bd8deadSopenharmony_ci The intent of this decision is to make it easier for existing 41505bd8deadSopenharmony_ci code converting use the selector-free DSA routines without 41515bd8deadSopenharmony_ci signed/unsigned warnings because GLenum is unsigned while GLint 41525bd8deadSopenharmony_ci is signed. 41535bd8deadSopenharmony_ci 41545bd8deadSopenharmony_ci This means the following commands take a GLint internalformat 41555bd8deadSopenharmony_ci parameter: 41565bd8deadSopenharmony_ci 41575bd8deadSopenharmony_ci glTextureImage1DEXT 41585bd8deadSopenharmony_ci glTextureImage2DEXT 41595bd8deadSopenharmony_ci glTextureImage3DEXT 41605bd8deadSopenharmony_ci glMultiTexImage1DEXT 41615bd8deadSopenharmony_ci glMultiTexImage2DEXT 41625bd8deadSopenharmony_ci glMultiTexImage3DEXT 41635bd8deadSopenharmony_ci 41645bd8deadSopenharmony_ci This means the following commands take a GLenum internalformat 41655bd8deadSopenharmony_ci parameter: 41665bd8deadSopenharmony_ci 41675bd8deadSopenharmony_ci glCopyTextureImage1DEXT 41685bd8deadSopenharmony_ci glCopyTextureImage2DEXT 41695bd8deadSopenharmony_ci glCopyMultiTexImage1DEXT 41705bd8deadSopenharmony_ci glCopyMultiTexImage2DEXT 41715bd8deadSopenharmony_ci 41725bd8deadSopenharmony_ci glCompressedTextureImage1DEXT 41735bd8deadSopenharmony_ci glCompressedTextureImage2DEXT 41745bd8deadSopenharmony_ci glCompressedTextureImage3DEXT 41755bd8deadSopenharmony_ci glCompressedMultiTexImage1DEXT 41765bd8deadSopenharmony_ci glCompressedMultiTexImage2DEXT 41775bd8deadSopenharmony_ci glCompressedMultiTexImage3DEXT 41785bd8deadSopenharmony_ci 41795bd8deadSopenharmony_ci glTextureBufferEXT 41805bd8deadSopenharmony_ci glMultiTexBufferEXT 41815bd8deadSopenharmony_ci glNamedRenderbufferStorageEXT 41825bd8deadSopenharmony_ci glNamedRenderbufferStorageMultisampleEXT 41835bd8deadSopenharmony_ci glNamedRenderbufferStorageMultisampleCoverageEXT 41845bd8deadSopenharmony_ci 41855bd8deadSopenharmony_ci Warning: pre-July 2013 versions of glext.h have the DSA prototypes that 41865bd8deadSopenharmony_ci should be using GLint internalformat using GLenum instead. See: 41875bd8deadSopenharmony_ci 41885bd8deadSopenharmony_ci https://cvs.khronos.org/bugzilla/show_bug.cgi?id=10413 41895bd8deadSopenharmony_ci 41905bd8deadSopenharmony_ci (32) How can a particular vertex array object's texture coordinate 41915bd8deadSopenharmony_ci set array be updated without depending on the active client 41925bd8deadSopenharmony_ci texture selector? 41935bd8deadSopenharmony_ci 41945bd8deadSopenharmony_ci RESOLVED: The glEnableVertexArrayEXT and glDisableVertexArrayEXT 41955bd8deadSopenharmony_ci commands should be extended to accept GL_TEXTUREi tokens where 41965bd8deadSopenharmony_ci GL_TEXTUREi indicates the specific vertex array for texture 41975bd8deadSopenharmony_ci coordinate set i to enable or disable respectively. 41985bd8deadSopenharmony_ci 41995bd8deadSopenharmony_ci Due to a specification lapse, this behavior was not specified in 42005bd8deadSopenharmony_ci the version 1.1 of this specification but was added for version 42015bd8deadSopenharmony_ci 1.2. 42025bd8deadSopenharmony_ci 42035bd8deadSopenharmony_ci The use of a GL_TEXTUREi token follows the precedent set for how 42045bd8deadSopenharmony_ci GL_TEXTUREi is supported for the selector-free matrix routines. 42055bd8deadSopenharmony_ci 42065bd8deadSopenharmony_ci Implementations of EXT_direct_state_access prior to July 2013 42075bd8deadSopenharmony_ci cannot be expected to implement this behavior and will generate 42085bd8deadSopenharmony_ci a GL_INVALID_ENUM error instead. This error can be used to 42095bd8deadSopenharmony_ci distinguish version 1.2 and earlier versions of this extension. 42105bd8deadSopenharmony_ci 42115bd8deadSopenharmony_ci Calling glEnableVertexArrayEXT or glDisableVertexArrayEXT with 42125bd8deadSopenharmony_ci GL_TEXTURE_COORD_ARRAY can be expected to update the texture 42135bd8deadSopenharmony_ci coordinate array based on the current active client texture 42145bd8deadSopenharmony_ci coordinate set of the indicated vertex array object, effectively 42155bd8deadSopenharmony_ci depending on the current active texture selector but not the 42165bd8deadSopenharmony_ci current bound vertex array object selector. 42175bd8deadSopenharmony_ci 42185bd8deadSopenharmony_ci Querying the enable of multitexture texture coordinate arrays 42195bd8deadSopenharmony_ci uses glGetVertexArrayIntegeri_vEXT with GL_TEXTURE_COORD_ARRAY 42205bd8deadSopenharmony_ci for the pname. This behavior was not clearly specified before 42215bd8deadSopenharmony_ci version 1.2. 42225bd8deadSopenharmony_ci 42235bd8deadSopenharmony_ciRevision History 42245bd8deadSopenharmony_ci 42255bd8deadSopenharmony_ci Rev. Date Author Changes 42265bd8deadSopenharmony_ci ---- -------- -------- ----------------------------------------- 42275bd8deadSopenharmony_ci 1 11/20/07 mjk Initial version 42285bd8deadSopenharmony_ci 2 12/03/07 mjk Feedback from JeffB 42295bd8deadSopenharmony_ci 3 01/02/08 mjk Formatting 42305bd8deadSopenharmony_ci 4 01/02/08 mjk NV_gpu_program4 additions 42315bd8deadSopenharmony_ci 5 01/02/08 mjk EXT_gpu_program_parameters additions 42325bd8deadSopenharmony_ci 6 03/06/08 mjk Switch from "MultiTex" to "Indexed" 42335bd8deadSopenharmony_ci texture API 42345bd8deadSopenharmony_ci 7 03/27/08 mjk Feedback from TransGaming 42355bd8deadSopenharmony_ci 8 03/28/08 mjk Program matrix query and 42365bd8deadSopenharmony_ci indexed query restructuring 42375bd8deadSopenharmony_ci 9 03/31/08 mjk MultiTex API complete 42385bd8deadSopenharmony_ci 10 04/03/08 mjk Fix CompressedTexture and CompressedMultiTex 42395bd8deadSopenharmony_ci lapses noticed by Ian 42405bd8deadSopenharmony_ci 11 04/14/08 mjk Add target parameters to NamedProgram and 42415bd8deadSopenharmony_ci GetNamedProgram calls 42425bd8deadSopenharmony_ci 12 04/17/08 mjk ARB_texture_rectangle interaction 42435bd8deadSopenharmony_ci 13 04/28/08 mjk Add issue #19 42445bd8deadSopenharmony_ci 14 05/02/08 mjk Add issue #20 about multi-thread 42455bd8deadSopenharmony_ci interactions as suggested by Yanjun Zhang 42465bd8deadSopenharmony_ci 15 05/06/08 mjk Typos: glGetMultiTexCompressedTextureEXT 42475bd8deadSopenharmony_ci prototype and GLX protocol suffixing 42485bd8deadSopenharmony_ci 16 05/22/08 mjk Add FBO support 42495bd8deadSopenharmony_ci 17 05/23/08 mjk Fix Generate{Texture,MultiTex}MipmapEXT 42505bd8deadSopenharmony_ci 18 06/06/08 mjk glCheckNamedFramebufferStatusEXT needs target 42515bd8deadSopenharmony_ci Issues #22 and #23 42525bd8deadSopenharmony_ci 19 06/10/08 mjk Add FramebufferDrawBufferEXT, 42535bd8deadSopenharmony_ci FramebufferDrawBuffersEXT, 42545bd8deadSopenharmony_ci FramebufferReadBufferEXT 42555bd8deadSopenharmony_ci 20 07/01/08 mjk Add NV_explicit_multisample interaction 42565bd8deadSopenharmony_ci 21 07/07/08 mjk Typo fixes from Daniel Koch, error 42575bd8deadSopenharmony_ci semantics, new issues, limit 42585bd8deadSopenharmony_ci GetFramebufferParameterivEXT to 4.nnn state, 42595bd8deadSopenharmony_ci fix NamedProgramStringEXT discussion, 42605bd8deadSopenharmony_ci add EXT_texture_array and 42615bd8deadSopenharmony_ci NV_texture_cube_map_array interactions 42625bd8deadSopenharmony_ci 22 07/15/08 mjk Just typos 42635bd8deadSopenharmony_ci 23 11/05/08 mjk Destineer support 42645bd8deadSopenharmony_ci 24 11/05/08 mjk Destineer support 42655bd8deadSopenharmony_ci 25 12/15/08 mjk Version 1.1 adds OpenGL 3.0 support 42665bd8deadSopenharmony_ci 26 12/19/08 mjk Fix VertexArrayVertexOffsetEXT duplicate 42675bd8deadSopenharmony_ci entry point; eliminated version missing stride 42685bd8deadSopenharmony_ci 27 12/22/08 mjk NamedRenderbufferStorageEXT shouldn't have 42695bd8deadSopenharmony_ci target parameter 42705bd8deadSopenharmony_ci 28 12/23/08 mjk Fixed various "index" functions for 3.0 42715bd8deadSopenharmony_ci 29 01/12/09 mjk Add error for negative offsets for 42725bd8deadSopenharmony_ci glVertexArray*Offset commands when buffer 42735bd8deadSopenharmony_ci parameter is non-zero 42745bd8deadSopenharmony_ci 30 01/26/09 mjk Correct glPopClientAttrib usage 42755bd8deadSopenharmony_ci 31 02/17/09 mjk Add glVertexArrayMultiTexCoordOffsetEXT 42765bd8deadSopenharmony_ci New names: GetVertexArrayIntegeri_vEXT, 42775bd8deadSopenharmony_ci GetVertexArrayIntegervEXT, 42785bd8deadSopenharmony_ci GetVertexArrayPointeri_vEXT 42795bd8deadSopenharmony_ci 32 03/13/09 groth Add EXT_copy_buffer interaction 42805bd8deadSopenharmony_ci 33 06/10/09 mjk add VertexArrayMultiTexCoordOffsetEXT to 42815bd8deadSopenharmony_ci list of errors for exceeding the maximum 42825bd8deadSopenharmony_ci texture image units 42835bd8deadSopenharmony_ci 34 09/07/10 mjk some Get*Indexedv instanced needed EXT 42845bd8deadSopenharmony_ci suffixes; issue 27 update 42855bd8deadSopenharmony_ci 35 06/18/13 mjk add issue 31; glext.h had GLenum internalformat 42865bd8deadSopenharmony_ci when spec said GLint for gl*Tex*Image*EXT commands 42875bd8deadSopenharmony_ci 36 06/24/13 mjk fix glEnableVertexArrayEXT and 42885bd8deadSopenharmony_ci glDisableVertexArrayEXT so they accept the 42895bd8deadSopenharmony_ci GL_TEXTUREi tokens to be free of active 42905bd8deadSopenharmony_ci client texture selector (issue 32) 42915bd8deadSopenharmony_ci 37 07/29/13 mjk document NVIDIA driver bugs 42925bd8deadSopenharmony_ci 38 10/22/13 mjk add Matrix*Transpose*EXT routines missing 42935bd8deadSopenharmony_ci from section 2.12.2 list 42945bd8deadSopenharmony_ci 39 02/24/15 mjk add & operator to glMultiTexGenivEXT in NV Impl. 4295