00001
00002 #ifndef _TP_ATTRIBUTE_ARRAYS_H
00003 #define _TP_ATTRIBUTE_ARRAYS_H
00004
00005 #include "GLResource.h"
00006 #include "GL/GLPlatform.h"
00007 #include "GL/TPAttributes.h"
00008
00009
00010 namespace gk {
00011
00012
00013 class GLBufferArray : public GLResource
00014 {
00015 GLuint m_name;
00016
00017
00018 GLBufferArray( const GLBufferArray& );
00019 GLBufferArray& operator= ( const GLBufferArray& );
00020
00021 public:
00022
00023 GLBufferArray( )
00024 :
00025 GLResource()
00026 {
00027 glGenVertexArrays(1, &m_name);
00028 }
00029
00030
00031 ~GLBufferArray( )
00032 {
00033 glDeleteVertexArrays(1, &m_name);
00034 }
00035
00036
00037
00038 int setVertexBuffer( const ProgramAttribute& attribute,
00039 GLAttributeBuffer *buffer,
00040 const int size, const GLenum type,
00041 const unsigned long int stride= 0, const unsigned long int offset= 0 )
00042 {
00043 if(buffer == NULL)
00044 return -1;
00045 if(m_name == 0)
00046 return -1;
00047
00048 glBindVertexArray(m_name);
00049
00050
00051 return 0;
00052 }
00053
00054
00055
00056 int setInstanceBuffer( const ProgramAttribute& attribute,
00057 GLAttributeBuffer *buffer,
00058 const int size, const GLenum type,
00059 const unsigned long int stride= 0, const unsigned long int offset= 0,
00060 const int divisor= 1 )
00061 {
00062 if(buffer == NULL)
00063 return -1;
00064 if(m_name == 0)
00065 return -1;
00066
00067 glBindVertexArray(m_name);
00068
00069
00070 return 0;
00071 }
00072
00073 int setIndexBuffer( GLIndexBuffer *buffer, const GLenum type= GL_UNSIGNED_INT, const unsigned int offset= 0 )
00074 {
00075 if(buffer == NULL)
00076 return -1;
00077 if(m_name == 0)
00078 return -1;
00079
00080 glBindVertexArray(m_name);
00081
00082
00083 return 0;
00084 }
00085
00086
00087 int createGLResource( )
00088 {
00089 return (m_name != 0) ? 0 : -1;
00090 }
00091
00092
00093 int releaseGLResource( )
00094 {
00095 return (m_name != 0) ? 0 : -1;
00096 }
00097
00098
00099 GLuint name( ) const
00100 {
00101 return m_name;
00102 }
00103 };
00104
00105 int setBufferArray( GLBufferArray *array );
00106 int resetBufferArray( );
00107
00108 }
00109
00110 #endif