28#ifndef HPL_VERTEXBUFFER_VBO_H
29#define HPL_VERTEXBUFFER_VBO_H
31#include "common/scummsys.h"
32#include "hpl1/engine/graphics/VertexBuffer.h"
33#include "hpl1/opengl.h"
39class cVertexBufferVBO :
public iVertexBuffer {
41 cVertexBufferVBO(iLowLevelGraphics *apLowLevelGraphics, tVertexFlag aFlags,
42 eVertexBufferDrawType aDrawType, eVertexBufferUsageType aUsageType,
43 int alReserveVtxSize,
int alReserveIdxSize);
46 void AddVertex(tVertexFlag aType,
const cVector3f &avVtx);
47 void AddColor(tVertexFlag aType,
const cColor &aColor);
48 void AddIndex(
unsigned int alIndex);
50 bool Compile(tVertexCompileFlag aFlags);
51 void UpdateData(tVertexFlag aTypes,
bool abIndices);
53 void CreateShadowDouble(
bool abUpdateData);
55 void Transform(
const cMatrixf &mtxTransform);
57 void Draw(eVertexBufferDrawType aDrawType = eVertexBufferDrawType_LastEnum);
58 void DrawIndices(
unsigned int *apIndices,
int alCount,
59 eVertexBufferDrawType aDrawType = eVertexBufferDrawType_LastEnum);
64 iVertexBuffer *CreateCopy(eVertexBufferUsageType aUsageType);
66 cBoundingVolume CreateBoundingVolume();
71 float *GetArray(tVertexFlag aType);
72 unsigned int *GetIndices();
74 void ResizeArray(tVertexFlag aType,
int alSize);
75 void ResizeIndices(
int alSize);
78 cVector3f GetVector3(tVertexFlag aType,
unsigned alIdx);
79 cVector3f GetVector4(tVertexFlag aType,
unsigned alIdx);
80 cColor GetColor(tVertexFlag aType,
unsigned alIdx);
81 unsigned int GetIndex(tVertexFlag aType,
unsigned alIdx);
84 int GetElementNum(tVertexFlag aFlag);
86 void SetVertexStates(tVertexFlag aFlags);
88 unsigned int mlElementHandle;
90 tFloatVec mvVertexArray[klNumOfVertexFlags];
92 unsigned int mvArrayHandle[klNumOfVertexFlags];
94 tUIntVec mvIndexArray;
96 bool mbHasShadowDouble;