VertexBuffer改进输入模板类型

This commit is contained in:
hyzboy 2019-05-27 22:46:51 +08:00
parent dd6b45294a
commit 6f6d2f9524

View File

@ -273,8 +273,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V2>
bool Write(const vec2<V> &v) bool Write(const V2 &v)
{ {
if(!this->access||this->access+2>this->mem_end) if(!this->access||this->access+2>this->mem_end)
{ {
@ -293,8 +293,8 @@ namespace hgl
* @param v * @param v
* @param count * @param count
*/ */
template<typename V> template<typename V2>
bool Write(const vec2<V> &v,const uint32_t count) bool Fill(const V2 &v,const uint32_t count)
{ {
if(!this->access||this->access+(count<<1)>this->mem_end) if(!this->access||this->access+(count<<1)>this->mem_end)
{ {
@ -327,8 +327,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V2>
bool WriteLine(const vec2<V> &start,const vec2<V> &end) bool WriteLine(const V2 &start,const V2 &end)
{ {
if(!this->access||this->access+4>this->mem_end) if(!this->access||this->access+4>this->mem_end)
{ {
@ -347,8 +347,8 @@ namespace hgl
/** /**
* 2D三角形 * 2D三角形
*/ */
template<typename V> template<typename V2>
bool WriteTriangle(const vec2<V> &v1,const vec2<V> &v2,const vec2<V> &v3) bool WriteTriangle(const V2 &v1,const V2 &v2,const V2 &v3)
{ {
if(!this->access||this->access+6>this->mem_end) if(!this->access||this->access+6>this->mem_end)
{ {
@ -371,8 +371,8 @@ namespace hgl
/** /**
* 2D三角形 * 2D三角形
*/ */
template<typename V> template<typename V2>
bool WriteTriangle(const vec2<V> *v) bool WriteTriangle(const V2 *v)
{ {
if(!this->access||this->access+6>this->mem_end) if(!this->access||this->access+6>this->mem_end)
{ {
@ -397,8 +397,8 @@ namespace hgl
/** /**
* 2D四边形坐标数据 * 2D四边形坐标数据
*/ */
template<typename V> template<typename V2>
bool WriteQuad(const vec2<V> &lt,const vec2<V> &rt,const vec2<V> &rb,const vec2<V> &lb) bool WriteQuad(const V2 &lt,const V2 &rt,const V2 &rb,const V2 &lb)
{ {
if(WriteTriangle(lt,lb,rb)) if(WriteTriangle(lt,lb,rb))
if(WriteTriangle(lt,rb,rt)) if(WriteTriangle(lt,rb,rt))
@ -552,7 +552,7 @@ namespace hgl
return(true); return(true);
} }
bool Write(const T *v) bool Write3(const T *v)
{ {
if(!this->access||this->access+3>this->mem_end) if(!this->access||this->access+3>this->mem_end)
{ {
@ -567,8 +567,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V3>
bool Write(const vec3<V> &v) bool Write(const V3 &v)
{ {
if(!this->access||this->access+3>this->mem_end) if(!this->access||this->access+3>this->mem_end)
{ {
@ -583,29 +583,13 @@ namespace hgl
return(true); return(true);
} }
template<typename V>
bool Write(const vec4<V> &v)
{
if(!this->access||this->access+3>this->mem_end)
{
LOG_HINT(OS_TEXT("VertexBuffer3::Write(vec4 &) out"));
return(false);
}
*this->access++=v.x;
*this->access++=v.y;
*this->access++=v.z;
return(true);
}
/** /**
* *
* @param v * @param v
* @param count * @param count
*/ */
template<typename V> template<typename V3>
bool Write(const vec3<V> &v,const uint32_t count) bool Fill(const V3 &v,const uint32_t count)
{ {
if(!this->access||this->access+(count*3)>this->mem_end) if(!this->access||this->access+(count*3)>this->mem_end)
{ {
@ -623,6 +607,32 @@ namespace hgl
return(true); return(true);
} }
/**
*
* @param v
* @param count
*/
template<typename V3>
bool Write(const V3 *v,const uint32_t count)
{
if(!this->access||this->access+(count*3)>this->mem_end)
{
LOG_HINT(OS_TEXT("VertexBuffer3::Write(const Vector3f,")+OSString(count)+OS_TEXT(") out"));
return(false);
}
for(uint32_t i=0;i<count;i++)
{
*this->access++=v->x;
*this->access++=v->y;
*this->access++=v->z;
++v;
}
return(true);
}
bool Write(const Color3f &v) bool Write(const Color3f &v)
{ {
if(!this->access||this->access+3>this->mem_end) if(!this->access||this->access+3>this->mem_end)
@ -656,8 +666,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V3>
bool WriteLine(const vec3<V> &start,const vec3<V> &end) bool WriteLine(const V3 &start,const V3 &end)
{ {
if(!this->access||this->access+6>this->mem_end) if(!this->access||this->access+6>this->mem_end)
{ {
@ -678,8 +688,8 @@ namespace hgl
/** /**
* 3D三角形 * 3D三角形
*/ */
template<typename V> template<typename V3>
bool WriteTriangle(const vec3<V> &v1,const vec3<V> &v2,const vec3<V> &v3) bool WriteTriangle(const V3 &v1,const V3 &v2,const V3 &v3)
{ {
if(!this->access||this->access+9>this->mem_end) if(!this->access||this->access+9>this->mem_end)
{ {
@ -705,8 +715,8 @@ namespace hgl
/** /**
* 3D三角形 * 3D三角形
*/ */
template<typename V> template<typename V3>
bool WriteTriangle(const vec3<V> *v) bool WriteTriangle(const V3 *v)
{ {
if(!this->access||this->access+9>this->mem_end) if(!this->access||this->access+9>this->mem_end)
{ {
@ -824,8 +834,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V4>
bool Write(const vec4<V> &v) bool Write(const V4 &v)
{ {
if(!this->access||this->access+4>this->mem_end) if(!this->access||this->access+4>this->mem_end)
{ {
@ -857,7 +867,7 @@ namespace hgl
return(true); return(true);
} }
bool Write(const Color4f &v,const uint32_t count) bool Fill(const Color4f &v,const uint32_t count)
{ {
if(count<=0)return(false); if(count<=0)return(false);
@ -883,8 +893,8 @@ namespace hgl
* @param v * @param v
* @param count * @param count
*/ */
template<typename V> template<typename V4>
bool Write(const vec4<V> &v,const uint32_t count) bool Fill(const V4 &v,const uint32_t count)
{ {
if(!this->access||this->access+(count<<2)>this->mem_end) if(!this->access||this->access+(count<<2)>this->mem_end)
{ {
@ -903,6 +913,33 @@ namespace hgl
return(true); return(true);
} }
/**
*
* @param v
* @param count
*/
template<typename V4>
bool Write(const V4 *v,const uint32_t count)
{
if(!this->access||this->access+(count<<2)>this->mem_end)
{
LOG_HINT(OS_TEXT("VertexBuffer4::Write(const Vector4f,")+OSString(count)+OS_TEXT(") out"));
return(false);
}
for(uint32_t i=0;i<count;i++)
{
*this->access++=v->x;
*this->access++=v->y;
*this->access++=v->z;
*this->access++=v->w;
++v;
}
return(true);
}
bool WriteLine(const T start_x,const T start_y,const T start_z,const T end_x,const T end_y,const T end_z) bool WriteLine(const T start_x,const T start_y,const T start_z,const T end_x,const T end_y,const T end_z)
{ {
if(!this->access||this->access+8>this->mem_end) if(!this->access||this->access+8>this->mem_end)
@ -923,8 +960,8 @@ namespace hgl
return(true); return(true);
} }
template<typename V> template<typename V4>
bool WriteLine(const vec3<V> &start,const vec3<V> &end) bool WriteLine(const V4 &start,const V4 &end)
{ {
if(!this->access||this->access+8>this->mem_end) if(!this->access||this->access+8>this->mem_end)
{ {
@ -947,8 +984,8 @@ namespace hgl
/** /**
* 3D三角形 * 3D三角形
*/ */
template<typename V> template<typename V4>
bool WriteTriangle(const vec3<V> &v1,const vec3<V> &v2,const vec3<V> &v3) bool WriteTriangle(const V4 &v1,const V4 &v2,const V4 &v3)
{ {
if(!this->access||this->access+12>this->mem_end) if(!this->access||this->access+12>this->mem_end)
{ {
@ -977,8 +1014,8 @@ namespace hgl
/** /**
* 3D三角形 * 3D三角形
*/ */
template<typename V> template<typename V4>
bool WriteTriangle(const vec3<V> *v) bool WriteTriangle(const V4 *v)
{ {
if(!this->access||this->access+12>this->mem_end) if(!this->access||this->access+12>this->mem_end)
{ {