From d5d6a6bc745cc3f9ca1e6d3d0d801a7390509fba Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Thu, 21 Sep 2023 17:15:36 +0800 Subject: [PATCH] added example that it's texture_quad.cpp. --- example/Vulkan/CMakeLists.txt | 13 +-- example/Vulkan/indices_rect.cpp | 2 +- example/Vulkan/texture_quad.cpp | 152 ++++++++++++++++++++++++++++++++ res | 2 +- 4 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 example/Vulkan/texture_quad.cpp diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index 6c753410..5dd81157 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -10,18 +10,19 @@ set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/${group}") endmacro() -CreateProject("Basic" 01_draw_triangle_in_NDC first_triangle.cpp) -CreateProject("Basic" 02_draw_triangle_use_UBO second_triangle.cpp) -CreateProject("Basic" 03_AutoInstance third_triangle.cpp) -CreateProject("Basic" 04_AutoMergeMaterialInstance fourth_triangle.cpp) +CreateProject("Basic" 01_draw_triangle_in_NDC first_triangle.cpp) +CreateProject("Basic" 02_draw_triangle_use_UBO second_triangle.cpp) +CreateProject("Basic" 03_auto_instance third_triangle.cpp) +CreateProject("Basic" 04_auto_merge_material_instance fourth_triangle.cpp) #CreateProject("Basic" FragCoord FragCoordTest.cpp) #CreateProject("Basic" indices_rect indices_rect.cpp) #CreateProject("Basic" FullScreenTriangle FullScreenTriangle.cpp) #CreateProject("Basic" InstanceTriangle InstanceTriangle.cpp) -CreateProject("Texture" 01_TextureFormat TextureFormat.cpp) -#CreateProject("Texture" texture_rect texture_rect.cpp) +CreateProject("Texture" 05_texture_format TextureFormat.cpp) +CreateProject("Texture" 06_texture_quad texture_quad.cpp) +CreateProject("Texture" 07_texture_rect texture_rect.cpp) #CreateProject("Texture" HQFilterTexture HQFilterTexture.cpp) #CreateProject(06.Geometry2D Geometry2D.cpp) diff --git a/example/Vulkan/indices_rect.cpp b/example/Vulkan/indices_rect.cpp index fff2beb2..447a7397 100644 --- a/example/Vulkan/indices_rect.cpp +++ b/example/Vulkan/indices_rect.cpp @@ -55,7 +55,7 @@ private: } bool InitVBO() - { + { auto primitive=db->CreatePrimitive(VERTEX_COUNT); if(!primitive)return(false); diff --git a/example/Vulkan/texture_quad.cpp b/example/Vulkan/texture_quad.cpp new file mode 100644 index 00000000..a1631583 --- /dev/null +++ b/example/Vulkan/texture_quad.cpp @@ -0,0 +1,152 @@ +// texture quad +// 画一个带纹理的四边形 + +#include"VulkanAppFramework.h" +#include +#include +#include +#include +#include +#include + +using namespace hgl; +using namespace hgl::graph; + +VK_NAMESPACE_BEGIN +Texture2D *CreateTexture2DFromFile(GPUDevice *device,const OSString &filename); +VK_NAMESPACE_END + +constexpr uint32_t SCREEN_WIDTH=256; +constexpr uint32_t SCREEN_HEIGHT=256; + +constexpr uint32_t VERTEX_COUNT=4; + +constexpr float position_data[VERTEX_COUNT][2]= +{ + {-1, -1}, + { 1, -1}, + {-1, 1}, + { 1, 1} +}; + +constexpr float tex_coord_data[VERTEX_COUNT][2]= +{ + {0,0}, + {1,0}, + {0,1}, + {1,1} +}; + +constexpr float color_data[VERTEX_COUNT][4]= +{ + {1,0,0,1}, + {1,1,0,1}, + {0,1,0,1}, + {0,1,1,1} +}; + +constexpr uint32_t INDEX_COUNT=6; + +constexpr uint16 index_data[INDEX_COUNT]= +{ + 0,1,3, + 0,3,2 +}; + +class TestApp:public VulkanApplicationFramework +{ +private: + +// Texture2D * texture =nullptr; +// Sampler * sampler =nullptr; + MaterialInstance * material_instance =nullptr; + Renderable * render_obj =nullptr; + Pipeline * pipeline =nullptr; + +private: + + bool InitMaterial() + { + mtl::Material2DCreateConfig cfg(device->GetDeviceAttribute(),"VertexColor2d"); + + cfg.coordinate_system=CoordinateSystem2D::NDC; + cfg.local_to_world=false; + + AutoDelete mci=mtl::CreateVertexColor2D(&cfg); + + material_instance=db->CreateMaterialInstance(mci); + + if(!material_instance) + return(false); + +// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d")); + pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::Triangles); //等同上一行,为Framework重载,默认使用swapchain的render target + + if(!pipeline) + return(false); + + //texture=db->LoadTexture2D(OS_TEXT("res/image/lena.Tex2D"),true); + //if(!texture)return(false); + + //sampler=db->CreateSampler(); + + //if(!material_instance->BindImageSampler(DescriptorSetType::Value,"tex",texture,sampler))return(false); + + return(true); + } + + bool InitVBO() + { + RenderablePrimitiveCreater rpc(db,VERTEX_COUNT); + + if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data))return(false); + if(!rpc.SetVBO(VAN::Color, VF_V4F, color_data ))return(false); + + if(!rpc.SetIBO(IndexType::U16,index_data,INDEX_COUNT))return(false); + + render_obj=rpc.Create(material_instance,pipeline); + return(render_obj); + } + +public: + + bool Init() + { + if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) + return(false); + + if(!InitMaterial()) + return(false); + + if(!InitVBO()) + return(false); + + BuildCommandBuffer(render_obj); + + return(true); + } + + void Resize(int w,int h)override + { + VulkanApplicationFramework::Resize(w,h); + + BuildCommandBuffer(render_obj); + } +};//class TestApp:public VulkanApplicationFramework + +int main(int,char **) +{ +#ifdef _DEBUG + if(!CheckStrideBytesByFormat()) + return 0xff; +#endif// + + TestApp app; + + if(!app.Init()) + return(-1); + + while(app.Run()); + + return 0; +} diff --git a/res b/res index 008dbd53..dcb47143 160000 --- a/res +++ b/res @@ -1 +1 @@ -Subproject commit 008dbd5353e6afe7add287333cbda1b5c5fffdec +Subproject commit dcb47143e5ff4e070bec7db33d35b15b7f0f82f7