4 Prefix: glc - OpenGL Core
5 Beschreibung: diese Unit enthält eine Klassen-Kapselung für OpenGL Array Buffer }
12 dglOpenGL, sysutils, uglcTypes;
15 EglcArrayBuffer = class(Exception);
16 TglcArrayBuffer = class(TObject)
19 fTarget: TglcBufferTarget;
20 fUsage: TglcBufferUsage;
25 property ID: gluInt read fID;
26 property Target: TglcBufferTarget read fTarget;
27 property Usage: TglcBufferUsage read fUsage;
28 property DataCount: Integer read fDataCount;
29 property DataSize: Integer read fDataSize;
31 procedure BufferData(const aDataCount, aDataSize: Cardinal; const aUsage: TglcBufferUsage; const aData: Pointer);
32 function MapBuffer(const aAccess: TglcBufferAccess): Pointer;
33 procedure UnmapBuffer;
36 constructor Create(const aTarget: TglcBufferTarget);
37 destructor Destroy; override;
42 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
43 //TglcArrayBuffer///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
44 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
45 procedure TglcArrayBuffer.BufferData(const aDataCount, aDataSize: Cardinal; const aUsage: TglcBufferUsage; const aData: Pointer);
47 glGetError(); //clear Errors
49 fDataCount := aDataCount;
50 fDataSize := aDataSize;
52 glBufferData(GLenum(fTarget), fDataCount * fDataSize, aData, GLenum(fUsage));
53 glcCheckAndRaiseError;
56 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
57 function TglcArrayBuffer.MapBuffer(const aAccess: TglcBufferAccess): Pointer;
61 if (fDataCount * fDataSize) <= 0 then
63 result := glMapBuffer(GLenum(fTarget), GLenum(aAccess));
64 glcCheckAndRaiseError;
67 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
68 procedure TglcArrayBuffer.UnmapBuffer;
70 glUnmapBuffer(GLenum(fTarget));
73 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
74 procedure TglcArrayBuffer.Bind;
76 glBindBuffer(GLenum(fTarget), fID);
79 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
80 procedure TglcArrayBuffer.Unbind;
82 glBindBuffer(GLenum(fTarget), 0);
85 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
86 constructor TglcArrayBuffer.Create(const aTarget: TglcBufferTarget);
88 if not GL_ARB_Vertex_Buffer_Object then
89 raise EglcArrayBuffer.Create('Create - VertexBuffer: not supported');
91 glGenBuffers(1, @fID);
97 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c]
98 destructor TglcArrayBuffer.Destroy;
100 glDeleteBuffers(1, @fID);