15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ATI_map_object_buffer
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ATI_map_object_buffer
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Rick Hammerstone, AMD (rick.hammerstone 'at' amd.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciStatus
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Complete.
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciVersion
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    0.3 - 11/04/06
205bd8deadSopenharmony_ci    Updated contact info after ATI/AMD merger.
215bd8deadSopenharmony_ci
225bd8deadSopenharmony_ci    0.2 - 01/15/01
235bd8deadSopenharmony_ci    Modified map call to return a pointer and take a single <buffer>
245bd8deadSopenharmony_ci    argument. Cleaned up spec.
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    0.1 - 11/26/01
275bd8deadSopenharmony_ci    Initial revision
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ciNumber
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ci    288
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ciDependencies
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ci    This extension is written against the OpenGL 1.2.1 Specification.
365bd8deadSopenharmony_ci    OpenGL 1.1 is required. ATI_vertex_array_object is required by
375bd8deadSopenharmony_ci    this extension. 
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ci    
405bd8deadSopenharmony_ciOverview
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    This extension provides a mechanism for an application to obtain
435bd8deadSopenharmony_ci    the virtual address of an object buffer. This allows the
445bd8deadSopenharmony_ci    application to directly update the contents of an object buffer
455bd8deadSopenharmony_ci    and avoid any intermediate copies.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ci    
485bd8deadSopenharmony_ciIssues
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ci    Should we use Lock and Unlock terminology?
515bd8deadSopenharmony_ci    
525bd8deadSopenharmony_ci	UNRESOLVED: This could be confusing. D3D uses "Lock" to mean
535bd8deadSopenharmony_ci 	that something is available for the application to update and
545bd8deadSopenharmony_ci 	won't be changed by the driver. However, in the compiled
555bd8deadSopenharmony_ci 	vertex array extension, "Lock" is used to mean that the
565bd8deadSopenharmony_ci 	application will not be changing the contents of a vertex
575bd8deadSopenharmony_ci 	buffer.
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    
605bd8deadSopenharmony_ciNew Procedures and Functions
615bd8deadSopenharmony_ci    
625bd8deadSopenharmony_ci    void *MapObjectBufferATI(uint buffer)
635bd8deadSopenharmony_ci    
645bd8deadSopenharmony_ci    void UnmapObjectBufferATI(uint buffer)
655bd8deadSopenharmony_ci    
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ciNew Tokens
685bd8deadSopenharmony_ci    
695bd8deadSopenharmony_ci    None
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ciAdditions to Chapter 2 of the GL Specification (OpenGL Operation)
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    Added to the description of Vertex Array Objects:
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ci    The object buffer interface provides a mechanism for an
775bd8deadSopenharmony_ci    application to store data in persistent memory that can be
785bd8deadSopenharmony_ci    accessed directly by the graphics hardware. The memory is accessed
795bd8deadSopenharmony_ci    through handles, and data must be copied into the memory by the
805bd8deadSopenharmony_ci    driver. This provides a platform-independent mechanism for
815bd8deadSopenharmony_ci    updating the object buffers, and allows the driver to optimally
825bd8deadSopenharmony_ci    manage the object buffers.
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci    However, in cases where object buffers are being frequently
855bd8deadSopenharmony_ci    updated, the overhead of memory copies can degrade overall
865bd8deadSopenharmony_ci    application performance. The command
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci	void *MapObjectBufferATI(uint buffer)
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci    allows the application to obtain a pointer to the object buffer
915bd8deadSopenharmony_ci    named <buffer>. If <buffer> is not the name of an existing object
925bd8deadSopenharmony_ci    buffer, MapObjectBufferATI returns a null pointer.
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    The size of the region mapped by MapObjectBufferATI is equal to
955bd8deadSopenharmony_ci    the size of the object buffer. This size can be queried by calling
965bd8deadSopenharmony_ci    GetObjectBufferivATI or GetObjectBufferfvATI with the token
975bd8deadSopenharmony_ci    OBJECT_BUFFER_SIZE_ATI.
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    When an application issues a MapObjectBufferATI command, all
1005bd8deadSopenharmony_ci    rendering commands that reference data stored in <buffer> must
1015bd8deadSopenharmony_ci    complete before the call to MapObjectBufferATI returns. When the
1025bd8deadSopenharmony_ci    call returns, the data in <buffer> can be updated immediately.
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci    If an application desires to update an object buffer using this
1055bd8deadSopenharmony_ci    interface, it should create the object buffer using DYNAMIC_ATI as
1065bd8deadSopenharmony_ci    the usage parameter. Direct updates to object buffers that were
1075bd8deadSopenharmony_ci    created with STATIC_ATI as the usage parameter may operate at
1085bd8deadSopenharmony_ci    reduced performance.
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    When an application is finished updating an object buffer, it uses
1115bd8deadSopenharmony_ci    the command
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci	void UnmapObjectBufferATI(uint buffer)
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    to indicate to the driver that it has completed updating the
1165bd8deadSopenharmony_ci    object buffer specified by <buffer>. An application must call
1175bd8deadSopenharmony_ci    UnmapObjectBufferATI before issuing any rendering commands that
1185bd8deadSopenharmony_ci    use the data stored in <buffer>.
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    Attempts to update an object buffer by direct memory writes after
1215bd8deadSopenharmony_ci    UnmapObjectBufferATI has been called result in undefined behavior
1225bd8deadSopenharmony_ci    and may generate an error. UpdateObjectBufferATI can be used to
1235bd8deadSopenharmony_ci    update an object buffer at any time, regardless of whether it is
1245bd8deadSopenharmony_ci    mapped or not.
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.2.1 Specification (Rasterization)
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    None
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.2.1 Specification (Per-Fragment
1325bd8deadSopenharmony_ciOperations and the Frame Buffer)
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci    None
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.2.1 Specification (Special Functions)
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci    Added to section 5.4, as part of the discussion of what commands
1405bd8deadSopenharmony_ci    are compiled into display lists:
1415bd8deadSopenharmony_ci
1425bd8deadSopenharmony_ci    MapObjectBufferATI and UnmapObjectBufferATI are not included in
1435bd8deadSopenharmony_ci    display lists, but are executed immediately.
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.2.1 Specification (State and State
1475bd8deadSopenharmony_ciRequests)
1485bd8deadSopenharmony_ci
1495bd8deadSopenharmony_ci    None
1505bd8deadSopenharmony_ci
1515bd8deadSopenharmony_ciErrors
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci    INVALID_VALUE is generated if the <buffer> argument of
1545bd8deadSopenharmony_ci    MapObjectBuffer or UnmapObjectBuffer does not specify a valid
1555bd8deadSopenharmony_ci    object buffer. 
1565bd8deadSopenharmony_ci
1575bd8deadSopenharmony_ci    INVALID_OPERATION may be generated if a rendering command is
1585bd8deadSopenharmony_ci    issued that uses an object buffer that is currently mapped.
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ciNew State
1615bd8deadSopenharmony_ci
1625bd8deadSopenharmony_ci    None
1635bd8deadSopenharmony_ci    
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ciImplementation Notes
1665bd8deadSopenharmony_ci
167