From 6f6d2f952435c934e30cf669942f1397c80e93ef Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 27 May 2019 22:46:51 +0800 Subject: [PATCH] =?UTF-8?q?VertexBuffer=E6=94=B9=E8=BF=9B=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A8=A1=E6=9D=BF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/VertexBuffer.h | 137 ++++++++++++++++++++++------------- 1 file changed, 87 insertions(+), 50 deletions(-) diff --git a/inc/hgl/graph/VertexBuffer.h b/inc/hgl/graph/VertexBuffer.h index 5fb1b1d0..22a9d9ed 100644 --- a/inc/hgl/graph/VertexBuffer.h +++ b/inc/hgl/graph/VertexBuffer.h @@ -273,8 +273,8 @@ namespace hgl return(true); } - template - bool Write(const vec2 &v) + template + bool Write(const V2 &v) { if(!this->access||this->access+2>this->mem_end) { @@ -293,8 +293,8 @@ namespace hgl * @param v 值 * @param count 写入数量 */ - template - bool Write(const vec2 &v,const uint32_t count) + template + bool Fill(const V2 &v,const uint32_t count) { if(!this->access||this->access+(count<<1)>this->mem_end) { @@ -327,8 +327,8 @@ namespace hgl return(true); } - template - bool WriteLine(const vec2 &start,const vec2 &end) + template + bool WriteLine(const V2 &start,const V2 &end) { if(!this->access||this->access+4>this->mem_end) { @@ -347,8 +347,8 @@ namespace hgl /** * 写入2D三角形 */ - template - bool WriteTriangle(const vec2 &v1,const vec2 &v2,const vec2 &v3) + template + bool WriteTriangle(const V2 &v1,const V2 &v2,const V2 &v3) { if(!this->access||this->access+6>this->mem_end) { @@ -371,8 +371,8 @@ namespace hgl /** * 写入2D三角形 */ - template - bool WriteTriangle(const vec2 *v) + template + bool WriteTriangle(const V2 *v) { if(!this->access||this->access+6>this->mem_end) { @@ -397,8 +397,8 @@ namespace hgl /** * 写入2D四边形坐标数据 */ - template - bool WriteQuad(const vec2 <,const vec2 &rt,const vec2 &rb,const vec2 &lb) + template + bool WriteQuad(const V2 <,const V2 &rt,const V2 &rb,const V2 &lb) { if(WriteTriangle(lt,lb,rb)) if(WriteTriangle(lt,rb,rt)) @@ -552,7 +552,7 @@ namespace hgl return(true); } - bool Write(const T *v) + bool Write3(const T *v) { if(!this->access||this->access+3>this->mem_end) { @@ -567,8 +567,8 @@ namespace hgl return(true); } - template - bool Write(const vec3 &v) + template + bool Write(const V3 &v) { if(!this->access||this->access+3>this->mem_end) { @@ -583,29 +583,13 @@ namespace hgl return(true); } - template - bool Write(const vec4 &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 count 写入数量 */ - template - bool Write(const vec3 &v,const uint32_t count) + template + bool Fill(const V3 &v,const uint32_t count) { if(!this->access||this->access+(count*3)>this->mem_end) { @@ -623,6 +607,32 @@ namespace hgl return(true); } + /** + * 写入多个值到缓冲区 + * @param v 值 + * @param count 写入数量 + */ + template + 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;iaccess++=v->x; + *this->access++=v->y; + *this->access++=v->z; + + ++v; + } + + return(true); + } + bool Write(const Color3f &v) { if(!this->access||this->access+3>this->mem_end) @@ -656,8 +666,8 @@ namespace hgl return(true); } - template - bool WriteLine(const vec3 &start,const vec3 &end) + template + bool WriteLine(const V3 &start,const V3 &end) { if(!this->access||this->access+6>this->mem_end) { @@ -678,8 +688,8 @@ namespace hgl /** * 写入3D三角形 */ - template - bool WriteTriangle(const vec3 &v1,const vec3 &v2,const vec3 &v3) + template + bool WriteTriangle(const V3 &v1,const V3 &v2,const V3 &v3) { if(!this->access||this->access+9>this->mem_end) { @@ -705,8 +715,8 @@ namespace hgl /** * 写入3D三角形 */ - template - bool WriteTriangle(const vec3 *v) + template + bool WriteTriangle(const V3 *v) { if(!this->access||this->access+9>this->mem_end) { @@ -824,8 +834,8 @@ namespace hgl return(true); } - template - bool Write(const vec4 &v) + template + bool Write(const V4 &v) { if(!this->access||this->access+4>this->mem_end) { @@ -857,7 +867,7 @@ namespace hgl 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); @@ -883,8 +893,8 @@ namespace hgl * @param v 值 * @param count 写入数量 */ - template - bool Write(const vec4 &v,const uint32_t count) + template + bool Fill(const V4 &v,const uint32_t count) { if(!this->access||this->access+(count<<2)>this->mem_end) { @@ -903,6 +913,33 @@ namespace hgl return(true); } + /** + * 将多个值写入缓冲区 + * @param v 值 + * @param count 写入数量 + */ + template + 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;iaccess++=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) { if(!this->access||this->access+8>this->mem_end) @@ -923,8 +960,8 @@ namespace hgl return(true); } - template - bool WriteLine(const vec3 &start,const vec3 &end) + template + bool WriteLine(const V4 &start,const V4 &end) { if(!this->access||this->access+8>this->mem_end) { @@ -947,8 +984,8 @@ namespace hgl /** * 写入3D三角形 */ - template - bool WriteTriangle(const vec3 &v1,const vec3 &v2,const vec3 &v3) + template + bool WriteTriangle(const V4 &v1,const V4 &v2,const V4 &v3) { if(!this->access||this->access+12>this->mem_end) { @@ -977,8 +1014,8 @@ namespace hgl /** * 写入3D三角形 */ - template - bool WriteTriangle(const vec3 *v) + template + bool WriteTriangle(const V4 *v) { if(!this->access||this->access+12>this->mem_end) {