diff --git a/inc/hgl/graph/AABox.h b/inc/hgl/graph/AABox.h deleted file mode 100644 index 7f8e492a..00000000 --- a/inc/hgl/graph/AABox.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef HGL_GRAPH_AABOX_INCLUDE -#define HGL_GRAPH_AABOX_INCLUDE - -#include -namespace hgl -{ - namespace graph - { - /** - * AABox - */ - struct AABox - { - Vector3f corner; - Vector3f center; - Vector3f length; - Vector3f corner_max; - - public: - - AABox(); - - void SetCornerLength(const Vector3f &c,float x,float y,float z) ///<按顶角和长度设置盒子范围 - { - corner=c; - length=Vector3f(x,y,z); - corner_max=Vector3f(c[0]+x,c[1]+y,c[2]+z); - center=(corner+corner_max)/2.0f; - } - - void SetCornerLength(const Vector3f &c,const Vector3f &l) ///<按顶角和长度设置盒子范围 - { - SetCornerLength(c,l[0],l[1],l[2]); - } - - void SetMinMax(const Vector3f &min_v,const Vector3f &max_v) ///<按最小最大值设置盒子范围 - { - corner=min_v; - corner_max=max_v; - length=max_v-min_v; - center=(min_v+max_v)/2.0f; - } - - Vector3f GetVertexP(const Vector3f &)const; - Vector3f GetVertexN(const Vector3f &)const; - - public: - - void operator += (const AABox &); ///<融合另一个AABox - };//struct AABox - }//namespace graph -}//namespace hgl -#endif//HGL_GRAPH_AABOX_INCLUDE diff --git a/inc/hgl/graph/Camera.h b/inc/hgl/graph/Camera.h deleted file mode 100644 index b04f80dc..00000000 --- a/inc/hgl/graph/Camera.h +++ /dev/null @@ -1,138 +0,0 @@ -#ifndef HGL_GRAPH_CAMERA_INCLUDE -#define HGL_GRAPH_CAMERA_INCLUDE - -#include -namespace hgl -{ - namespace graph - { - /** - * 摄像机类型 - */ - enum class CameraType - { - Perspective, - Ortho - };//enum class CameraType - - /** - * 摄像机数据结构 - */ - struct Camera - { - CameraType type=CameraType::Perspective; - - float width; ///<视图宽 - float height; ///<视图高 - - float fov=60; ///<水平FOV - float znear=16,zfar=256; /// - -namespace hgl -{ - namespace graph - { - enum class ColorSpace - { - Linear=0, - sRGB, - YCbCr, - - BEGIN_RANGE =Linear, - END_RANGE =YCbCr, - RANGE_SIZE =(END_RANGE-BEGIN_RANGE)+1 - };//enum class ColorSpace - - constexpr double SRGB_GAMMA =1.0f/2.2f; - constexpr double SRGB_INVERSE_GAMMA =2.2f; - constexpr double SRGB_ALPHA =0.055f; - - template - inline const T sRGB2Linear(const T &in) - { - if(in<=0.4045) - return in/12.92; - else - return pow((in+SRGB_ALPHA)/(1+SRGB_ALPHA),2.4); - } - - template - inline const T Linear2sRGB(const T &in) - { - if(in<=0.0031308f) - return in*12.92f; - else - return (1+SRGB_ALPHA)*pow(in,1.0f/2.4f)-SRGB_ALPHA; - } - - template - inline const T sRGB2LinearApprox(const T &in) - { - return pow(in,T(SRGB_INVERSE_GAMMA)); - } - - template - inline const T Linear2sRGBApprox(const T &in) - { - return pow(in,SRGB_GAMMA); - } - - template - inline void sRGB2LinearFast(T &x,T &y,T &z,const T &r,const T &g,const T &b) - { - x=0.4124f*r+0.3576f*g+0.1805f*b; - y=0.2126f*r+0.7152f*g+0.0722f*b; - z=0.0193f*r+0.1192f*g+0.9505f*b; - } - - template - inline void Linear2sRGBFast(T &r,T &g,T &b,const T &x,const T &y,const T &z) - { - r= 3.2406f*x-1.5373f*y-0.4986f*z; - g=-0.9689f*x+1.8758f*y+0.0416f*z; - b= 0.0557f*x-0.2040f*y+1.0570f*z; - } - }//namespace graph -}//namespace hgl -#endif//HGL_GRAPH_COLOR_SPACE_INCLUDE diff --git a/inc/hgl/graph/Coordinate.h b/inc/hgl/graph/Coordinate.h deleted file mode 100644 index 98521300..00000000 --- a/inc/hgl/graph/Coordinate.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef HGL_GRAPH_COORDINATE_INCLUDE -#define HGL_GRAPH_COORDINATE_INCLUDE - -#include - -namespace hgl -{ - namespace graph - { - /* - * OpenGL Coordinate System Vulkan Coordinate System My Coordinate System - * - * /Z - * Y| /Z / Z| /Y - * | / / | / - * | / *------------ | / - * | / | X | / - * |/ | |/ - * *------------ | *------------ - * X | Y X - */ - - const Matrix4f GetOpenGL2VulkanMatrix(); //OpenGL坐标系数据到我方坐标系数据变换用矩阵 - - }//namespace graph -}//namespace hgl -#endif//HGL_GRAPH_COORDINATE_INCLUDE diff --git a/inc/hgl/graph/Mesh.h b/inc/hgl/graph/Mesh.h deleted file mode 100644 index c9e6ac87..00000000 --- a/inc/hgl/graph/Mesh.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef HGL_GRAPH_MESH_INCLUDE -#define HGL_GRAPH_MESH_INCLUDE - -namespace hgl -{ - namespace graph - { - #pragma pack(push,1) - struct MeshFileHeader - { - uint8 flag[4]; ///<'MESH' - uint8 sperator; ///<0x1a - uint8 version; ///<1 - - uint8 primitive_type; ///<图元类型 - - uint32 vertices_number; ///<顶点数量 - uint32 faces_number; ///<面数量 - - uint8 color_channels; ///<顶点色数量 - uint8 texcoord_channels; ///<纹理坐标数量 - - uint32 material_index; ///<材质索引 - - uint8 ntb; /// - -namespace hgl -{ - namespace graph - { - /** - * 世界矩阵数据 - * @see res/shader/UBO_WorldMatrix.glsl - */ - struct WorldMatrix - { - Matrix4f ortho; //2D正角视图矩阵 - - Matrix4f projection; - Matrix4f inverse_projection; - - Matrix4f modelview; - Matrix4f inverse_modelview; - - Matrix4f mvp; - Matrix4f inverse_map; - - Vector4f view_pos; ///<眼睛坐标 - Vector2f resolution; ///<画布尺寸 - };//struct WorldMatrix - }//namespace graph -}//namespace hgl -#endif//HGL_GRAPH_WORLD_MATRIX_INCLUDE diff --git a/inc/hgl/graph/vulkan/VKFormat.h b/inc/hgl/graph/vulkan/VKFormat.h deleted file mode 100644 index 7be720f1..00000000 --- a/inc/hgl/graph/vulkan/VKFormat.h +++ /dev/null @@ -1,408 +0,0 @@ -#ifndef HGL_GRAPH_VULKAN_FORMAT_INCLUDE -#define HGL_GRAPH_VULKAN_FORMAT_INCLUDE - -#include - -VK_NAMESPACE_BEGIN - -#define FMT_UNDEFINED VK_FORMAT_UNDEFINED - -#define FMT_RG4UN VK_FORMAT_R4G4_UNORM_PACK8 - -#define FMT_RGBA4 VK_FORMAT_R4G4B4A4_UNORM_PACK16 -#define FMT_BGRA4 VK_FORMAT_B4G4R4A4_UNORM_PACK16 -#define FMT_RGB565 VK_FORMAT_R5G6B5_UNORM_PACK16 -#define FMT_BGR565 VK_FORMAT_B5G6R5_UNORM_PACK16 -#define FMT_RGB5A1 VK_FORMAT_R5G5B5A1_UNORM_PACK16 -#define FMT_BGR5A1 VK_FORMAT_B5G5R5A1_UNORM_PACK16 -#define FMT_A1RGB5 VK_FORMAT_A1R5G5B5_UNORM_PACK16 - -#define FMT_R8UN VK_FORMAT_R8_UNORM -#define FMT_R8SN VK_FORMAT_R8_SNORM -#define FMT_R8US VK_FORMAT_R8_USCALED -#define FMT_R8SS VK_FORMAT_R8_SSCALED -#define FMT_R8U VK_FORMAT_R8_UINT -#define FMT_R8I VK_FORMAT_R8_SINT -#define FMT_R8s VK_FORMAT_R8_SRGB - -#define FMT_RG8UN VK_FORMAT_R8G8_UNORM -#define FMT_RG8SN VK_FORMAT_R8G8_SNORM -#define FMT_RG8US VK_FORMAT_R8G8_USCALED -#define FMT_RG8SS VK_FORMAT_R8G8_SSCALED -#define FMT_RG8U VK_FORMAT_R8G8_UINT -#define FMT_RG8I VK_FORMAT_R8G8_SINT -#define FMT_RG8s VK_FORMAT_R8G8_SRGB - -#define FMT_RGB8UN VK_FORMAT_R8G8B8_UNORM /* no GPU support,don't use */ -#define FMT_RGB8SN VK_FORMAT_R8G8B8_SNORM /* no GPU support,don't use */ -#define FMT_RGB8US VK_FORMAT_R8G8B8_USCALED /* no GPU support,don't use */ -#define FMT_RGB8SS VK_FORMAT_R8G8B8_SSCALED /* no GPU support,don't use */ -#define FMT_RGB8U VK_FORMAT_R8G8B8_UINT /* no GPU support,don't use */ -#define FMT_RGB8I VK_FORMAT_R8G8B8_SINT /* no GPU support,don't use */ -#define FMT_RGB8s VK_FORMAT_R8G8B8_SRGB /* no GPU support,don't use */ - -#define FMT_BGR8UN VK_FORMAT_B8G8R8_UNORM /* no GPU support,don't use */ -#define FMT_BGR8SN VK_FORMAT_B8G8R8_SNORM /* no GPU support,don't use */ -#define FMT_BGR8US VK_FORMAT_B8G8R8_USCALED /* no GPU support,don't use */ -#define FMT_BGR8SS VK_FORMAT_B8G8R8_SSCALED /* no GPU support,don't use */ -#define FMT_BGR8U VK_FORMAT_B8G8R8_UINT /* no GPU support,don't use */ -#define FMT_BGR8I VK_FORMAT_B8G8R8_SINT /* no GPU support,don't use */ -#define FMT_BGR8s VK_FORMAT_B8G8R8_SRGB /* no GPU support,don't use */ - -#define FMT_RGBA8UN VK_FORMAT_R8G8B8A8_UNORM -#define FMT_RGBA8SN VK_FORMAT_R8G8B8A8_SNORM -#define FMT_RGBA8US VK_FORMAT_R8G8B8A8_USCALED -#define FMT_RGBA8SS VK_FORMAT_R8G8B8A8_SSCALED -#define FMT_RGBA8U VK_FORMAT_R8G8B8A8_UINT -#define FMT_RGBA8I VK_FORMAT_R8G8B8A8_SINT -#define FMT_RGBA8s VK_FORMAT_R8G8B8A8_SRGB - -#define FMT_BGRA8UN VK_FORMAT_B8G8R8A8_UNORM -#define FMT_BGRA8SN VK_FORMAT_B8G8R8A8_SNORM -#define FMT_BGRA8US VK_FORMAT_B8G8R8A8_USCALED -#define FMT_BGRA8SS VK_FORMAT_B8G8R8A8_SSCALED -#define FMT_BGRA8U VK_FORMAT_B8G8R8A8_UINT -#define FMT_BGRA8I VK_FORMAT_B8G8R8A8_SINT -#define FMT_BGRA8s VK_FORMAT_B8G8R8A8_SRGB - -#define FMT_ABGR8UN VK_FORMAT_A8B8G8R8_UNORM_PACK32 -#define FMT_ABGR8SN VK_FORMAT_A8B8G8R8_SNORM_PACK32 -#define FMT_ABGR8US VK_FORMAT_A8B8G8R8_USCALED_PACK32 -#define FMT_ABGR8SS VK_FORMAT_A8B8G8R8_SSCALED_PACK32 -#define FMT_ABGR8U VK_FORMAT_A8B8G8R8_UINT_PACK32 -#define FMT_ABGR8I VK_FORMAT_A8B8G8R8_SINT_PACK32 -#define FMT_ABGR8s VK_FORMAT_A8B8G8R8_SRGB_PACK32 - -#define FMT_A2RGB10UN VK_FORMAT_A2R10G10B10_UNORM_PACK32 -#define FMT_A2RGB10SN VK_FORMAT_A2R10G10B10_SNORM_PACK32 -#define FMT_A2RGB10US VK_FORMAT_A2R10G10B10_USCALED_PACK32 -#define FMT_A2RGB10SS VK_FORMAT_A2R10G10B10_SSCALED_PACK32 -#define FMT_A2RGB10U VK_FORMAT_A2R10G10B10_UINT_PACK32 -#define FMT_A2RGB10I VK_FORMAT_A2R10G10B10_SINT_PACK32 - -#define FMT_A2BGR10UN VK_FORMAT_A2B10G10R10_UNORM_PACK32 -#define FMT_A2BGR10SN VK_FORMAT_A2B10G10R10_SNORM_PACK32 -#define FMT_A2BGR10US VK_FORMAT_A2B10G10R10_USCALED_PACK32 -#define FMT_A2BGR10SS VK_FORMAT_A2B10G10R10_SSCALED_PACK32 -#define FMT_A2BGR10U VK_FORMAT_A2B10G10R10_UINT_PACK32 -#define FMT_A2BGR10I VK_FORMAT_A2B10G10R10_SINT_PACK32 - -#define FMT_R16UN VK_FORMAT_R16_UNORM -#define FMT_R16SN VK_FORMAT_R16_SNORM -#define FMT_R16US VK_FORMAT_R16_USCALED -#define FMT_R16SS VK_FORMAT_R16_SSCALED -#define FMT_R16U VK_FORMAT_R16_UINT -#define FMT_R16I VK_FORMAT_R16_SINT -#define FMT_R16F VK_FORMAT_R16_SFLOAT - -#define FMT_RG16UN VK_FORMAT_R16G16_UNORM -#define FMT_RG16SN VK_FORMAT_R16G16_SNORM -#define FMT_RG16US VK_FORMAT_R16G16_USCALED -#define FMT_RG16SS VK_FORMAT_R16G16_SSCALED -#define FMT_RG16U VK_FORMAT_R16G16_UINT -#define FMT_RG16I VK_FORMAT_R16G16_SINT -#define FMT_RG16F VK_FORMAT_R16G16_SFLOAT - -#define FMT_RGB16UN VK_FORMAT_R16G16B16_UNORM /* no GPU support,don't use */ -#define FMT_RGB16SN VK_FORMAT_R16G16B16_SNORM /* no GPU support,don't use */ -#define FMT_RGB16US VK_FORMAT_R16G16B16_USCALED /* no GPU support,don't use */ -#define FMT_RGB16SS VK_FORMAT_R16G16B16_SSCALED /* no GPU support,don't use */ -#define FMT_RGB16U VK_FORMAT_R16G16B16_UINT /* no GPU support,don't use */ -#define FMT_RGB16I VK_FORMAT_R16G16B16_SINT /* no GPU support,don't use */ -#define FMT_RGB16F VK_FORMAT_R16G16B16_SFLOAT /* no GPU support,don't use */ - -#define FMT_RGBA16UN VK_FORMAT_R16G16B16A16_UNORM -#define FMT_RGBA16SN VK_FORMAT_R16G16B16A16_SNORM -#define FMT_RGBA16US VK_FORMAT_R16G16B16A16_USCALED -#define FMT_RGBA16SS VK_FORMAT_R16G16B16A16_SSCALED -#define FMT_RGBA16U VK_FORMAT_R16G16B16A16_UINT -#define FMT_RGBA16I VK_FORMAT_R16G16B16A16_SINT -#define FMT_RGBA16F VK_FORMAT_R16G16B16A16_SFLOAT - -#define FMT_R32U VK_FORMAT_R32_UINT -#define FMT_R32I VK_FORMAT_R32_SINT -#define FMT_R32F VK_FORMAT_R32_SFLOAT - -#define FMT_RG32U VK_FORMAT_R32G32_UINT -#define FMT_RG32I VK_FORMAT_R32G32_SINT -#define FMT_RG32F VK_FORMAT_R32G32_SFLOAT - -#define FMT_RGB32U VK_FORMAT_R32G32B32_UINT -#define FMT_RGB32I VK_FORMAT_R32G32B32_SINT -#define FMT_RGB32F VK_FORMAT_R32G32B32_SFLOAT - -#define FMT_RGBA32U VK_FORMAT_R32G32B32A32_UINT -#define FMT_RGBA32I VK_FORMAT_R32G32B32A32_SINT -#define FMT_RGBA32F VK_FORMAT_R32G32B32A32_SFLOAT - -#define FMT_R64U VK_FORMAT_R64_UINT -#define FMT_R64I VK_FORMAT_R64_SINT -#define FMT_R64F VK_FORMAT_R64_SFLOAT - -#define FMT_RG64U VK_FORMAT_R64G64_UINT -#define FMT_RG64I VK_FORMAT_R64G64_SINT -#define FMT_RG64F VK_FORMAT_R64G64_SFLOAT - -#define FMT_RGB64U VK_FORMAT_R64G64B64_UINT -#define FMT_RGB64I VK_FORMAT_R64G64B64_SINT -#define FMT_RGB64F VK_FORMAT_R64G64B64_SFLOAT - -#define FMT_RGBA64U VK_FORMAT_R64G64B64A64_UINT -#define FMT_RGBA64I VK_FORMAT_R64G64B64A64_SINT -#define FMT_RGBA64F VK_FORMAT_R64G64B64A64_SFLOAT - -#define FMT_B10GR11UF VK_FORMAT_B10G11R11_UFLOAT_PACK32 -#define FMT_E5BGR9UF VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 - -#define FMT_D16UN VK_FORMAT_D16_UNORM -#define FMT_X8_D24UN VK_FORMAT_X8_D24_UNORM_PACK32 -#define FMT_D32F VK_FORMAT_D32_SFLOAT -#define FMT_S8U VK_FORMAT_S8_UINT -#define FMT_D16UN_S8U VK_FORMAT_D16_UNORM_S8_UINT -#define FMT_D24UN_S8U VK_FORMAT_D24_UNORM_S8_UINT -#define FMT_D32F_S8U VK_FORMAT_D32_SFLOAT_S8_UINT - -/** - * Type of data bytes/pixel Palette size Line Segments User For Compressed components/Description - * ---------------+----------------+---------------+-----------------+-------------------+-----------------------------+-------------------------------------- - * BC1(S3TC1) RGB5/RGB5A1 0.5 4 1 Color maps,Normal maps - * BC2(S3TC3) RGBA4 1 4 1 BC1+uncompress 4-bit alpha - * BC3(S3TC5) RGBA4 1 4 1 Color+1Alpha Color maps BC1+BC4 compress alpha - * BC4(ATI1/3Dc+) Grayscale 0.5 8 1 - * BC5(ATI2/3Dc) 2xGrayscale 1 8 per channel 1 per channel Tangent-space normal maps - * BC6H FloatRGB 1 8-16 1-2 HDR images - * BC7 RGB/RGBA 1 4-16 1-3 High-quality color maps - * - * ETC RGB - * ETC2 RGB/RGBA1 Color maps,Normals - * EAC Grayscale - * 2xEAC RG - * ETC2+EAC RGBA - * - * PVRTC RGB/RGBA1/RGBA - * PVRTC2 RGB/RGBA1/RGBA - * - * ASTC R/RG/RGB/RGBA - * ---------------+----------------+---------------+-----------------+-------------------+-----------------------------+-------------------------------------- - */ - -#define FMT_BC1_RGBUN VK_FORMAT_BC1_RGB_UNORM_BLOCK -#define FMT_BC1_RGBs VK_FORMAT_BC1_RGB_SRGB_BLOCK -#define FMT_BC1_RGBAUN VK_FORMAT_BC1_RGBA_UNORM_BLOCK -#define FMT_BC1_RGBAs VK_FORMAT_BC1_RGBA_SRGB_BLOCK - -#define FMT_BC2UN VK_FORMAT_BC2_UNORM_BLOCK -#define FMT_BC2s VK_FORMAT_BC2_SRGB_BLOCK - -#define FMT_BC3UN VK_FORMAT_BC3_UNORM_BLOCK -#define FMT_BC3s VK_FORMAT_BC3_SRGB_BLOCK - -#define FMT_BC4UN VK_FORMAT_BC4_UNORM_BLOCK -#define FMT_BC4SN VK_FORMAT_BC4_SNORM_BLOCK - -#define FMT_BC5UN VK_FORMAT_BC5_UNORM_BLOCK -#define FMT_BC5SN VK_FORMAT_BC5_SNORM_BLOCK - -#define FMT_BC6UF VK_FORMAT_BC6H_UFLOAT_BLOCK -#define FMT_BC6SF VK_FORMAT_BC6H_SFLOAT_BLOCK - -#define FMT_BC7UN VK_FORMAT_BC7_UNORM_BLOCK -#define FMT_BC7s VK_FORMAT_BC7_SRGB_BLOCK - -#define FMT_ETC2_RGB8UN VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK -#define FMT_ETC2_RGB8s VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK -#define FMT_ETC2_RGB8A1UN VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK -#define FMT_ETC2_RGB8A1s VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK -#define FMT_ETC2_RGBA8UN VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK -#define FMT_ETC2_RGBA8s VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK - -#define FMT_EAC_R11UN VK_FORMAT_EAC_R11_UNORM_BLOCK -#define FMT_EAC_R11SN VK_FORMAT_EAC_R11_SNORM_BLOCK -#define FMT_EAC_RG11UN VK_FORMAT_EAC_R11G11_UNORM_BLOCK -#define FMT_EAC_RG11SN VK_FORMAT_EAC_R11G11_SNORM_BLOCK - -#define FMT_ASTC_4x4UN VK_FORMAT_ASTC_4x4_UNORM_BLOCK -#define FMT_ASTC_4x4s VK_FORMAT_ASTC_4x4_SRGB_BLOCK -#define FMT_ASTC_5x4UN VK_FORMAT_ASTC_5x4_UNORM_BLOCK -#define FMT_ASTC_5x4s VK_FORMAT_ASTC_5x4_SRGB_BLOCK -#define FMT_ASTC_5x5UN VK_FORMAT_ASTC_5x5_UNORM_BLOCK -#define FMT_ASTC_5x5s VK_FORMAT_ASTC_5x5_SRGB_BLOCK -#define FMT_ASTC_6x5UN VK_FORMAT_ASTC_6x5_UNORM_BLOCK -#define FMT_ASTC_6x5s VK_FORMAT_ASTC_6x5_SRGB_BLOCK -#define FMT_ASTC_6x6UN VK_FORMAT_ASTC_6x6_UNORM_BLOCK -#define FMT_ASTC_6x6s VK_FORMAT_ASTC_6x6_SRGB_BLOCK -#define FMT_ASTC_8x5UN VK_FORMAT_ASTC_8x5_UNORM_BLOCK -#define FMT_ASTC_8x5s VK_FORMAT_ASTC_8x5_SRGB_BLOCK -#define FMT_ASTC_8x6UN VK_FORMAT_ASTC_8x6_UNORM_BLOCK -#define FMT_ASTC_8x6s VK_FORMAT_ASTC_8x6_SRGB_BLOCK -#define FMT_ASTC_8x8UN VK_FORMAT_ASTC_8x8_UNORM_BLOCK -#define FMT_ASTC_8x8s VK_FORMAT_ASTC_8x8_SRGB_BLOCK -#define FMT_ASTC_10x5UN VK_FORMAT_ASTC_10x5_UNORM_BLOCK -#define FMT_ASTC_10x5s VK_FORMAT_ASTC_10x5_SRGB_BLOCK -#define FMT_ASTC_10x6UN VK_FORMAT_ASTC_10x6_UNORM_BLOCK -#define FMT_ASTC_10x6s VK_FORMAT_ASTC_10x6_SRGB_BLOCK -#define FMT_ASTC_10x8UN VK_FORMAT_ASTC_10x8_UNORM_BLOCK -#define FMT_ASTC_10x8s VK_FORMAT_ASTC_10x8_SRGB_BLOCK -#define FMT_ASTC_10x10UN VK_FORMAT_ASTC_10x10_UNORM_BLOCK -#define FMT_ASTC_10x10s VK_FORMAT_ASTC_10x10_SRGB_BLOCK -#define FMT_ASTC_12x10UN VK_FORMAT_ASTC_12x10_UNORM_BLOCK -#define FMT_ASTC_12x10s VK_FORMAT_ASTC_12x10_SRGB_BLOCK -#define FMT_ASTC_12x12UN VK_FORMAT_ASTC_12x12_UNORM_BLOCK -#define FMT_ASTC_12x12s VK_FORMAT_ASTC_12x12_SRGB_BLOCK - -#define FMT_BEGIN_RANGE FMT_UNDEFINED -#define FMT_END_RANGE FMT_ASTC_12x12s -constexpr size_t FMT_RANGE_SIZE=FMT_END_RANGE-FMT_BEGIN_RANGE+1; - -#define FMT_YUYV8_422 VK_FORMAT_G8B8G8R8_422_UNORM -#define FMT_UYVY8_422 VK_FORMAT_B8G8R8G8_422_UNORM -#define FMT_YUV8_420 VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM -#define FMT_Y8_UV8_420 VK_FORMAT_G8_B8R8_2PLANE_420_UNORM -#define FMT_YUV8_422 VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM -#define FMT_Y8_UV8_422 VK_FORMAT_G8_B8R8_2PLANE_422_UNORM -#define FMT_YUV8_444 VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM - -#define FMT_R10X6UN VK_FORMAT_R10X6_UNORM_PACK16 -#define FMT_RG10X6UN VK_FORMAT_R10X6G10X6_UNORM_2PACK16 -#define FMT_RGBA10X6UN VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 -#define FMT_YUYV10_422 VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 -#define FMT_UYVY10_422 VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 -#define FMT_YUV10_420 VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 -#define FMT_Y10_UV10_420 VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 -#define FMT_YUV10_422 VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 -#define FMT_Y10_UV10_422 VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 -#define FMT_YUV10_444 VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 - -#define FMT_R12X4UN VK_FORMAT_R12X4_UNORM_PACK16 -#define FMT_RG12X4UN VK_FORMAT_R12X4G12X4_UNORM_2PACK16 -#define FMT_RGBA12X4UN VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 -#define FMT_YUYV12_422 VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 -#define FMT_UYVY12_422 VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 -#define FMT_YUV12_420 VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 -#define FMT_Y12_UV12_420 VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 -#define FMT_YUV12_422 VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 -#define FMT_Y12_UV12_422 VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 -#define FMT_YUV12_444 VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 - -#define FMT_YUYV16_422 VK_FORMAT_G16B16G16R16_422_UNORM -#define FMT_UYVY16_422 VK_FORMAT_B16G16R16G16_422_UNORM -#define FMT_YUV16_420 VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM -#define FMT_Y16_UV16_420 VK_FORMAT_G16_B16R16_2PLANE_420_UNORM -#define FMT_YUV16_422 VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM -#define FMT_Y16_UV16_422 VK_FORMAT_G16_B16R16_2PLANE_422_UNORM -#define FMT_YUV16_444 VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM - -#define FMT_YUV_BEGIN_RANGE FMT_YUYV8_422 -#define FMT_YUV_END_RANGE FMT_YUV16_444 -constexpr size_t FMT_YUV_RANGE_SIZE=FMT_YUV_END_RANGE-FMT_YUV_BEGIN_RANGE+1; - -#define FMT_PVRTC1_2UN VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG -#define FMT_PVRTC1_4UN VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG -#define FMT_PVRTC2_2UN VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG -#define FMT_PVRTC2_4UN VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG -#define FMT_PVRTC1_2s VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG -#define FMT_PVRTC1_4s VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG -#define FMT_PVRTC2_2s VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG -#define FMT_PVRTC2_4s VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG - -#define FMT_PVRTC_BEGIN_RANGE FMT_PVRTC1_2UN -#define FMT_PVRTC_END_RANGE FMT_PVRTC2_4s -constexpr size_t FMT_PVRTC_RANGE_SIZE=FMT_PVRTC_END_RANGE-FMT_PVRTC_BEGIN_RANGE+1; - -//以下为AMD/NVIDIA/INTEL/QUALCOMM/ARM/POWERVR全部可用的通用格式 -#define UFMT_BGRA4 FMT_BGRA4 -#define UFMT_RGB565 FMT_RGB565 -#define UFMT_A1RGB5 FMT_A1RGB5 -#define UFMT_R8 FMT_R8UN -#define UFMT_RG8 FMT_RG8UN -#define UFMT_RGBA8 FMT_RGBA8UN -#define UFMT_ABGR8 FMT_ABGR8UN -#define UFMT_A2BGR10 FMT_A2BGR10UN -#define UFMT_R16 FMT_R16UN -#define UFMT_R16F FMT_R16F -#define UFMT_RG16 FMT_RG16UN -#define UFMT_RG16F FMT_RG16F -#define UFMT_RGBA16 FMT_RGBA16UN -#define UFMT_RGBA16F FMT_RGBA16F -#define UFMT_R32U FMT_R32U -#define UFMT_R32I FMT_R32I -#define UFMT_R32F FMT_R32F -#define UFMT_RG32U FMT_RG32U -#define UFMT_RG32I FMT_RG32I -#define UFMT_RG32F FMT_RG32F -#define UFMT_RGB32U FMT_RGB32U -#define UFMT_RGB32I FMT_RGB32I -#define UFMT_RGB32F FMT_RGB32F -#define UFMT_RGBA32U FMT_RGBA32U -#define UFMT_RGBA32I FMT_RGBA32I -#define UFMT_RGBA32F FMT_RGBA32F -#define UFMT_B10GR11UF FMT_B10GR11UF - -enum class TextureCompressType -{ - NONE=0, - - S3TC, - PVRTC, - ETC1, - ETC2, - EAC, - ATC, - ASTC, - YUV, -};// - -enum class VulkanDataType -{ - NONE=0, - - UNORM, - SNORM, - USCALED, - SSCALED, - UINT, - SINT, - UFLOAT, - SFLOAT, - SRGB, - - END -};// - -struct VulkanFormat -{ - VkFormat format; ///bytes:0); -} - -inline const char *GetVulkanFormatName(const VkFormat &format) -{ - const VulkanFormat *vcf=GetVulkanFormat(format); - - return (vcf?vcf->name:nullptr); -} - -const VulkanFormat *GetVulkanFormat(const char *fmt_name); -VK_NAMESPACE_END -#endif//HGL_GRAPH_VULKAN_FORMAT_INCLUDE diff --git a/inc/hgl/graph/vulkan/VKNamespace.h b/inc/hgl/graph/vulkan/VKNamespace.h deleted file mode 100644 index cde6a00a..00000000 --- a/inc/hgl/graph/vulkan/VKNamespace.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include - -#define VK_NAMESPACE hgl::graph::vulkan - -#define VK_NAMESPACE_USING using namespace VK_NAMESPACE; - -#define VK_NAMESPACE_BEGIN namespace hgl{namespace graph{namespace vulkan{ -#define VK_NAMESPACE_END }}} diff --git a/inc/hgl/graph/vulkan/VKShaderResource.h b/inc/hgl/graph/vulkan/VKShaderResource.h deleted file mode 100644 index 17f1b4c4..00000000 --- a/inc/hgl/graph/vulkan/VKShaderResource.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE -#define HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE - -#include -#include -#include - -VK_NAMESPACE_BEGIN -struct ShaderResourceList -{ - Map binding_by_name; ///<名字索引 - List binding_list; ///<资源binding列表 - -public: - - const int GetBinding(const UTF8String &name)const - { - int binding; - - if(binding_by_name.Get(name,binding)) - return binding; - else - return -1; - } -};//struct ShaderResource - -using ShaderResource=ShaderResourceList[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; -VK_NAMESPACE_END -#endif//HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE diff --git a/src/RenderDevice/Vulkan/CMakeLists.txt b/src/RenderDevice/Vulkan/CMakeLists.txt index c59923e1..9b15dfd7 100644 --- a/src/RenderDevice/Vulkan/CMakeLists.txt +++ b/src/RenderDevice/Vulkan/CMakeLists.txt @@ -29,8 +29,7 @@ SET(VK_RENDER_PASS_SOURCE VKFramebuffer.cpp VKSwapchain.cpp VKCommandBuffer.cpp) -SET(RENDER_DEVICE_VULKAN_SOURCE VKFormat.cpp - VKMemory.cpp +SET(RENDER_DEVICE_VULKAN_SOURCE VKMemory.cpp VKProperties.cpp VKDebugOut.cpp VKInstance.cpp diff --git a/src/RenderDevice/Vulkan/VKFormat.cpp b/src/RenderDevice/Vulkan/VKFormat.cpp deleted file mode 100644 index 3d525b06..00000000 --- a/src/RenderDevice/Vulkan/VKFormat.cpp +++ /dev/null @@ -1,288 +0,0 @@ -#include -#include - -VK_NAMESPACE_BEGIN -namespace -{ - //enum class ColorDataTypeEnum:uint8 - //{ - // X=0, - // R,G,B,A,DEPTH,STENCIL - //}; - - #define VULKAN_FORMAT_DEFINE(id,size,name,compress,color,depth,stencil) {id,size,name,TextureCompressType::compress,VulkanDataType::color,VulkanDataType::depth,VulkanDataType::stencil} - - #define COLOR_FORMAT_DEFINE(name,size,color) VULKAN_FORMAT_DEFINE(FMT_##name,size,#name,NONE, color,NONE,NONE) - - #define COLOR_6_FORMAT_DEFINE(type,byte) COLOR_FORMAT_DEFINE(type##UN, byte,UNORM), \ - COLOR_FORMAT_DEFINE(type##SN, byte,SNORM), \ - COLOR_FORMAT_DEFINE(type##US, byte,USCALED), \ - COLOR_FORMAT_DEFINE(type##SS, byte,SSCALED), \ - COLOR_FORMAT_DEFINE(type##U, byte,UINT), \ - COLOR_FORMAT_DEFINE(type##I, byte,SINT), \ - - #define COLOR_7s_FORMAT_DEFINE(type,byte) COLOR_6_FORMAT_DEFINE(type,byte) \ - COLOR_FORMAT_DEFINE(type##s, byte,SRGB), - - #define COLOR_7F_FORMAT_DEFINE(type,byte) COLOR_6_FORMAT_DEFINE(type,byte) \ - COLOR_FORMAT_DEFINE(type##F, byte,SFLOAT), - - #define COLOR_UIF_FORMAT_DEFINE(type,byte) COLOR_FORMAT_DEFINE(type##U, byte,UINT), \ - COLOR_FORMAT_DEFINE(type##I, byte,SINT), \ - COLOR_FORMAT_DEFINE(type##F, byte,SFLOAT), - - #define COMPRESS_FORMAT_DEFINE(id,name,compress,color) VULKAN_FORMAT_DEFINE(id,0,name,compress,color,NONE,NONE) - - #define DEPTH_FORMAT_DEFINE(name,size,type) VULKAN_FORMAT_DEFINE(FMT_##name,size,#name,NONE,NONE,type, NONE) - #define STENCIL_FORMAT_DEFINE(name,size,type) VULKAN_FORMAT_DEFINE(FMT_##name,size,#name,NONE,NONE,NONE, type) - #define DEPTH_STENCIL_FORMAT_DEFINE(name,size,dt,st) VULKAN_FORMAT_DEFINE(FMT_##name,size,#name,NONE,NONE,dt, st ) - - - #define S3TC_Us_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_##name##UN,#name "UN",S3TC,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_##name##s,#name "s",S3TC,SRGB) - - #define S3TC_NORM_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_##name##UN,#name "UN",S3TC,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_##name##SN,#name "SN",S3TC,SNORM) - - #define S3TC_FLOAT_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_##name##UF,#name "UF",S3TC,UFLOAT), \ - COMPRESS_FORMAT_DEFINE(FMT_##name##SF,#name "SF",S3TC,SFLOAT) - - #define ETC2_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_ETC2_##name##UN,"ETC2" #name "UN",ETC2,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_ETC2_##name##s,"ETC2" #name "s",ETC2,SRGB) - - #define EAC_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_EAC_##name##UN,"EAC" #name "UN",EAC,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_EAC_##name##SN,"EAC" #name "SN",EAC,SNORM) - - #define ASTC_FORMAT_DEFINE(mat) COMPRESS_FORMAT_DEFINE(FMT_ASTC_##mat##UN,"ASTC" #mat "UN",ASTC,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_ASTC_##mat##s,"ASTC" #mat "s",ASTC,SRGB) - - #define YUV_FORMAT_DEFINE(name) COMPRESS_FORMAT_DEFINE(FMT_##name,#name,YUV,UNORM) - - #define YUV_FORMAT_COMBO(bit) YUV_FORMAT_DEFINE(YUYV##bit##_422), \ - YUV_FORMAT_DEFINE(UYVY##bit##_422), \ - YUV_FORMAT_DEFINE(YUV##bit##_420), \ - YUV_FORMAT_DEFINE(Y##bit##_UV##bit##_420), \ - YUV_FORMAT_DEFINE(YUV##bit##_422), \ - YUV_FORMAT_DEFINE(Y##bit##_UV##bit##_422), \ - YUV_FORMAT_DEFINE(YUV##bit##_444) - - #define PVRTC_FORMAT_DEFINE(level,bpp) COMPRESS_FORMAT_DEFINE(FMT_PVRTC##level##_##bpp##UN,"PVRTC" #level "_" #bpp "UN",PVRTC,UNORM), \ - COMPRESS_FORMAT_DEFINE(FMT_PVRTC##level##_##bpp##s,"PVRTC" #level "_" #bpp "s",PVRTC,SRGB) - - constexpr VulkanFormat vulkan_color_format_list[]= - { - COLOR_FORMAT_DEFINE(UNDEFINED, 0,UNORM), - - COLOR_FORMAT_DEFINE(RG4UN, 1,UNORM), - - COLOR_FORMAT_DEFINE(RGBA4, 2,UNORM), - COLOR_FORMAT_DEFINE(BGRA4, 2,UNORM), - COLOR_FORMAT_DEFINE(RGB565, 2,UNORM), - COLOR_FORMAT_DEFINE(BGR565, 2,UNORM), - COLOR_FORMAT_DEFINE(RGB5A1, 2,UNORM), - COLOR_FORMAT_DEFINE(BGR5A1, 2,UNORM), - COLOR_FORMAT_DEFINE(A1RGB5, 2,UNORM), - - COLOR_7s_FORMAT_DEFINE(R8,1) - COLOR_7s_FORMAT_DEFINE(RG8,2) - COLOR_7s_FORMAT_DEFINE(RGB8,3) - COLOR_7s_FORMAT_DEFINE(BGR8,3) - COLOR_7s_FORMAT_DEFINE(RGBA8,4) - COLOR_7s_FORMAT_DEFINE(BGRA8,4) - COLOR_7s_FORMAT_DEFINE(ABGR8,4) - - COLOR_6_FORMAT_DEFINE(A2RGB10,4) - COLOR_6_FORMAT_DEFINE(A2BGR10,4) - - COLOR_7F_FORMAT_DEFINE(R16,2) - COLOR_7F_FORMAT_DEFINE(RG16,4) - COLOR_7F_FORMAT_DEFINE(RGB16,6) - COLOR_7F_FORMAT_DEFINE(RGBA16,8) - - COLOR_UIF_FORMAT_DEFINE(R32,4) - COLOR_UIF_FORMAT_DEFINE(RG32,8) - COLOR_UIF_FORMAT_DEFINE(RGB32,12) - COLOR_UIF_FORMAT_DEFINE(RGBA32,16) - - COLOR_UIF_FORMAT_DEFINE(R64,8) - COLOR_UIF_FORMAT_DEFINE(RG64,16) - COLOR_UIF_FORMAT_DEFINE(RGB64,24) - COLOR_UIF_FORMAT_DEFINE(RGBA64,32) - - COLOR_FORMAT_DEFINE(B10GR11UF, 4,UFLOAT), - COLOR_FORMAT_DEFINE(E5BGR9UF, 4,UFLOAT), - - DEPTH_FORMAT_DEFINE(D16UN, 2,UNORM), - DEPTH_FORMAT_DEFINE(X8_D24UN, 4,UNORM), - DEPTH_FORMAT_DEFINE(D32F, 4,SFLOAT), - STENCIL_FORMAT_DEFINE(S8U, 1,UINT), - DEPTH_STENCIL_FORMAT_DEFINE(D16UN_S8U, 3,UNORM,UINT), - DEPTH_STENCIL_FORMAT_DEFINE(D24UN_S8U, 4,UNORM,UINT), - DEPTH_STENCIL_FORMAT_DEFINE(D32F_S8U, 5,SFLOAT,UINT), - - S3TC_Us_FORMAT_DEFINE( BC1_RGB), - S3TC_Us_FORMAT_DEFINE( BC1_RGBA), - S3TC_Us_FORMAT_DEFINE( BC2), - S3TC_Us_FORMAT_DEFINE( BC3), - S3TC_NORM_FORMAT_DEFINE( BC4), - S3TC_NORM_FORMAT_DEFINE( BC5), - S3TC_FLOAT_FORMAT_DEFINE( BC6), - S3TC_Us_FORMAT_DEFINE( BC7), - - ETC2_FORMAT_DEFINE(RGB8), - ETC2_FORMAT_DEFINE(RGB8A1), - ETC2_FORMAT_DEFINE(RGBA8), - - EAC_FORMAT_DEFINE(R11), - EAC_FORMAT_DEFINE(RG11), - - ASTC_FORMAT_DEFINE(4x4), - ASTC_FORMAT_DEFINE(5x4), - ASTC_FORMAT_DEFINE(5x5), - ASTC_FORMAT_DEFINE(6x5), - ASTC_FORMAT_DEFINE(6x6), - ASTC_FORMAT_DEFINE(8x5), - ASTC_FORMAT_DEFINE(8x6), - ASTC_FORMAT_DEFINE(8x8), - ASTC_FORMAT_DEFINE(10x5), - ASTC_FORMAT_DEFINE(10x6), - ASTC_FORMAT_DEFINE(10x8), - ASTC_FORMAT_DEFINE(10x10), - ASTC_FORMAT_DEFINE(12x10), - ASTC_FORMAT_DEFINE(12x12), - - YUV_FORMAT_COMBO(8), - - COLOR_FORMAT_DEFINE(R10X6UN,2,UNORM), - COLOR_FORMAT_DEFINE(RG10X6UN,4,UNORM), - COLOR_FORMAT_DEFINE(RGBA10X6UN,8,UNORM), - - YUV_FORMAT_COMBO(10), - - COLOR_FORMAT_DEFINE(R12X4UN,2,UNORM), - COLOR_FORMAT_DEFINE(RG12X4UN,4,UNORM), - COLOR_FORMAT_DEFINE(RGBA12X4UN,8,UNORM), - - YUV_FORMAT_COMBO(12), - YUV_FORMAT_COMBO(16), - - PVRTC_FORMAT_DEFINE(1,2), - PVRTC_FORMAT_DEFINE(1,4), - PVRTC_FORMAT_DEFINE(2,2), - PVRTC_FORMAT_DEFINE(2,4) - }; - - const VulkanFormat *vulkan_yuv_format_list=vulkan_color_format_list+FMT_RANGE_SIZE; - const VulkanFormat *vulkan_pvrtc_format_list=vulkan_color_format_list+FMT_RANGE_SIZE+FMT_YUV_RANGE_SIZE; - - constexpr size_t TEXTURE_FORMAT_COUNT=sizeof(vulkan_color_format_list)/sizeof(VulkanFormat); - -#ifdef _DEBUG - uint32_t GetStrideBytesByFormat(const VkFormat &format) - { - if(format<=VK_FORMAT_UNDEFINED) - return 0; - - if(format>VK_FORMAT_END_RANGE) - { - if(format==VK_FORMAT_R10X6_UNORM_PACK16)return 2; - if(format==VK_FORMAT_R10X6G10X6_UNORM_2PACK16)return 4; - if(format==VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16)return 8; - - if(format==VK_FORMAT_R12X4_UNORM_PACK16)return 2; - if(format==VK_FORMAT_R12X4G12X4_UNORM_2PACK16)return 4; - if(format==VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16)return 8; - - return 0; - } - - if(format>=VK_FORMAT_BC1_RGB_UNORM_BLOCK)return 0; - - if(format==VK_FORMAT_R4G4_UNORM_PACK8)return 1; - if(format<=VK_FORMAT_A1R5G5B5_UNORM_PACK16)return 2; - if(format<=VK_FORMAT_R8_SRGB)return 1; - if(format<=VK_FORMAT_R8G8_SRGB)return 2; - if(format<=VK_FORMAT_B8G8R8_SRGB)return 3; - if(format<=VK_FORMAT_A2B10G10R10_SINT_PACK32)return 4; - if(format<=VK_FORMAT_R16_SFLOAT)return 2; - if(format<=VK_FORMAT_R16G16_SFLOAT)return 4; - if(format<=VK_FORMAT_R16G16B16_SFLOAT)return 6; - if(format<=VK_FORMAT_R16G16B16A16_SFLOAT)return 8; - if(format<=VK_FORMAT_R32_SFLOAT)return 4; - if(format<=VK_FORMAT_R32G32_SFLOAT)return 8; - if(format<=VK_FORMAT_R32G32B32_SFLOAT)return 12; - if(format<=VK_FORMAT_R32G32B32A32_SFLOAT)return 16; - if(format<=VK_FORMAT_R64_SFLOAT)return 8; - if(format<=VK_FORMAT_R64G64_SFLOAT)return 16; - if(format<=VK_FORMAT_R64G64B64_SFLOAT)return 24; - if(format<=VK_FORMAT_R64G64B64A64_SFLOAT)return 32; - if(format<=VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)return 4; - if(format==VK_FORMAT_D16_UNORM)return 2; - if(format<=VK_FORMAT_D32_SFLOAT)return 4; - if(format==VK_FORMAT_S8_UINT)return 1; - if(format==VK_FORMAT_D16_UNORM_S8_UINT)return 3; - if(format==VK_FORMAT_D24_UNORM_S8_UINT)return 4; - if(format==VK_FORMAT_D32_SFLOAT_S8_UINT)return 5; - - return(0); - } -#endif//_DEBUG -}//namespace - -#ifdef _DEBUG -bool CheckStrideBytesByFormat() -{ - const VulkanFormat *vcf=vulkan_color_format_list; - - for(uint32_t i=VK_FORMAT_BEGIN_RANGE;i<=VK_FORMAT_END_RANGE;i++) - { - if(vcf->format!=i)return(false); - if(vcf->bytes!=GetStrideBytesByFormat((VkFormat)i))return(false); - - ++vcf; - } - - return(true); -} -#endif//_DEBUG - -const VulkanFormat *GetVulkanFormatList(uint32_t &count) -{ - count=sizeof(vulkan_color_format_list)/sizeof(VulkanFormat); - - return vulkan_color_format_list; -} - -const VulkanFormat *GetVulkanFormat(const VkFormat &format) -{ - if(format<=VK_FORMAT_BEGIN_RANGE)return(nullptr); - - if(format<=VK_FORMAT_END_RANGE) - return vulkan_color_format_list+format; - - if(format>=FMT_YUV_BEGIN_RANGE&&format<=FMT_YUV_END_RANGE) - return vulkan_yuv_format_list+format-FMT_YUV_BEGIN_RANGE; - - if(format>=FMT_PVRTC_BEGIN_RANGE&&format<=FMT_PVRTC_END_RANGE) - return vulkan_pvrtc_format_list+format-FMT_PVRTC_BEGIN_RANGE; - - return nullptr; -} - -const VulkanFormat *GetVulkanFormat(const char *fmt_name) -{ - if(!fmt_name||!*fmt_name)return(nullptr); - - const VulkanFormat *vcf=vulkan_color_format_list; - - for(uint32_t i=VK_FORMAT_BEGIN_RANGE;i<=VK_FORMAT_END_RANGE;i++) - { - if(hgl::strcmp(fmt_name,vcf->name)==0) - return vcf; - - ++vcf; - } - - return(nullptr); -} -VK_NAMESPACE_END diff --git a/src/SceneGraph/AABox.cpp b/src/SceneGraph/AABox.cpp deleted file mode 100644 index d9310b71..00000000 --- a/src/SceneGraph/AABox.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -namespace hgl -{ - namespace graph - { - AABox::AABox(void) - { - corner[0] = 0; - corner[1] = 0; - corner[2] = 0; - - length[0] = 1.0f; - length[1] = 1.0f; - length[2] = 1.0f; - } - - Vector3f AABox::GetVertexP(const Vector3f &normal) const - { - Vector3f res = corner; - - if (normal[0] > 0)res[0] += length[0]; - if (normal[1] > 0)res[1] += length[1]; - if (normal[2] > 0)res[2] += length[2]; - - return(res); - } - - Vector3f AABox::GetVertexN(const Vector3f &normal) const - { - Vector3f res = corner; - - if (normal[0] < 0)res[0] += length[0]; - if (normal[1] < 0)res[1] += length[1]; - if (normal[2] < 0)res[2] += length[2]; - - return(res); - } - - void AABox::operator+=(const AABox &box) - { - corner[0]=hgl_min(corner[0],box.corner[0]); - corner[1]=hgl_min(corner[1],box.corner[1]); - corner[2]=hgl_min(corner[2],box.corner[2]); - - corner_max[0]=hgl_max(corner_max[0],box.corner_max[0]); - corner_max[1]=hgl_max(corner_max[1],box.corner_max[1]); - corner_max[2]=hgl_max(corner_max[2],box.corner_max[2]); - - length=corner_max-corner; - - center=(corner+corner_max)/2.0f; - } - }//namespace graph -}//namespace hgl diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 96abcae6..03f8436d 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -10,11 +10,7 @@ SET(SG_VERTEX_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexBufferCreater.h SOURCE_GROUP("VertexBuffer" FILES ${SG_VERTEX_SOURCE}) -SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Coordinate.h - ${ROOT_INCLUDE_PATH}/hgl/graph/AABox.h - ${ROOT_INCLUDE_PATH}/hgl/graph/WorldMatrix.h - ${ROOT_INCLUDE_PATH}/hgl/graph/Camera.h - ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h +SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h ${ROOT_INCLUDE_PATH}/hgl/graph/SceneDB.h ${ROOT_INCLUDE_PATH}/hgl/graph/SceneNode.h ${ROOT_INCLUDE_PATH}/hgl/graph/SceneOrient.h @@ -26,10 +22,7 @@ SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Coordinate.h #${ROOT_INCLUDE_PATH}/hgl/graph/Spline.h ) -SET(SCENE_GRAPH_SOURCE Coordinate.cpp - AABox.cpp - Camera.cpp - RenderList.cpp +SET(SCENE_GRAPH_SOURCE RenderList.cpp SceneDB.cpp SceneNode.cpp SceneOrient.cpp diff --git a/src/SceneGraph/Camera.cpp b/src/SceneGraph/Camera.cpp deleted file mode 100644 index 97a52ce2..00000000 --- a/src/SceneGraph/Camera.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -namespace hgl -{ - namespace graph - { - template - inline Matrix4f LookAt(const V &eye,const V &target,const V &up) - { - V forward=target-eye; - - normalize(forward); - - V side=cross(forward,up); - - normalize(side); - - V nup=cross(side,forward); - - Matrix4f result( side.x, side.y, side.z, 1.0f, - nup.x, nup.y, nup.z, 1.0f, - -forward.x, -forward.y, -forward.z/2.0f, 1.0f, - 0.0f, 0.0f, 0.0f, 1.0f); - // ^^^^^^ - // 某些引擎这里为0.5,那是因为他们是 -1 to 1 的Z值设定,而我们是0 to 1,所以这里不用乘 - // 同理,camera的znear为接近0的正数,zfar为一个较大的正数,默认使用16/256 - - return result*translate(-eye.xyz()); - } - - void Camera::Refresh() - { - if(type==CameraType::Perspective) - matrix.projection=perspective(fov,width/height,znear,zfar); - else - matrix.projection=ortho(width,height,znear,zfar); //这个算的不对 - - matrix.inverse_projection=matrix.projection.Inverted(); - - matrix.modelview=hgl::graph::LookAt(eye,center,up_vector); - //matrix.modelview=Matrix4f::LookAt(eye.xyz(),center.xyz(),forward_vector.xyz(),up_vector.xyz(),up_vector.xyz()); - matrix.inverse_modelview=matrix.modelview.Inverted(); - - matrix.mvp=matrix.projection*matrix.modelview; - matrix.inverse_map=matrix.mvp.Inverted(); - - //注意: C++中要 projection * model_view * local_to_world * position - //而GLSL中要 position * local_to_world * model_view * projection - - matrix.ortho=ortho(width,height); - - matrix.view_pos=eye; - matrix.resolution.x=width; - matrix.resolution.y=height; - - frustum.SetVerticalFovAndAspectRatio(DegToRad(fov),width/height); - frustum.SetViewPlaneDistances(znear,zfar); - } - }//namespace graph -}//namespace hgl diff --git a/src/SceneGraph/Coordinate.cpp b/src/SceneGraph/Coordinate.cpp deleted file mode 100644 index 6b545228..00000000 --- a/src/SceneGraph/Coordinate.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include - -namespace hgl -{ - namespace graph - { - const Matrix4f GetOpenGL2VulkanMatrix() - { - const Matrix4f MATRIX_FROM_OPENGL_COORDINATE=scale(1,-1,1)*rotate(HGL_RAD_90,Vector3f(1,0,0)); - - return MATRIX_FROM_OPENGL_COORDINATE; - } - }//namespace graph -}//namespace hgl