diff --git a/CMSceneGraph b/CMSceneGraph index ba8cc189..ecbb0682 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit ba8cc1897ebcf0e826a1e24d6652596afc9eccde +Subproject commit ecbb0682a2c5b33348431d44e64b3a4b775829ee diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index e13901e7..6aeaafd2 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -1,4 +1,4 @@ -锘縨acro(CreateProject name) +锘縨acro(CreateProject group name) add_executable(${name} ${ARGN} ${VULKAN_APP_FRAMEWORK}) target_link_libraries(${name} ${ULRE}) @@ -7,55 +7,43 @@ set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor") ENDIF() - set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan") + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/${group}") endmacro() -macro(CreateQtProject name) - add_executable(${name} ${ARGN} VulkanAppFramework.h) +CreateProject("Basic" 1st_triangle first_triangle.cpp) +CreateProject("Basic" 2nd_triangle second_triangle.cpp) +CreateProject("Basic" FragCoord FragCoordTest.cpp) +CreateProject("Basic" indices_rect indices_rect.cpp) +CreateProject("Basic" FullScreenTriangle FullScreenTriangle.cpp) +CreateProject("Basic" InstanceTriangle InstanceTriangle.cpp) - set(IDENTIFIER "com.hyzgame.example") - - target_link_libraries(${name} ${ULRE} Qt5::Core Qt5::Gui Qt5::Widgets) - - IF(MSVC) - set_target_properties(${name} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${ULRE_RUNTIME_PATH}) - ENDIF() - - set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan") -endmacro() - -CreateProject(00.1st_triangle first_triangle.cpp) -CreateProject(01.2nd_triangle second_triangle.cpp) -CreateProject(02.FragCoord FragCoordTest.cpp) -CreateProject(03.indices_rect indices_rect.cpp) -CreateProject(04.FullScreenTriangle FullScreenTriangle.cpp) - -CreateProject(05.TextureFormat TextureFormat.cpp) -CreateProject(06.texture_rect texture_rect.cpp) -#CreateProject(05.HQFilterTexture HQFilterTexture.cpp) +CreateProject("Texture" TextureFormat TextureFormat.cpp) +CreateProject("Texture" texture_rect texture_rect.cpp) +#CreateProject("Texture" HQFilterTexture HQFilterTexture.cpp) #CreateProject(06.Geometry2D Geometry2D.cpp) -CreateProject(07.Geometry3D Geometry3D.cpp) -CreateProject(08.SceneTree SceneTree.cpp) + +CreateProject("Geometry2D" RectanglePrimitive RectanglePrimitive.cpp) +CreateProject("Tile" DrawTile DrawTile.cpp) +CreateProject("Tile" DrawText DrawText.cpp) + +CreateProject("Geometry3D " Geometry3D Geometry3D.cpp) + +CreateProject("Scene" SceneTree SceneTree.cpp) #CreateProject(09.LoadStaticMesh LoadStaticMesh.cpp LoadScene.cpp) -CreateProject(10.InlineGeometryScene InlineGeometryScene.cpp) -CreateProject(11.SkyColor SkyColor.cpp) -CreateProject(11.Atmosphere Atmosphere.cpp) +CreateProject("Scene" InlineGeometryScene InlineGeometryScene.cpp) -CreateProject(12.RectanglePrimitive RectanglePrimitive.cpp) +CreateProject("Scene/Sky" SkyColor SkyColor.cpp) +CreateProject("Scene/Sky" Atmosphere Atmosphere.cpp) -CreateProject(13.DrawTile DrawTile.cpp) - -CreateProject(14.DrawText DrawText.cpp) - -CreateProject(15.OffscreenRender OffscreenRender.cpp) +CreateProject("Advanced Rendering" OffscreenRender OffscreenRender.cpp) #CreateProject(12.PBRBasic PBRBasic.cpp) #CreateProject(12.Deferred Deferred.cpp) -CreateProject(16.DeferredRender DeferredRender.cpp) +CreateProject("AdvancedRendering" DeferredRender DeferredRender.cpp) #CreateProject(14.AutoMaterial auto_material.cpp) -CreateProject(17.Cubemap Cubemap.cpp) -CreateProject(17.EquirectangularMap EquirectangularMap.cpp) -CreateProject(18.RayPicking RayPicking.cpp) -CreateProject(19.InstanceCube InstanceCube.cpp) -CreateProject(20.TerrainSimple TerrainSimple.cpp) \ No newline at end of file +CreateProject("Texture" Cubemap Cubemap.cpp) +CreateProject("Texture" EquirectangularMap EquirectangularMap.cpp) +CreateProject("Picking" RayPicking RayPicking.cpp) + +CreateProject("Landscape" TerrainSimple TerrainSimple.cpp) diff --git a/example/Vulkan/InstanceCube.cpp b/example/Vulkan/InstanceCube.cpp deleted file mode 100644 index 9e4ad73b..00000000 --- a/example/Vulkan/InstanceCube.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// Instance Cube - -// 基本的Instance绘制测试用例 - diff --git a/example/Vulkan/InstanceTriangle.cpp b/example/Vulkan/InstanceTriangle.cpp new file mode 100644 index 00000000..d88321e2 --- /dev/null +++ b/example/Vulkan/InstanceTriangle.cpp @@ -0,0 +1,139 @@ +锘// Instance Triangle + +// 鍩烘湰鐨処nstance缁樺埗娴嬭瘯鐢ㄤ緥,涓嶄娇鐢ㄥ満鏅爲 + +#include"VulkanAppFramework.h" +#include +#include +#include + +using namespace hgl; +using namespace hgl::graph; + +constexpr uint32_t SCREEN_WIDTH=1280; +constexpr uint32_t SCREEN_HEIGHT=720; + +class TestApp:public VulkanApplicationFramework +{ +private: + + double start_time; + + MaterialInstance * material_instance =nullptr; + Renderable * renderable_object =nullptr; + RenderableInstance *render_instance =nullptr; + + Pipeline * pipeline =nullptr; + +public: + + TestApp() + { + start_time=GetDoubleTime(); + } + + ~TestApp()=default; + +private: + + bool InitMaterial() + { + material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/Vertex2DColor")); + + if(!material_instance) + return(false); + + pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::Triangles); + + return pipeline; + } + + bool InitUBO() + { + color_material.diffuse.Set(1,1,1); + color_material.abiment.Set(0.25,0.25,0.25); + + ubo_color=db->CreateUBO(sizeof(color_material),&color_material); + if(!ubo_color)return(false); + + sun_direction=normalized(Vector3f(rand(),rand(),rand())); + + ubo_sun=db->CreateUBO(sizeof(sun_direction),&sun_direction); + if(!ubo_sun)return(false); + + { + MaterialParameters *mp=material_instance->GetMP(DescriptorSetsType::Value); + + if(!mp)return(false); + + mp->BindUBO("material",ubo_color); + mp->BindUBO("sun",ubo_sun); + + mp->Update(); + } + + BindCameraUBO(material_instance); + return(true); + } + + bool InitRenderable() + { + CubeCreateInfo cci; + + cci.tangent=false; + cci.tex_coord=false; + + renderable_object=CreateRenderableCube(db,material_instance->GetVAB(),&cci); + + if(!renderable_object) + return(false); + + render_instance=db->CreateRenderableInstance(renderable_object,material_instance,pipeline); + + if(!render_instance) + return(false); + + return(true); + } + +public: + + bool Init() + { + if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) + return(false); + + if(!InitMaterial()) + return(false); + + if(!InitUBO()) + return(false); + + if(!InitRenderable()) + return(false); + + if(!VulkanApplicationFramework::BuildCommandBuffer(render_instance)) + return(false); + + return(true); + } + + void Resize(int w,int h)override + { + VulkanApplicationFramework::Resize(w,h); + + VulkanApplicationFramework::BuildCommandBuffer(render_instance); + } +};//class TestApp:public VulkanApplicationFramework + +int main(int,char **) +{ + TestApp app; + + if(!app.Init()) + return(-1); + + while(app.Run()); + + return 0; +}