/*
Copyright (C) 1997, 1998, 1999, 2000 by Alex Pfaffe
(Digital Dawn Graphics Inc)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _ddgVArray_Class_
#define _ddgVArray_Class_
#include "util/ddgerror.h"
#include "math/ddgvec.h"
#include "struct/ddgcolor.h"
typedef unsigned int ddgVBIndex;
typedef float ddgTexCoord;
class ddgTexCoord2
{
public:
ddgTexCoord v[2];
};
class WEXP ddgVArray
{
public:
enum ddgBufType{ dummy = 0, point = 1, line = 2, triangle = 3, quad = 4 };
private:
unsigned int _num;
unsigned int _inum;
unsigned int _bufsize;
unsigned int _ibufsize;
bool _fTexture:1;
bool _fTextureCoord:1;
bool _fNormal:1;
bool _fColor:1;
ddgBufType _type;
public:
ddgVBIndex *ibuf;
ddgVector3 *vbuf;
ddgVector2 *tbuf;
ddgTexCoord2 *tibuf;
ddgColor4 *cbuf;
ddgVector3 *nbuf;
ddgVArray( ddgBufType type = triangle);
~ddgVArray( void );
bool init(void );
inline void reset(void) { _num = 0; _inum = 0; }
inline void size(unsigned int datasize, unsigned int indexsize) { _bufsize = datasize; _ibufsize = indexsize; }
inline unsigned int size(void) { return _inum; }
inline unsigned int num(void) { return _num; }
inline void renderMode( bool t = true, bool n = true, bool c = true)
{ _fTexture = t; _fNormal = n; _fColor = c; }
inline void compactTextureCoords( bool c ) { _fTextureCoord = c; }
inline bool colorOn(void) { return _fColor; }
inline bool textureOn(void) { return _fTexture; }
inline bool normalOn(void) { return _fNormal; }
inline unsigned int inum(void) { return _inum; }
inline ddgBufType type(void) { return _type; }
ddgVBIndex pushVTNC(ddgVector3 *p, ddgVector2 *t, ddgVector3 *n, ddgColor4 *c);
ddgVBIndex pushVTN(ddgVector3 *p, ddgVector2 *t, ddgVector3 *n);
ddgVBIndex pushVT(ddgVector3 *p, ddgVector2 *t);
ddgVBIndex pushVT(ddgVector3 *p, ddgTexCoord2 *t);
ddgVBIndex pushVC(ddgVector3 *p, ddgColor4 *c);
ddgVBIndex pushV(ddgVector3 *p);
void pushTriangle( ddgVBIndex i1, ddgVBIndex i2, ddgVBIndex i3 );
void pushQuad( ddgVBIndex i1, ddgVBIndex i2, ddgVBIndex i3, ddgVBIndex i4 );
void pushLine( ddgVBIndex i1, ddgVBIndex i2 );
void pushPoint( ddgVBIndex i1 );
void sort(void);
};
#endif