blob: 82a4fc1401d58ae23d3715281a366b91d3831247 [file]
#ifndef _GEOMETRY_OBJECT_H
#define _GEOMETRY_OBJECT_H
#include <string>
#include <vector>
#include "shared/Matrices.h"
namespace vr
{
struct RenderModel_t;
struct RenderModel_TextureMap_t;
}
class GeometryObject
{
public:
GeometryObject();
GeometryObject( const std::string & sGeoBaseName );
~GeometryObject();
//Setup functions
void SetIndexArray( int index, std::vector<unsigned int> & intarray, unsigned int render_type );
void SetArrayProps( int index, bool dynamic, int stride );
void SetArrayPropsAdvanced( int index, int part, int elements, int offset );
std::vector<unsigned int> & GetIndexArrayPtr( int index = 0 );
std::vector<float> & GetVertexArrayPtr( int index = 0 );
inline void TaintIndices( int index = 0 ) { m_bTaintIAFlags |= 1 << index; }
inline void TaintVerts( int index = 0 ) { m_iTaintVertFlag |= 1 << index; }
void SetRenderType( int index, unsigned int rendertype );
//Create from higher-level stuff
int CreateFromRenderModel( const vr::RenderModel_t * vrModel );
int ApplyTextureRM( const vr::RenderModel_TextureMap_t * vrDiffuseTexture );
void LoadAsFile(); //Not done.
//Extra texture stuff
void ApplyTexture( const uint8_t * data, int width, int height, int channels = 4 );
void LoadTextureFile( const char * file ) { m_sTextureFile = file; m_dTextureFileTime = -1; }
//Construction functions
void TackVertex( int index, int attribute, float x = 0.0, float y = 0.0, float z = 0.0, float w = 0.0 );
void TackIndex( int index, int idx );
void TackCube( int index, Matrix4 xform ); //Assumes operating with a VA, no IBO, [Vertex Position, Texture Coord] Attributes.
void MakeUnitSquare( int index ); //Square that goes from -1..1 in vertex and 0..1 in property 1 (texture coord)
void Render( int index = 0 );
void Check();
inline std::string GetName() { return m_sGeoName; }
inline void SetName( const std::string & name ) { m_sGeoName = name; }
inline unsigned int GetVAO() { return m_unVertVAO; }
inline unsigned int GetVBO( int index = 0 ) { return m_glVertBuffers[index]; }
inline unsigned int GetIBO( int index = 0 ) { return m_unIndexBuffer[index]; }
inline int GetTextureWidth() { return m_iTextureWidth; }
inline int GetTextureHeight() { return m_iTextureHeight; }
private:
std::string m_sGeoName;
uint32_t m_iTaintVertFlag;
uint32_t m_bTaintIAFlags;
unsigned int m_unTexture;
double m_dTextureFileTime;
int m_iTextureWidth, m_iTextureHeight;
std::string m_sTextureFile;
std::vector< std::vector<float> > m_vertpos;
std::vector< int > m_vertstride;
std::vector< std::vector< int > > m_vertoffset;
std::vector< std::vector< int > > m_vertelements;
std::vector< bool > m_vertdynamic;
std::vector< std::vector<unsigned int> > m_ia;
std::vector< unsigned int > m_unIndexBuffer;
std::vector< unsigned int > m_unRenderTypes;
unsigned int m_unVertVAO;
std::vector< unsigned int > m_glVertBuffers;
void CheckVertexProps( int index );
};
#endif