From ac0939faa4c741e598128f37b576f3aa2c968376 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 8 May 2019 00:25:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0JSONTOOL=E7=B1=BB=E5=88=B0?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 1 + example/Vulkan/VulkanAppFramework.h | 4 +- inc/hgl/graph/vulkan/VKDevice.h | 2 +- inc/hgl/type/StdString.h | 4 +- inc/hgl/util/JsonTool.h | 11 +++ src/CMakeLists.txt | 1 + src/RenderDevice/Vulkan/CMakeLists.txt | 4 +- src/RenderDevice/Vulkan/VKDevice.cpp | 13 ++-- .../Vulkan/json/VKPipelineCreateInfo.JSON.cpp | 9 +-- src/Util/CMakeLists.txt | 1 + src/Util/JsonTool.cpp | 72 +++++++++++++++++++ 11 files changed, 100 insertions(+), 22 deletions(-) create mode 100644 inc/hgl/util/JsonTool.h create mode 100644 src/Util/CMakeLists.txt create mode 100644 src/Util/JsonTool.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 18d0ea6c..c0758433 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(3rdpty/NvTriStrip) add_subdirectory(src) SET(ULRE ULRE.Base + ULRE.Util ULRE.RenderDevice.Vulkan ULRE.Platform MathGeoLib diff --git a/example/Vulkan/VulkanAppFramework.h b/example/Vulkan/VulkanAppFramework.h index 8c72fb31..7eae6652 100644 --- a/example/Vulkan/VulkanAppFramework.h +++ b/example/Vulkan/VulkanAppFramework.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include @@ -36,8 +36,8 @@ public: virtual ~VulkanApplicationFramework() { SAFE_CLEAR(shader_manage); + SAFE_CLEAR(win); //win中会删除device,所以必须放在instance前删除 SAFE_CLEAR(inst); - SAFE_CLEAR(win); } virtual bool Init(int w,int h) diff --git a/inc/hgl/graph/vulkan/VKDevice.h b/inc/hgl/graph/vulkan/VKDevice.h index 63489e70..7d15e2ba 100644 --- a/inc/hgl/graph/vulkan/VKDevice.h +++ b/inc/hgl/graph/vulkan/VKDevice.h @@ -26,7 +26,7 @@ class Device private: - void CreateMainBufferAndPass(); + void CreateMainFramebuffer(); private: diff --git a/inc/hgl/type/StdString.h b/inc/hgl/type/StdString.h index a6f1128c..40f99d84 100644 --- a/inc/hgl/type/StdString.h +++ b/inc/hgl/type/StdString.h @@ -12,7 +12,7 @@ inline hgl::OSString ToOSString(const std::string &str) inline std::string ToStdString(const hgl::OSString &str) { - UTF8String u8_str=hgl::to_u8(str); + hgl::UTF8String u8_str=hgl::to_u8(str); return std::string(u8_str.c_str()); } @@ -30,6 +30,6 @@ inline std::string ToStdString(const hgl::OSString &str) inline hgl::UTF8String ToUTF8String(const std::string &str) { - return hgl::UTF8String(str.c_str(),str.size()); + return hgl::UTF8String(str.c_str(),int(str.size())); } diff --git a/inc/hgl/util/JsonTool.h b/inc/hgl/util/JsonTool.h new file mode 100644 index 00000000..d27b3349 --- /dev/null +++ b/inc/hgl/util/JsonTool.h @@ -0,0 +1,11 @@ +#pragma once +#include +#include +#include + +const std::string JsonToString(const Json::Value &jv_root); + +bool ParseJson(Json::Value &root,const char *str,const int size,std::string *error_info); + +bool LoadJson(Json::Value &,const hgl::OSString &filename); +bool SaveJson(Json::Value &,const hgl::OSString &filename); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 152dfc88..cfe1a64c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(Base) +add_subdirectory(Util) add_subdirectory(RenderDevice) add_subdirectory(Platform) diff --git a/src/RenderDevice/Vulkan/CMakeLists.txt b/src/RenderDevice/Vulkan/CMakeLists.txt index 8163931c..767e5d7b 100644 --- a/src/RenderDevice/Vulkan/CMakeLists.txt +++ b/src/RenderDevice/Vulkan/CMakeLists.txt @@ -49,11 +49,11 @@ SET(RENDER_DEVICE_VULKAN_SOURCE VKFormat.cpp VKRenderable.cpp) #SET(RENDER_DEVICE_VULKAN_TOML_SOURCE toml/VKPipelineCreateInfo.TOML.cpp) -#SET(RENDER_DEVICE_VULKAN_JSON_SOURCE json/VKPipelineCreateInfo.JSON.cpp) +SET(RENDER_DEVICE_VULKAN_JSON_SOURCE json/VKPipelineCreateInfo.JSON.cpp) SOURCE_GROUP("Header Files" FILES ${RENDER_DEVICE_VULKAN_HEADER}) SOURCE_GROUP("Source Files" FILES ${RENDER_DEVICE_VULKAN_SOURCE}) -#SOURCE_GROUP("JSON Source Files" FILES ${RENDER_DEVICE_VULKAN_JSON_SOURCE}) +SOURCE_GROUP("JSON Source Files" FILES ${RENDER_DEVICE_VULKAN_JSON_SOURCE}) add_library(ULRE.RenderDevice.Vulkan STATIC ${RENDER_DEVICE_VULKAN_HEADER} ${RENDER_DEVICE_VULKAN_SOURCE} diff --git a/src/RenderDevice/Vulkan/VKDevice.cpp b/src/RenderDevice/Vulkan/VKDevice.cpp index 8a306013..c39739f8 100644 --- a/src/RenderDevice/Vulkan/VKDevice.cpp +++ b/src/RenderDevice/Vulkan/VKDevice.cpp @@ -30,7 +30,9 @@ Device::Device(DeviceAttribute *da) present.waitSemaphoreCount = 0; present.pResults = nullptr; - CreateMainBufferAndPass(); + main_rp=CreateRenderPass(attr->sc_image_views[0]->GetFormat(),attr->depth.view->GetFormat()); + + CreateMainFramebuffer(); } Device::~Device() @@ -45,12 +47,10 @@ Device::~Device() delete attr; } -void Device::CreateMainBufferAndPass() +void Device::CreateMainFramebuffer() { const int sc_count=attr->sc_image_views.GetCount(); - main_rp=CreateRenderPass(attr->sc_image_views[0]->GetFormat(),attr->depth.view->GetFormat()); - for(int i=0;isc_image_views[i],attr->depth.view)); } @@ -58,14 +58,11 @@ void Device::CreateMainBufferAndPass() bool Device::Resize(uint width,uint height) { main_fb.Clear(); - delete main_rp; - main_rp=nullptr; if(!ResizeRenderDevice(attr,width,height)) return(false); - CreateMainBufferAndPass(); - + CreateMainFramebuffer(); return(true); } diff --git a/src/RenderDevice/Vulkan/json/VKPipelineCreateInfo.JSON.cpp b/src/RenderDevice/Vulkan/json/VKPipelineCreateInfo.JSON.cpp index c8534a2f..0582f980 100644 --- a/src/RenderDevice/Vulkan/json/VKPipelineCreateInfo.JSON.cpp +++ b/src/RenderDevice/Vulkan/json/VKPipelineCreateInfo.JSON.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -104,13 +104,8 @@ TOML_END TOML_BEGIN(VkPipelineInputAssemblyStateCreateInfo) { - TOML_INTEGER(topology), - TOML_BOOL(primitiveRestartEnable) -} -TOML_END + Json::Value root; -void SaveToTOML(const OSString &filename,const VkGraphicsPipelineCreateInfo *info) -{ const auto root=toml::table { {"ver",toml::table{{"file",100},{"vulkan",100}}}, diff --git a/src/Util/CMakeLists.txt b/src/Util/CMakeLists.txt new file mode 100644 index 00000000..af7725c9 --- /dev/null +++ b/src/Util/CMakeLists.txt @@ -0,0 +1 @@ +add_library(ULRE.Util STATIC JsonTool.cpp) diff --git a/src/Util/JsonTool.cpp b/src/Util/JsonTool.cpp new file mode 100644 index 00000000..3bafc0be --- /dev/null +++ b/src/Util/JsonTool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include + +using namespace hgl; +using namespace hgl::filesystem; +using namespace std; + +const std::string JsonToString(const Json::Value &jv_root) +{ + Json::StreamWriterBuilder builder; + Json::StreamWriter *writer=builder.newStreamWriter(); + + JSONCPP_OSTRINGSTREAM result; + + writer->write(jv_root,&result); + + delete writer; + + return std::string(result.str()); +} + +bool ParseJson(Json::Value &root,const char *txt,const int size,std::string *error_info) +{ + Json::CharReaderBuilder builder; + Json::CharReader *reader=builder.newCharReader(); + + const bool result=reader->parse(txt,txt+size,&root,error_info); + + delete reader; + + return result; +} + +bool LoadJson(Json::Value &root,const OSString &filename) +{ + char *txt; + int size; + + size=LoadFileToMemory(filename,(void **)&txt); + + if(size<=0) + { + LOG_ERROR(OS_TEXT("load json file failed,filename: ")+filename); + return(false); + } + + bool result; + + std::string error_info; + + result=ParseJson(root,txt,size,&error_info); + delete[] txt; + + if(!result) + { + LOG_ERROR(OS_TEXT("parse json file failed,filename: ")+filename); + return(false); + } + + return(true); +} + +bool SaveJson(Json::Value &root,const OSString &filename) +{ + const std::string txt=JsonToString(root); + + return SaveMemoryToFile(filename,txt.c_str(),txt.size()); +}