Initial commit
This commit is contained in:
174
engines/hpl1/engine/graphics/VertexBuffer.h
Normal file
174
engines/hpl1/engine/graphics/VertexBuffer.h
Normal file
@@ -0,0 +1,174 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2010 - Frictional Games
|
||||
*
|
||||
* This file is part of HPL1 Engine.
|
||||
*/
|
||||
|
||||
#ifndef HPL_VERTEXBUFFER_H
|
||||
#define HPL_VERTEXBUFFER_H
|
||||
|
||||
#include "hpl1/engine/graphics/GraphicsTypes.h"
|
||||
#include "hpl1/engine/math/BoundingVolume.h"
|
||||
#include "hpl1/engine/math/MathTypes.h"
|
||||
#include "hpl1/engine/system/SystemTypes.h"
|
||||
|
||||
namespace hpl {
|
||||
|
||||
class cBoundingVolume;
|
||||
|
||||
enum eVertexBufferDrawType {
|
||||
eVertexBufferDrawType_Tri,
|
||||
eVertexBufferDrawType_Quad,
|
||||
eVertexBufferDrawType_Lines,
|
||||
eVertexBufferDrawType_LastEnum
|
||||
};
|
||||
|
||||
enum eVertexBufferUsageType {
|
||||
eVertexBufferUsageType_Static,
|
||||
eVertexBufferUsageType_Dynamic,
|
||||
eVertexBufferUsageType_Stream,
|
||||
eVertexBufferUsageType_LastEnum
|
||||
};
|
||||
|
||||
typedef tFlag tVertexFlag;
|
||||
|
||||
#define eVertexFlag_Normal (0x00000001)
|
||||
#define eVertexFlag_Position (0x00000002)
|
||||
#define eVertexFlag_Color0 (0x00000004)
|
||||
#define eVertexFlag_Color1 (0x00000008)
|
||||
#define eVertexFlag_Texture0 (0x00000010)
|
||||
#define eVertexFlag_Texture1 (0x00000020)
|
||||
#define eVertexFlag_Texture2 (0x00000040)
|
||||
#define eVertexFlag_Texture3 (0x00000080)
|
||||
#define eVertexFlag_Texture4 (0x00000100)
|
||||
|
||||
#define klNumOfVertexFlags (9)
|
||||
|
||||
const tVertexFlag kvVertexFlags[] = {eVertexFlag_Normal, eVertexFlag_Position, eVertexFlag_Color0,
|
||||
eVertexFlag_Color1, eVertexFlag_Texture0, eVertexFlag_Texture1, eVertexFlag_Texture2,
|
||||
eVertexFlag_Texture3, eVertexFlag_Texture4};
|
||||
|
||||
const int kvVertexElements[] = {
|
||||
3, // Normal
|
||||
4, // Position
|
||||
4, // Color0
|
||||
4, // Color1
|
||||
3, // Texture0
|
||||
3, // Texture1
|
||||
3, // Texture2
|
||||
3, // Texture3
|
||||
3 // Texture4
|
||||
};
|
||||
|
||||
typedef tFlag tVertexCompileFlag;
|
||||
|
||||
#define eVertexCompileFlag_CreateTangents (0x00000001)
|
||||
|
||||
class iLowLevelGraphics;
|
||||
|
||||
class iVertexBuffer {
|
||||
public:
|
||||
iVertexBuffer(iLowLevelGraphics *apLowLevelGraphics, tVertexFlag aFlags,
|
||||
eVertexBufferDrawType aDrawType, eVertexBufferUsageType aUsageType,
|
||||
int alReserveVtxSize, int alReserveIdxSize) : mVertexFlags(aFlags), mpLowLevelGraphics(apLowLevelGraphics),
|
||||
mDrawType(aDrawType), mUsageType(aUsageType), mlElementNum(-1),
|
||||
mbTangents(false) {}
|
||||
|
||||
virtual ~iVertexBuffer() {}
|
||||
|
||||
tVertexFlag GetFlags() { return mVertexFlags; }
|
||||
|
||||
virtual void AddVertex(tVertexFlag aType, const cVector3f &avVtx) = 0;
|
||||
virtual void AddColor(tVertexFlag aType, const cColor &aColor) = 0;
|
||||
virtual void AddIndex(unsigned int alIndex) = 0;
|
||||
|
||||
virtual bool Compile(tVertexCompileFlag aFlags) = 0;
|
||||
virtual void UpdateData(tVertexFlag aTypes, bool abIndices) = 0;
|
||||
|
||||
/**
|
||||
* This creates a double of the vertex array with w=0.
|
||||
* \param abUpdateData if the hardware buffer should be updated as well.
|
||||
*/
|
||||
virtual void CreateShadowDouble(bool abUpdateData) = 0;
|
||||
|
||||
/**
|
||||
* Transform the entire buffer with transform.
|
||||
*/
|
||||
virtual void Transform(const cMatrixf &mtxTransform) = 0;
|
||||
|
||||
virtual void Draw(eVertexBufferDrawType aDrawType = eVertexBufferDrawType_LastEnum) = 0;
|
||||
virtual void DrawIndices(unsigned int *apIndices, int alCount,
|
||||
eVertexBufferDrawType aDrawType = eVertexBufferDrawType_LastEnum) = 0;
|
||||
|
||||
virtual void Bind() = 0;
|
||||
virtual void UnBind() = 0;
|
||||
|
||||
virtual iVertexBuffer *CreateCopy(eVertexBufferUsageType aUsageType) = 0;
|
||||
|
||||
virtual cBoundingVolume CreateBoundingVolume() = 0;
|
||||
|
||||
virtual float *GetArray(tVertexFlag aType) = 0;
|
||||
virtual unsigned int *GetIndices() = 0;
|
||||
|
||||
virtual int GetVertexNum() = 0;
|
||||
virtual int GetIndexNum() = 0;
|
||||
|
||||
/**
|
||||
* Resizes an array to a custom size, the size is number of elements and NOT number of vertices.
|
||||
*/
|
||||
virtual void ResizeArray(tVertexFlag aType, int alSize) = 0;
|
||||
virtual void ResizeIndices(int alSize) = 0;
|
||||
|
||||
// For debugging purposes, quite slow to use.
|
||||
virtual cVector3f GetVector3(tVertexFlag aType, unsigned alIdx) = 0;
|
||||
virtual cVector3f GetVector4(tVertexFlag aType, unsigned alIdx) = 0;
|
||||
virtual cColor GetColor(tVertexFlag aType, unsigned alIdx) = 0;
|
||||
virtual unsigned int GetIndex(tVertexFlag aType, unsigned alIdx) = 0;
|
||||
|
||||
/**
|
||||
* Set the number of of elements to draw.
|
||||
* \param alNum If < 0, draw all indices.
|
||||
*/
|
||||
void SetElementNum(int alNum) { mlElementNum = alNum; }
|
||||
int GetElementNum() { return mlElementNum; }
|
||||
|
||||
tVertexFlag GetVertexFlags() { return mVertexFlags; }
|
||||
|
||||
bool HasTangents() { return mbTangents; }
|
||||
void SetTangents(bool abX) { mbTangents = abX; }
|
||||
|
||||
protected:
|
||||
tVertexFlag mVertexFlags;
|
||||
eVertexBufferDrawType mDrawType;
|
||||
eVertexBufferUsageType mUsageType;
|
||||
iLowLevelGraphics *mpLowLevelGraphics;
|
||||
|
||||
int mlElementNum;
|
||||
|
||||
bool mbTangents;
|
||||
};
|
||||
|
||||
} // namespace hpl
|
||||
|
||||
#endif // HPL_RENDERER3D_H
|
||||
Reference in New Issue
Block a user