转移和渲染无关的代码到CMSceneGraph中

This commit is contained in:
hyzboy 2020-06-06 16:37:13 +08:00
parent 043d5608d0
commit 9c5f60f513
16 changed files with 3 additions and 1263 deletions

View File

@ -1,53 +0,0 @@
#ifndef HGL_GRAPH_AABOX_INCLUDE
#define HGL_GRAPH_AABOX_INCLUDE
#include<hgl/math/Math.h>
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

View File

@ -1,138 +0,0 @@
#ifndef HGL_GRAPH_CAMERA_INCLUDE
#define HGL_GRAPH_CAMERA_INCLUDE
#include<hgl/graph/WorldMatrix.h>
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; ///<Z轴上离眼睛的距离(注因znear会参与计算请不要使用0或过于接近0的值)
Vector4f eye; ///<眼睛坐标
Vector4f center; ///<视点坐标
Vector4f up_vector =Vector4f(0,0,1,0); ///<向上量(默认0,0,1)
Vector4f forward_vector =Vector4f(0,1,0,0); ///<向前量(默认0,1,0)
Vector4f right_vector =Vector4f(1,0,0,0); ///<向右量(默认0,0,1)
public:
WorldMatrix matrix;
Frustum frustum;
public:
void Refresh();
void operator = (const Camera &cam)
{
type =cam.type;
width =cam.width;
height =cam.height;
fov =cam.fov;
znear =cam.znear;
zfar =cam.zfar;
eye =cam.eye;
center =cam.center;
up_vector =cam.up_vector;
forward_vector =cam.forward_vector;
right_vector =cam.right_vector;
matrix =cam.matrix;
frustum =cam.frustum;
}
};//struct Camera
/**
*
*/
struct ControlCamera:public Camera
{
protected:
/**
*
* @param move_dist
*/
void Move(const Vector4f &move_dist)
{
eye+=move_dist;
center+=move_dist;
}
/**
*
* @param ang
* @param axis
*/
void Rotate(double ang,Vector4f axis)
{
normalize(axis);
center=eye+(center-eye)*rotate(hgl_ang2rad(ang),axis);
}
/**
*
* @param ang
* @param axis
*/
void WrapRotate(double ang,Vector4f axis)
{
normalize(axis);
eye=center+(eye-center)*rotate(hgl_ang2rad(ang),axis);
}
public: //方法
virtual void Backward(float step=0.01){Move((eye-center)*step/length(eye,center));} ///<向后
virtual void Forward(float step=0.01){Backward(-step);} ///<向前
virtual void Up(float step=0.01){Move(step*up_vector);} ///<向上
virtual void Down(float step=0.01){Up(-step);} ///<向下
virtual void Right(float step=0.01){Move(normalized(cross(center-eye,up_vector))*step);}///<向右
virtual void Left(float step=0.01){Right(-step);} ///<向左
public: //以自身为中心旋转
virtual void VertRotate(float ang=5){Rotate(ang,cross(center-eye,up_vector));} ///<垂直方向前后旋转
virtual void HorzRotate(float ang=5){Rotate(ang,up_vector);} ///<水平方向左右旋转
public: //以目标点为中心旋转
virtual void WrapVertRotate(float ang=5){WrapRotate(ang,cross(center-eye,up_vector));} ///<以目标点为中心上下旋转
virtual void WrapHorzRotate(float ang=5){WrapRotate(ang,up_vector);} ///<以目标点为中心左右旋转
public: //距离
virtual void Distance(float pos) ///<调整距离
{
if(pos==1.0)return;
eye=center+(eye-center)*pos;
}
};//struct ControlCamera
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_CAMERA_INCLUDE

View File

@ -1,72 +0,0 @@
#ifndef HGL_GRAPH_COLOR_SPACE_INCLUDE
#define HGL_GRAPH_COLOR_SPACE_INCLUDE
#include<math.h>
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<typename T>
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<typename T>
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<typename T>
inline const T sRGB2LinearApprox(const T &in)
{
return pow(in,T(SRGB_INVERSE_GAMMA));
}
template<typename T>
inline const T Linear2sRGBApprox(const T &in)
{
return pow(in,SRGB_GAMMA);
}
template<typename T>
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<typename T>
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

View File

@ -1,27 +0,0 @@
#ifndef HGL_GRAPH_COORDINATE_INCLUDE
#define HGL_GRAPH_COORDINATE_INCLUDE
#include<hgl/math/Math.h>
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

View File

@ -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; ///<ntb信息位合集
uint32 bones_number; ///<骨骼数量
public:
MeshFileHeader()
{
memset(this,0,sizeof(MeshFileHeader));
flag[0]='M';
flag[1]='E';
flag[2]='S';
flag[3]='H';
sperator=0x1A;
version=1;
}
};//struct MeshFileHeader
#pragma pack(pop)
struct MeshData
{
VkPrimitiveTopology primitive;
};//
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_MESH_INCLUDE

View File

@ -1,18 +0,0 @@
#ifndef HGL_GRAPH_NTB_INCLUDE
#define HGL_GRAPH_NTB_INCLUDE
#define NTB_BIT_NORMAL (1<<0)
#define NTB_BIT_TANGENT (1<<1)
#define NTB_BIT_BINORMAL (1<<2)
#define NTB_BIT_ALL (NTB_BIT_NORMAL|NTB_BIT_TANGENT|NTB_BIT_BINORMAL)
#define NTB_BIT_COMPRESS_NORMAL (1<<3)
#define NTB_BIT_COMPRESS_TANGENT (1<<4)
#define NTB_BIT_COMPRESS_BINORMAL (1<<5)
#define NTB_BIT_COMPRESS_ALL (NTB_BIT_COMPRESS_NORMAL|NTB_BIT_COMPRESS_TANGENT|NTB_BIT_COMPRESS_BINORMAL)
#define NTB_BIT_COMPRESS_NORMAL_TANGENT (1<<6)
#endif//HGL_GRAPH_NTB_INCLUDE

View File

@ -1,32 +0,0 @@
#ifndef HGL_GRAPH_WORLD_MATRIX_INCLUDE
#define HGL_GRAPH_WORLD_MATRIX_INCLUDE
#include<hgl/math/Math.h>
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

View File

@ -1,408 +0,0 @@
#ifndef HGL_GRAPH_VULKAN_FORMAT_INCLUDE
#define HGL_GRAPH_VULKAN_FORMAT_INCLUDE
#include<hgl/graph/vulkan/VKNamespace.h>
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; ///<Vulkan格式此值保留仅为参考
uint32_t bytes; ///<每象素字节数
char name[16]; ///<名称
TextureCompressType compress_type; ///<压缩类型
VulkanDataType color; ///<颜色数据类型
VulkanDataType depth,stencil; ///<是否含有depth,stencil数据
};
#ifdef _DEBUG
bool CheckStrideBytesByFormat(); ///<检验所有数据类型长度数组是否符合规则
#endif//_DEBUG
const VulkanFormat *GetVulkanFormat(const VkFormat &format);
const VulkanFormat *GetVulkanFormatList(uint32_t &);
inline uint32_t GetStrideByFormat(const VkFormat &format)
{
const VulkanFormat *vcf=GetVulkanFormat(format);
return (vcf?vcf->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

View File

@ -1,10 +0,0 @@
#pragma once
#include<vulkan/vulkan.h>
#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 }}}

View File

@ -1,29 +0,0 @@
#ifndef HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE
#define HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE
#include<hgl/graph/vulkan/VK.h>
#include<hgl/type/BaseString.h>
#include<hgl/type/Map.h>
VK_NAMESPACE_BEGIN
struct ShaderResourceList
{
Map<UTF8String,int> binding_by_name; ///<名字索引
List<uint32_t> 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

View File

@ -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

View File

@ -1,288 +0,0 @@
#include<hgl/graph/vulkan/VKFormat.h>
#include<hgl/type/StrChar.h>
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

View File

@ -1,54 +0,0 @@
#include<hgl/graph/AABox.h>
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

View File

@ -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

View File

@ -1,59 +0,0 @@
#include<hgl/graph/Camera.h>
namespace hgl
{
namespace graph
{
template<typename V>
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

View File

@ -1,14 +0,0 @@
#include<hgl/graph/Coordinate.h>
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