> ## Name

> cgCreateBuffer - create a buffer object managed by the runtime

> ## Synopsis

>     #include <Cg/cg.h>

>     CGbuffer cgCreateBuffer( CGcontext context,
>                              int size,
>                              const void *data,
>                              CGbufferusage bufferUsage );

> ## Parameters

> context
>   The context to which the new buffer will be added.
> size
>   The length in bytes of the buffer to create.
> data
>   Pointer to inital buffer data. NULL will fill the buffer with zero.
> bufferUsage
>   Indicates the intended usage method of the buffer.
>   Can be one of the following types:
>   - CG_BUFFER_USAGE_STREAM_DRAW
>   - CG_BUFFER_USAGE_STREAM_READ
>   - CG_BUFFER_USAGE_STREAM_COPY
>   - CG_BUFFER_USAGE_STATIC_DRAW
>   - CG_BUFFER_USAGE_STATIC_READ
>   - CG_BUFFER_USAGE_STATIC_COPY
>   - CG_BUFFER_USAGE_DYNAMIC_DRAW
>   - CG_BUFFER_USAGE_DYNAMIC_READ
>   - CG_BUFFER_USAGE_DYNAMIC_COPY

> ## Return Values

> Returns a CGbuffer handle on success.

> Returns NULL if an error occurs.

> ## Description

> cgCreateBuffer creates a runtime managed Cg buffer object.

> There is no way to query the 3D API-specific resource for a managed buffer. cgGLCreateBuffer should be used if the application wishes to later query the 3D API-specific resource for the buffer.

> ## Examples

>     CGbuffer myBuffer = cgCreateBuffer( myCgContext, sizeof( float ) * 16,
>                                         initalData, CG_BUFFER_USAGE_STATIC_DRAW );

> ## Errors

> CG_INVALID_CONTEXT_HANDLE_ERROR is generated if context is not a valid context.

> ## History

> cgCreateBuffer was introduced in Cg 2.0.

> ## See Also

> cgGLCreateBuffer, cgDestroyBuffer