进一步完善VBO
This commit is contained in:
parent
0663cd8de1
commit
8d2a4b33f0
@ -16,51 +16,77 @@ namespace hgl
|
|||||||
|
|
||||||
GLuint buffer_index;
|
GLuint buffer_index;
|
||||||
|
|
||||||
GLenum buffer_type;
|
void * data;
|
||||||
GLenum data_type;
|
void * data_end;
|
||||||
uint data_bytes;
|
|
||||||
uint data_comp;
|
GLenum buffer_type; ///<缓冲区类型(GL_ARRAY_BUFFER,GL_ELEMENT_ARRAY_BUFFER等)
|
||||||
GLsizeiptr data_count;
|
GLenum user_pattern; ///<数据存储区使用模式(GL_STATIC_DRAW,GL_DYNAMIC_DRAW等)
|
||||||
GLsizeiptr buffer_bytes;
|
|
||||||
GLenum user_pattern; ///<数据存储区使用模式
|
GLenum data_type; ///<单个数据类型 (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT等)
|
||||||
|
uint data_bytes; ///<单个数据字节数 (GL_BYTE为1,GL_UNSIGNED_SHORT为2GL_FLOAT为4等)
|
||||||
|
uint data_comp; ///<数据成员数 (1/2/3/4,如2D纹理坐标用2,3D坐标/法线用3)
|
||||||
|
|
||||||
|
GLsizeiptr data_count; ///<数据数量
|
||||||
|
GLsizeiptr total_bytes; ///<数据总字节数
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VertexBufferObject(const GLuint index,
|
VertexBufferObject(const GLuint index,
|
||||||
const GLenum &buf_type,
|
const GLenum &buf_type,
|
||||||
|
const GLenum &dsup,
|
||||||
const uint &dt,const uint &dbytes,const uint &dcm,
|
const uint &dt,const uint &dbytes,const uint &dcm,
|
||||||
const GLsizeiptr &count,
|
const GLsizeiptr &count)
|
||||||
const GLenum &dsup)
|
|
||||||
{
|
{
|
||||||
buffer_index=index;
|
buffer_index=index;
|
||||||
buffer_type=buf_type;
|
buffer_type=buf_type;
|
||||||
|
user_pattern=dsup;
|
||||||
|
|
||||||
data_type=dt;
|
data_type=dt;
|
||||||
data_bytes=dbytes;
|
data_bytes=dbytes;
|
||||||
data_comp=dcm;
|
data_comp=dcm;
|
||||||
|
|
||||||
data_count=count;
|
data_count=count;
|
||||||
buffer_bytes=data_bytes*data_comp*data_count;
|
total_bytes=data_bytes*data_comp*data_count;
|
||||||
user_pattern=dsup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~VertexBufferObject()=default;
|
virtual ~VertexBufferObject()=default;
|
||||||
|
|
||||||
GLuint GetBuffer ()const{return buffer_index;}
|
public:
|
||||||
GLsizeiptr GetBufferBytes ()const{return buffer_bytes;}
|
|
||||||
|
GLuint GetBuffer ()const {return buffer_index;} ///<取得OpenGL缓冲区
|
||||||
|
GLenum GetBufferType ()const {return buffer_type;} ///<取得缓冲区类型
|
||||||
|
GLenum GetUserPattern ()const {return user_pattern;} ///<取得缓冲区使用方法
|
||||||
|
|
||||||
|
GLenum GetDataType ()const {return data_type;} ///<取得数据类型
|
||||||
|
uint GetComponent ()const {return data_comp;} ///<取数每一组数据中的数据数量
|
||||||
|
uint GetStride ()const {return data_comp*data_bytes;} ///<取得每一组数据字节数
|
||||||
|
|
||||||
|
GLsizeiptr GetCount ()const {return data_count;} ///<取得数据数量
|
||||||
|
|
||||||
|
GLsizeiptr GetTotalBytes ()const {return total_bytes;} ///<取得数据总字节数
|
||||||
|
void * GetData () {return data;} ///<取得数据指针
|
||||||
|
void * GetData (const uint pos) {return ((char *)data)+data_bytes*pos;} ///<取得数据指针
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void Update()=0; ///<向缓冲区提交所有数据
|
||||||
|
virtual void Change(const GLsizeiptr start,const GLsizeiptr size)=0; ///<向缓冲区提交部分数据
|
||||||
|
virtual void Change(const GLsizeiptr start,const GLsizeiptr size,const void *)=0; ///<向缓冲区提交部分数据
|
||||||
};//class VertexBufferObject
|
};//class VertexBufferObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个VBO对象
|
* 创建一个VBO对象
|
||||||
* @param buf_type 缓冲区类型(GL_ARRAY_BUFFER,GL_ELEMENT_ARRAY_BUFFER等)
|
* @param buf_type 缓冲区类型(GL_ARRAY_BUFFER,GL_ELEMENT_ARRAY_BUFFER等)
|
||||||
|
* @param dsup 数据存储区使用模式(GL_STATIC_DRAW,GL_DYNAMIC_DRAW等)
|
||||||
* @param data_type 单个数据类型 (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT等)
|
* @param data_type 单个数据类型 (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT等)
|
||||||
* @param data_bytes 单个数据字节数 (GL_BYTE为1,GL_UNSIGNED_SHORT为2GL_FLOAT为4等)
|
* @param data_bytes 单个数据字节数 (GL_BYTE为1,GL_UNSIGNED_SHORT为2GL_FLOAT为4等)
|
||||||
* @param data_comp 数据成员数 (1/2/3/4,如2D纹理坐标用2,3D坐标/法线用3)
|
* @param data_comp 数据成员数 (1/2/3/4,如2D纹理坐标用2,3D坐标/法线用3)
|
||||||
* @param size 数据数量
|
* @param size 数据数量
|
||||||
* @param dsup 数据存储区使用模式(GL_STATIC_DRAW,GL_DYNAMIC_DRAW等)
|
|
||||||
*/
|
*/
|
||||||
VertexBufferObject *CreateVBO( const GLenum &buf_type,
|
VertexBufferObject *CreateVBO( const GLenum &buf_type,
|
||||||
|
const GLenum &dsup,
|
||||||
const uint &data_type,const uint &data_bytes,const uint &data_comp,
|
const uint &data_type,const uint &data_bytes,const uint &data_comp,
|
||||||
const GLsizeiptr &size,
|
const GLsizeiptr &size);
|
||||||
const GLenum &dsup);
|
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_GRAPH_VERTEX_BUFFER_OBJECT_INCLUDE
|
#endif//HGL_GRAPH_VERTEX_BUFFER_OBJECT_INCLUDE
|
||||||
|
@ -14,14 +14,19 @@ namespace hgl
|
|||||||
glDeleteBuffers(1,&buffer_index);
|
glDeleteBuffers(1,&buffer_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Set(GLsizei size,void *data)
|
void Update() override
|
||||||
{
|
{
|
||||||
glNamedBufferData(buffer_index,size,data,user_pattern);
|
glNamedBufferData(buffer_index,total_bytes,data,user_pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Change(GLintptr start,GLsizei size,void *data)
|
void Change(const GLsizeiptr start,const GLsizeiptr size) override
|
||||||
{
|
{
|
||||||
glNamedBufferSubData(buffer_index,start,size,data);
|
glNamedBufferSubData(buffer_index,start,size,((char *)data)+start);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Change(const GLsizeiptr start,const GLsizeiptr size,const void *new_data) override
|
||||||
|
{
|
||||||
|
glNamedBufferSubData(buffer_index,start,size,new_data);
|
||||||
}
|
}
|
||||||
};//class VertexBufferControlDSA
|
};//class VertexBufferControlDSA
|
||||||
|
|
||||||
@ -33,9 +38,9 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
|
|
||||||
VertexBufferObject *CreateVBO(const GLenum &buf_type,
|
VertexBufferObject *CreateVBO(const GLenum &buf_type,
|
||||||
|
const GLenum &dsup,
|
||||||
const uint &data_type,const uint &data_bytes,const uint &data_comp,
|
const uint &data_type,const uint &data_bytes,const uint &data_comp,
|
||||||
const GLsizeiptr &size,
|
const GLsizeiptr &size)
|
||||||
const GLenum &dsup)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
|
Loading…
x
Reference in New Issue
Block a user