增加硬件最大顶点属性取值和处理

This commit is contained in:
hyzboy 2018-12-06 21:17:45 +08:00
parent af9cf59191
commit 6511c6615b
2 changed files with 33 additions and 1 deletions

View File

@ -15,7 +15,7 @@ namespace hgl
{
protected:
int vao;
GLuint vao;
uint primitive; ///<绘制的图元类型
@ -40,6 +40,8 @@ namespace hgl
VertexArray(uint prim,uint max_vertex_attrib);
~VertexArray();
static int GetMaxVertexAttrib();
uint GetPrimitive ()const{return primitive;} ///<取得要绘制的图元类型
public: //通用顶点缓冲区设置
@ -61,6 +63,7 @@ namespace hgl
public:
int GetDrawCount (); ///<取得可绘制的数据总数量
bool Draw(); ///<绘制
};//class VertexArray
}//namespace graph
}//namespace hgl

View File

@ -5,8 +5,24 @@ namespace hgl
{
namespace graph
{
namespace
{
static int HGL_MAX_VERTEX_ATTRIBS=0;
}
int VertexArray::GetMaxVertexAttrib()
{
if(HGL_MAX_VERTEX_ATTRIBS<=0)
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS,&HGL_MAX_VERTEX_ATTRIBS);
return HGL_MAX_VERTEX_ATTRIBS;
}
VertexArray::VertexArray(uint prim,uint max_vertex_attrib)
{
if(max_vertex_attrib>GetMaxVertexAttrib())
max_vertex_attrib=HGL_MAX_VERTEX_ATTRIBS;
primitive=prim;
vertex_buffer_list.PreMalloc(max_vertex_attrib);
@ -90,5 +106,18 @@ namespace hgl
return(-1);
}
bool VertexArray::Draw()
{
if(element_buffer)
glDrawElements(primitive,0,element_buffer->GetCount(),element_buffer->GetDataType(),nullptr);
else
if(vertex_buffer)
glDrawArrays(primitive,0,vertex_buffer->GetCount());
else
return(false);
return(true);
}
}//namespace graph
}//namespace hgl