diff --git a/CMCMakeModule b/CMCMakeModule index 7d35df75..e15c5ce0 160000 --- a/CMCMakeModule +++ b/CMCMakeModule @@ -1 +1 @@ -Subproject commit 7d35df757f12b204fd4556669d10b131cc373e3d +Subproject commit e15c5ce039e72b8cc8140b3d4ea363754a4490d7 diff --git a/CMCore b/CMCore index a24e522f..aa7e9a7e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit a24e522ffed4553ec8ccba91e5047672b8a24fa8 +Subproject commit aa7e9a7effd6c830d52cb0ca043348ee6ffa6224 diff --git a/CMSceneGraph b/CMSceneGraph index b1a5811e..543cd58d 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit b1a5811e1d4e0d34c6b43d7ebee5fe04177bb2df +Subproject commit 543cd58d70b60706c58b58ad9189249f27e1a63d diff --git a/example/2dVector/CMakeLists.txt b/example/2dVector/CMakeLists.txt new file mode 100644 index 00000000..32a84bf6 --- /dev/null +++ b/example/2dVector/CMakeLists.txt @@ -0,0 +1,12 @@ +macro(CreateProject name) + add_executable(${name} ${ARGN}) + target_link_libraries(${name} ${ULRE}) + + IF(WIN32) + set_target_properties(${name} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${ULRE_RUNTIME_PATH}) + ENDIF() + + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/2dVector") +endmacro() + +CreateProject(00.line line.cpp) diff --git a/example/2dVector/line.cpp b/example/2dVector/line.cpp new file mode 100644 index 00000000..aec62c58 --- /dev/null +++ b/example/2dVector/line.cpp @@ -0,0 +1,160 @@ +// 0.triangle +// 该范例主要演示直接绘制一个渐变色的三角形 + +#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; + +constexpr uint32_t VERTEX_COUNT=4; + +constexpr float vertex_data[VERTEX_COUNT][2]= +{ + {SCREEN_WIDTH*0.5, SCREEN_HEIGHT*0.25}, + {SCREEN_WIDTH*0.75, SCREEN_HEIGHT*0.75}, + {SCREEN_WIDTH*0.25, SCREEN_HEIGHT*0.75}, + {SCREEN_WIDTH*0.5, SCREEN_HEIGHT*0.25}, +}; + +static Vector4f color(1,1,1,1); + +struct Line2DConfig +{ + float width; + float border; +}; + +static Line2DConfig line_2d_config +{ + 10, + 2.5 +}; + +class TestApp:public VulkanApplicationFramework +{ +private: + + Camera cam; + + vulkan::MaterialInstance * material_instance =nullptr; + vulkan::RenderableInstance *render_instance =nullptr; + vulkan::Buffer * ubo_world_matrix =nullptr; + vulkan::Buffer * ubo_color_material =nullptr; + vulkan::Buffer * ubo_line_config =nullptr; + + vulkan::Pipeline * pipeline =nullptr; + +private: + + bool InitMaterial() + { + material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/Line2D")); + + if(!material_instance) + return(false); + +// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d")); + pipeline=CreatePipeline(material_instance,OS_TEXT("res/pipeline/alpha2d"),Prim::LineStrip); //等同上一行,为Framework重载,默认使用swapchain的render target + + if(!pipeline) + return(false); + + return(true); + } + + vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data) + { + vulkan::Buffer *ubo=db->CreateUBO(size,data); + + if(!ubo) + return(nullptr); + + if(!material_instance->BindUBO(name,ubo)) + { + std::cerr<<"Bind UBO<"< to material failed!"<GetExtent(); + + cam.width=extent.width; + cam.height=extent.height; + + cam.Refresh(); + + ubo_world_matrix =CreateUBO("world", sizeof(WorldMatrix), &cam.matrix); + ubo_color_material =CreateUBO("color_material",sizeof(Vector4f), &color); + ubo_line_config =CreateUBO("line2d_config", sizeof(Line2DConfig), &line_2d_config); + + material_instance->Update(); + return(true); + } + + bool InitVBO() + { + vulkan::Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT); + if(!render_obj)return(false); + + if(!render_obj->Set(VAN::Position, db->CreateVAB(VAF_VEC2,VERTEX_COUNT,vertex_data)))return(false); + + render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); + return(true); + } + +public: + + bool Init() + { + if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) + return(false); + + if(!InitMaterial()) + return(false); + + if(!InitUBO()) + return(false); + + if(!InitVBO()) + return(false); + + BuildCommandBuffer(render_instance); + + return(true); + } + + void Resize(int w,int h)override + { + cam.width=w; + cam.height=h; + + cam.Refresh(); + + ubo_world_matrix->Write(&cam.matrix); + + BuildCommandBuffer(render_instance); + } +};//class TestApp:public VulkanApplicationFramework + +int main(int,char **) +{ + TestApp app; + + if(!app.Init()) + return(-1); + + while(app.Run()); + + return 0; +} diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 1f19bdb7..ee5381c8 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1 +1,4 @@ -add_subdirectory(Vulkan) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common) + +add_subdirectory(Vulkan) +add_subdirectory(2dVector) diff --git a/example/GUI/CMakeLists.txt b/example/GUI/CMakeLists.txt new file mode 100644 index 00000000..8359de68 --- /dev/null +++ b/example/GUI/CMakeLists.txt @@ -0,0 +1,12 @@ +macro(CreateProject name) + add_executable(${name} ${ARGN} VulkanAppFramework.h) + target_link_libraries(${name} ${ULRE}) + + IF(WIN32) + set_target_properties(${name} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${ULRE_RUNTIME_PATH}) + ENDIF() + + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/GUI") +endmacro() + +CreateProject(00.align_test align_test.cpp) diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index 016de3d3..f37ad34f 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -1,5 +1,5 @@ macro(CreateProject name) - add_executable(${name} ${ARGN} VulkanAppFramework.h) + add_executable(${name} ${ARGN}) target_link_libraries(${name} ${ULRE}) IF(WIN32) @@ -44,7 +44,7 @@ CreateProject(14.DrawText DrawText.cpp) IF(SUPPORT_QT_VULKAN) include(QtCommon) -CreateQtProject(14.VulkanQT VulkanQtApp.cpp +CreateQtProject(14.VulkanQT VulkanQtApp.cpp QtVulkanWindow.cpp QtVulkanWindow.h QtVulkanMainWindow.h diff --git a/example/Vulkan/Geometry2D.cpp b/example/Vulkan/Geometry2D.cpp index 1af91939..70ee7d62 100644 --- a/example/Vulkan/Geometry2D.cpp +++ b/example/Vulkan/Geometry2D.cpp @@ -101,12 +101,11 @@ private: if(!material_instance->BindUBO(name,ubo)) { + std::cerr<<"Bind UBO<"< to material failed!"<Add(ubo); - return ubo; } diff --git a/example/Vulkan/auto_material.cpp b/example/Vulkan/auto_material.cpp deleted file mode 100644 index eefa9751..00000000 --- a/example/Vulkan/auto_material.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include - -using namespace hgl; -using namespace hgl::graph; -using namespace hgl::graph::shader; - -SHADER_NAMESPACE_BEGIN -bool CreateDefaultMaterial(); -SHADER_NAMESPACE_END - -int main() -{ - CreateDefaultMaterial(); - - return 0; -} diff --git a/example/Vulkan/ViewModelFramework.h b/example/common/ViewModelFramework.h similarity index 100% rename from example/Vulkan/ViewModelFramework.h rename to example/common/ViewModelFramework.h diff --git a/example/Vulkan/VulkanAppFramework.h b/example/common/VulkanAppFramework.h similarity index 100% rename from example/Vulkan/VulkanAppFramework.h rename to example/common/VulkanAppFramework.h diff --git a/res b/res index dd74b5a9..bab8e147 160000 --- a/res +++ b/res @@ -1 +1 @@ -Subproject commit dd74b5a9b179a3f0202d1cd60fbeaf5851cc173f +Subproject commit bab8e14717bf63dfc01a84e49d46bae9332b2ed1