> ## Name

> cgMapBuffer - map buffer into application's address space

> ## Synopsis

>     #include <Cg/cg.h>

>     void * cgMapBuffer( CGbuffer buffer,
>                         CGbufferaccess access );

> ## Parameters

> buffer
>   The buffer which will be mapped into the application's address space.
> access
>   An enumerant indicating the operations the client may perform on the data store through the pointer while the buffer data is mapped.
>   The following enumerants are allowed:
>   CG_MAP_READ
>     The application can read but not write through the data pointer.
>   CG_MAP_WRITE
>     The application can write but not read through the data pointer.
>   CG_MAP_READ_WRITE
>     The application can read and write through the data pointer.
>   CG_MAP_WRITE_DISCARD
>     Same as CG_MAP_READ_WRITE if using a GL buffer.
>   CG_MAP_WRITE_NO_OVERWRITE
>     Same as CG_MAP_READ_WRITE if using a GL buffer.

> ## Return Values

> Returns a pointer through which the application can read or write the buffer's data store.

> Returns NULL if an error occurs.

> ## Description

> cgMapBuffer maps a buffer into the application's address space for memory-mapped updating of the buffer's data. The application should call cgUnmapBuffer|cgUnmapBuffer when it's done updating or querying the buffer.

> ## Examples

>     unsigned char *bufferPtr = cgMapBuffer( myBuffer, CG_MAP_READ_WRITE );
>     memcpy( ptr, bufferPtr, size );
>     cgUnmapBuffer( myBuffer );

> ## Errors

> CG_INVALID_BUFFER_HANDLE_ERROR is generated if buffer is not a valid buffer.

> CG_INVALID_ENUMERANT_ERROR is generated if access is not CG_MAP_READ, CG_MAP_WRITE, CG_MAP_READ_WRITE, CG_MAP_WRITE_DISCARD or CG_MAP_WRITE_NO_OVERWRITE.

> CG_BUFFER_ALREADY_MAPPED_ERROR is generated if buffer is already mapped.

> ## History

> cgMapBuffer was introduced in Cg 2.0.

> ## See Also

> cgUnmapBuffer, cgSetBufferData, cgSetBufferSubData, cgSetParameter