00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00031
00032 #pragma once
00033
00034 #include "../../Core/System/sharedptr.h"
00035 #include "graphic_context.h"
00036 #include "../api_display.h"
00037
00041 enum CL_BufferUsage
00042 {
00043 cl_usage_stream_draw,
00044 cl_usage_stream_read,
00045 cl_usage_stream_copy,
00046 cl_usage_static_draw,
00047 cl_usage_static_read,
00048 cl_usage_static_copy,
00049 cl_usage_dynamic_draw,
00050 cl_usage_dynamic_read,
00051 cl_usage_dynamic_copy
00052 };
00053
00057 enum CL_BufferAccess
00058 {
00059 cl_access_read_only,
00060 cl_access_write_only,
00061 cl_access_read_write
00062 };
00063
00064 class CL_VertexArrayBufferProvider;
00065 class CL_VertexArrayBuffer_Impl;
00066
00070 class CL_API_DISPLAY CL_VertexArrayBuffer
00071 {
00074
00075 public:
00077 CL_VertexArrayBuffer();
00078
00084 CL_VertexArrayBuffer(CL_GraphicContext &gc, int size, CL_BufferUsage usage = cl_usage_static_draw);
00085
00092 CL_VertexArrayBuffer(CL_GraphicContext &gc, void *data, int size, CL_BufferUsage usage = cl_usage_static_draw);
00093
00094 virtual ~CL_VertexArrayBuffer();
00095
00099
00100 public:
00102 void *get_data();
00103
00107 CL_VertexArrayBufferProvider *get_provider() const;
00108
00112
00113 public:
00115 bool operator==(const CL_VertexArrayBuffer &other) const;
00116
00118 void lock(CL_BufferAccess access);
00119
00121 void unlock();
00122
00124 void upload_data(int offset, void *data, int size);
00125
00129
00130 private:
00131 CL_SharedPtr<CL_VertexArrayBuffer_Impl> impl;
00133 };
00134