diff --git a/inc/hgl/render/RenderDriver.h b/inc/hgl/render/RenderDriver.h new file mode 100644 index 00000000..42d1a71f --- /dev/null +++ b/inc/hgl/render/RenderDriver.h @@ -0,0 +1,25 @@ +#ifndef HGL_RENDER_DRIVER_INCLUDE +#define HGL_RENDER_DRIVER_INCLUDE + +#include +namespace hgl +{ + /** + * 渲染驱动 + * 用于对真实渲染API的交接管理 + */ + class RenderDriver + { + private: + + RenderStatus current_status; + + public: + + virtual void SetCurStatus(const RenderStatus &)=0; + + virtual void ClearColorBuffer()=0; + virtual void ClearDepthBuffer()=0; + };//class RenderDriver +}//namespace hgl +#endif//HGL_RENDER_DRIVER_INCLUDE diff --git a/inc/hgl/render/RenderStatus.h b/inc/hgl/render/RenderStatus.h new file mode 100644 index 00000000..c973342f --- /dev/null +++ b/inc/hgl/render/RenderStatus.h @@ -0,0 +1,47 @@ +#ifndef HGL_RENDER_STATUS_INCLUDE +#define HGL_RENDER_STATUS_INCLUDE + +#include +#include +namespace hgl +{ + enum DEPTH_TEST_FUNC + { + DEPTH_TEST_NEVER=0, + DEPTH_TEST_LESS, + DEPTH_TEST_EQUAL, + DEPTH_TEST_LEQUAL, + DEPTH_TEST_GREATER, + DEPTH_TEST_NOTEQUAL, + DEPTH_TEST_GEQUAL, + DEPTH_TEST_ALWAYS + };// + + struct DepthStatus + { + float near_depth =0, + far_depth =1; + + bool depth_mask =true; + float clear_depth =far_depth; + + DEPTH_TEST_FUNC depth_func =DEPTH_TEST_LESS; + bool depth_test; + + public: + + CompOperatorMemcmp(struct DepthStatus &); + };// + + /** + * 渲染状态 + */ + struct RenderStatus + { + bool color_mask[4]; + Color4f clear_color; + + DepthStatus depth; + };//class RenderStatus +}//namespace hgl +#endif//HGL_RENDER_STATUS_INCLUDE diff --git a/inc/hgl/type/Color.h b/inc/hgl/type/Color.h new file mode 100644 index 00000000..f97b3340 --- /dev/null +++ b/inc/hgl/type/Color.h @@ -0,0 +1,244 @@ +#ifndef HGL_COLOR_TABLE_INCLUDE +#define HGL_COLOR_TABLE_INCLUDE + +#include +namespace hgl +{ + /** + * 颜色数据定义 + */ + struct COLOR_DEF ///颜色数据定义 + { + int red,green,blue; ///<三原色 + int yum; ///<亮度 + + float r,g,b; ///<三原色浮点值 + float y; ///<亮度浮点值 + + char eng_name[32]; ///<英文名称 + u16char chs_name[16]; ///<中文名称 + }; + + /** + * 颜色枚举 + */ + enum COLOR_ENUM ///颜色枚举 + { + ceNone, + + ceAliceBlue, ///<艾利斯兰 + ceAndroidGreen, ///<安卓绿 + ceAntiqueWhite, ///<古董白 + ceAppleGreen, ///<苹果绿 + ceAqua, ///<浅绿色 + ceAquaMarine, ///<碧绿色 + + ceArdenRed, ///<雅顿红(注:商业使用需获得Elizabeth Arden公司授权) + + ceAzure, ///<天蓝色 + ceBananaMania, ///<香蕉黄(芯) + ceBananaYellow, ///<香蕉黄(皮) + ceBeige, ///<米色 + ceBisque, ///<桔黄色 + ceBlack, ///<黑色 + ceBlanchedAlmond, ///<白杏色 + ceBlue, ///<蓝色 + ceBlueViolet, ///<紫罗兰色 + ceBrown, ///<褐色 + ceBurlyWood, ///<实木色 + ceCadetBlue, ///<军兰色 + ceCaribbeanGreen, ///<加勒比海绿 + ceChartreuse, ///<黄绿色 + ceCherryBlossomPink, ///<樱桃花粉 + ceChocolate, ///<巧克力色 + ceCoral, ///<珊瑚色 + ceCornflowerBlue, ///<菊花兰 + ceCornsilk, ///<米绸色 + ceCrimson, ///<暗深红 + ceCyan, ///<青色 + ceDarkBlue, ///<暗蓝色 + ceDarkCyan, ///<暗青色 + ceDarkGoldenrod, ///<暗金黄 + ceDarkGray, ///<暗灰色 + ceDarkGreen, ///<暗绿色 + ceDarkGrey, ///<暗白色 + ceDarkKhaki, ///<暗黄褐色 + ceDarkMagenta, ///<暗洋红 + ceDarkOliveGreen, ///<暗橄榄绿 + ceDarkOrange, ///<暗桔黄 + ceDarkOrchid, ///<暗紫色 + ceDarkRed, ///<暗红色 + ceDarkSalmon, ///<暗肉色 + ceDarkSeaGreen, ///<暗海兰 + ceDarkSlateBlue, ///<暗灰兰 + ceDarkSlateGray, ///<墨绿色 + ceDarkSlateGrey, ///<暗灰绿 + ceDarkTurquoise, ///<暗宝石绿 + ceDarkViolet, ///<暗紫罗兰 + ceDeepPink, ///<深粉红 + ceDeepSkyBlue, ///<深天蓝 + ceDimGray, ///<暗灰色 + ceDimGrey, ///<暗灰白 + ceDodgerBlue, ///<闪兰色 + ceFireBrick, ///<火砖色 + ceFloralWhite, ///<花白色 + ceForestGreen, ///<森林绿 + ceFrenchBeige, ///<法国米色 + ceFrenchBlue, ///<法国兰 + ceFrenchLilac, ///<法国丁香色 + ceFuchsia, ///<紫红色 + ceGainsboro, ///<淡灰色 + ceGhostWhite, ///<幽灵白 + ceGold, ///<金色 + ceGoldenrod, ///<金麒麟色 + ceGoldenYellow, ///<金黄 + ceGray, ///<灰色 + ceGreen, ///<绿色 + ceGreenYellow, ///<蓝绿色 + ceGrey, ///<灰白色 + ceHollywoodCerise, ///<好莱坞樱桃红 + ceHoneydew, ///<蜜色 + ceHotPink, ///<火热粉 + ceHunterGreen, ///<猎人绿 + ceIndianGreen, ///<印度绿 + ceIndianRed, ///<印度红 + ceIndianYellow, ///<印度黄 + ceIndigo, ///<靛青色 + ceIvory, ///<象牙白 + ceKhaki, ///<黄褐色 + ceLavender, ///<淡紫色 + ceLavenderBlush, ///<淡紫红 + ceLawnGreen, ///<草绿色 + ceLemon, ///<柠檬色 + ceLemonYellow, ///<柠檬黄 + ceLemonChiffon, ///<柠檬绸 + ceLightBlue, ///<亮蓝色 + ceLightCoral, ///<亮珊瑚色 + ceLightCyan, ///<亮青色 + ceLightGoldenrodYellow, ///<亮金黄 + ceLightGray, ///<亮灰色 + ceLightGreen, ///<亮绿色 + ceLightGrey, ///<亮灰白 + ceLightPink, ///<亮粉红 + ceLightSalmon, ///<亮肉色 + ceLightSeaGreen, ///<亮海蓝 + ceLightSkyBlue, ///<亮天蓝 + ceLightSlateGray, ///<亮蓝灰 + ceLightSlateGrey, ///<亮蓝白 + ceLightSteelBlue, ///<亮钢兰 + ceLightYellow, ///<亮黄色 + ceLime, ///<酸橙色 + ceLimeGreen, ///<橙绿色 + ceLinen, ///<亚麻色 + ceLion, ///<獅子棕 + ceMagenta, ///<红紫色 + ceMaroon, ///<粟色 + ceMediumAquamarine, ///<间绿色 + ceMediumBlue, ///<间兰色 + ceMediumOrchid, ///<间淡紫 + ceMediumPurple, ///<间紫色 + ceMediumSeaGreen, ///<间海蓝 + ceMediumSlateBlue, ///<间暗蓝 + ceMediumSpringGreen, ///<间春绿 + ceMediumTurquoise, ///<间绿宝石 + ceMediumVioletRed, ///<间紫罗兰 + ceMidNightBlue, ///<中灰蓝 + ceMint, ///<薄荷色 + ceMintCream, ///<薄荷霜 + ceMintGreen, ///<薄荷绿 + ceMistyRose, ///<浅玫瑰 + ceMoccasin, ///<鹿皮色 + + ceMozillaBlue, /// +namespace hgl +{ + /** + * r,g,b三原色类 + */ + class Color3f ///RGB三原色类 + { + void Clamp(); + + public: + + float r,g,b; ///1)One();else{r=g=b=v;}} ///<设置颜色 + + void To(float,float,float,float); ///<转换到另一颜色 + void To(const float *rgb,float v){To(*rgb,*(rgb+1),*(rgb+2),v);} ///<转换到另一颜色 + void To(Color3f &c,float v){To(c.r,c.g,c.b,v);} ///<转换到另一颜色 + + void Black(){r=0,g=0,b=0;} ///<黑色 + void White(){r=1,g=1,b=1;} ///<白色 + + void Red(){r=1,g=0,b=0;} ///<红色 + void Green(){r=0,g=1,b=0;} ///<绿色 + void Blue(){r=0,g=0,b=1;} ///<蓝色 + + void Yellow(){r=1,g=1,b=0;} ///<黄色 + void Purple(){r=1,g=0,b=1;} ///<紫色 + + void Grey(float v){r=v,g=v,b=v;Clamp();} ///<灰色 + void Grey(float,float,float); ///<指彩色变成灰色 + void Grey(); ///<将当前色彩变成灰色 + + //操作符重载 + void operator = (const float *v){r=*v++;g=*v++;b=*v;} + void operator = (COLOR_ENUM ce){Use(ce);} + + bool operator == (const Color3f &); + bool operator != (const Color3f &); + + void operator += (const Color3f &v){r+=v.r;g+=v.g;b+=v.b;Clamp();} + void operator -= (const Color3f &v){r-=v.r;g-=v.g;b-=v.b;Clamp();} + void operator *= (const Color3f &v){r*=v.r;g*=v.g;b*=v.b;Clamp();} + void operator /= (const Color3f &v){r/=v.r;g/=v.g;b/=v.b;Clamp();} + + void operator *= (float v){r*=v;g*=v;b*=v;Clamp();} + void operator /= (float v){r/=v;g/=v;b/=v;Clamp();} + + Color3f operator + (const Color3f &v){return(Color3f(r+v.r,g+v.g,b+v.b));} + Color3f operator - (const Color3f &v){return(Color3f(r-v.r,g-v.g,b-v.b));} + Color3f operator * (const Color3f &v){return(Color3f(r*v.r,g*v.g,b*v.b));} + Color3f operator / (const Color3f &v){return(Color3f(r/v.r,g/v.g,b/v.b));} + + Color3f operator * (float v){return(Color3f(r*v,g*v,b*v));} + Color3f operator / (float v){return(Color3f(r/v,g/v,b/v));} + + operator float *() const {return((float *)this);} //使得本类可以直接当做float *使用 + operator const float *() const {return((const float *)this);} //使得本类可以直接当做const float *使用 + };//class Color3f + + const Color3f BlackColor3f(0,0,0); + const Color3f WhiteColor3f(1,1,1); + const Color3f RedColor3f(1,1,0); + const Color3f GreenColor3f(0,1,0); + const Color3f BlueColor3f(0,0,1); + const Color3f YellowColor3f(1,1,0); + + #define DEF_RGB_U8_TO_COLOR3F(r,g,b) Color3f(float(r)/255.0f,float(g)/255.0f,float(b)/255.0f) +}//namespace hgl +#endif//HGL_COLOR_3_FLOAT_INCLUDE diff --git a/inc/hgl/type/Color4f.h b/inc/hgl/type/Color4f.h new file mode 100644 index 00000000..1fa8d09a --- /dev/null +++ b/inc/hgl/type/Color4f.h @@ -0,0 +1,100 @@ +#ifndef HGL_COLOR_4_FLOAT_INCLUDE +#define HGL_COLOR_4_FLOAT_INCLUDE + +#include +namespace hgl +{ + #define HGL_FLOAT_TO_U32(c1,c2,c3,c4) uint32( \ + (uint8(c1 * 255) << 24 ) | \ + (uint8(c2 * 255) << 16 ) | \ + (uint8(c3 * 255) << 8 ) | \ + (uint8(c4 * 255) ) ) + + #define HGL_FLOAT_TO_RGBA8(r,g,b,a) HGL_FLOAT_TO_U32(r,g,b,a) + #define HGL_FLOAT_TO_BGRA8(r,g,b,a) HGL_FLOAT_TO_U32(b,g,r,a) + #define HGL_FLOAT_TO_ARGB8(r,g,b,a) HGL_FLOAT_TO_U32(a,r,g,b) + #define HGL_FLOAT_TO_ABGR8(r,g,b,a) HGL_FLOAT_TO_U32(a,b,g,r) + + /** + * r,g,b,a四原色类 + */ + class Color4f ///RGBA四原色类 + { + void Clamp(); + + public: + + float r,g,b,a; ///1)One();else{r=v;g=v;b=v;}} ///<设置颜色 + + void To(float,float,float,float); ///<转换到另一颜色 + void To(const Color4f &c,float v){To(c.r,c.g,c.b,v);} ///<转换到另一颜色 + void To(const Color3f &c,float v){To(c.r,c.g,c.b,v);} ///<转换到另一颜色 + + uint32 ToRGBA8()const{ return HGL_FLOAT_TO_RGBA8(r, g, b, a); } ///<输出一个rgba8格式的颜色数据 + uint32 ToBGRA8()const{ return HGL_FLOAT_TO_BGRA8(r, g, b, a); } ///<输出一个bgra8格式的颜色数据 + uint32 ToARGB8()const{ return HGL_FLOAT_TO_ARGB8(r, g, b, a); } ///<输出一个argb8格式的颜色数据 + uint32 ToABGR8()const{ return HGL_FLOAT_TO_ABGR8(r, g, b, a); } ///<输出一个abgr8格式的颜色数据 + + void Grey(); ///<将当前色彩变成灰色 + + //操作符重载 + void operator = (const float *v){r=*v++;g=*v++;b=*v++;a=*v;} + void operator = (const Color3f &v){r=v.r;g=v.g;b=v.b;a=1;} + void operator = (const Color4f &v){r=v.r;g=v.g;b=v.b;a=v.a;} + void operator = (COLOR_ENUM ce){Use(ce,a);} + + bool operator == (const Color4f &); + bool operator != (const Color4f &); + + void operator += (const Color4f &v){r+=v.r;g+=v.g;b+=v.b;a+=v.a;Clamp();} + void operator -= (const Color4f &v){r-=v.r;g-=v.g;b-=v.b;a-=v.a;Clamp();} + void operator *= (const Color4f &v){r*=v.r;g*=v.g;b*=v.b;a*=v.a;Clamp();} + void operator /= (const Color4f &v){r/=v.r;g/=v.g;b/=v.b;a/=v.a;Clamp();} + + void operator += (const Color3f &v){r+=v.r;g+=v.g;b+=v.b;Clamp();} + void operator -= (const Color3f &v){r-=v.r;g-=v.g;b-=v.b;Clamp();} + void operator *= (const Color3f &v){r*=v.r;g*=v.g;b*=v.b;Clamp();} + void operator /= (const Color3f &v){r/=v.r;g/=v.g;b/=v.b;Clamp();} + + void operator *= (float v){r*=v;g*=v;b*=v;a*=v;Clamp();} + void operator /= (float v){r/=v;g/=v;b/=v;a/=v;Clamp();} + + Color4f operator + (const Color4f &v){return(Color4f(r+v.r,g+v.g,b+v.b,a+v.a));} + Color4f operator - (const Color4f &v){return(Color4f(r-v.r,g-v.g,b-v.b,a-v.a));} + Color4f operator * (const Color4f &v){return(Color4f(r*v.r,g*v.g,b*v.b,a*v.a));} + Color4f operator / (const Color4f &v){return(Color4f(r/v.r,g/v.g,b/v.b,a/v.a));} + + Color4f operator * (float v){return(Color4f(r*v,g*v,b*v,a*v));} + Color4f operator / (float v){return(Color4f(r/v,g/v,b/v,a/v));} + + operator float *() const {return((float *)this);} //使得本类可以直接当做float *使用 + operator const float *() const {return((const float *)this);} //使得本类可以直接当做const float *使用 + };//class Color4f + + #define DEF_RGBA_U8_TO_COLOR4F(r,g,b,a) Color4f(float(r)/255.0f,float(g)/255.0f,float(b)/255.0f,float(a)/255.0f) +}//namespace hgl +#endif//HGL_COLOR_4_FLOAT_INCLUDE diff --git a/src/RenderDriver/GLCore/RenderDriverGLCore.cpp b/src/RenderDriver/GLCore/RenderDriverGLCore.cpp new file mode 100644 index 00000000..1bf40d19 --- /dev/null +++ b/src/RenderDriver/GLCore/RenderDriverGLCore.cpp @@ -0,0 +1,22 @@ +#include + +namespace hgl +{ + class RenderDriverGLCore:public RenderDriver + { + public: + + void SetCurStatus(const RenderStatus &rs) override + { + if(rs.color + } + + void ClearColorBuffer() override + { + } + + void ClearDepthBuffer() override + { + } + };//class RenderDriverGLCore:public RenderDriver +}//namespace hgl