From 80b57f51342525ade13e5929987d0b735c7310bc Mon Sep 17 00:00:00 2001 From: HOEGLER Stefan Date: Mon, 9 Mar 2020 19:22:21 +0100 Subject: [PATCH] Fixing pointer up and downcasting --- src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp | 13 +++++++++++++ src/Engine/MinimalEngine.h | 2 +- test/Engine/EngineTest.cpp | 13 ++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp index 1b21e5b..ba1255f 100644 --- a/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp +++ b/src/Engine/Graphics/Vulkan/VulkanDescriptorSets.cpp @@ -42,5 +42,18 @@ void Seele::VulkanPipelineLayout::create() for (size_t i = 0; i < descriptorSetLayouts.size(); ++i) { PVulkanDescriptorLayout layout = descriptorSetLayouts[i].cast(); + layout->create(); + vulkanDescriptorLayouts[i] = layout->getHandle(); } + VkPipelineLayoutCreateInfo createInfo = + init::PipelineLayoutCreateInfo(vulkanDescriptorLayouts.data(), vulkanDescriptorLayouts.size()); + Array vkPushConstants(pushConstants.size()); + for (size_t i = 0; i < pushConstants.size(); i++) + { + vkPushConstants[i].offset = pushConstants[i].offset; + vkPushConstants[i].size = pushConstants[i].size; + vkPushConstants[i].stageFlags = pushConstants[i].stageFlags; + } + createInfo.pushConstantRangeCount = vkPushConstants.size(); + createInfo.pPushConstantRanges = vkPushConstants.data(); } \ No newline at end of file diff --git a/src/Engine/MinimalEngine.h b/src/Engine/MinimalEngine.h index 61bca2c..dd3f000 100644 --- a/src/Engine/MinimalEngine.h +++ b/src/Engine/MinimalEngine.h @@ -111,7 +111,7 @@ namespace Seele { return RefPtr(); } - RefObject* newObject = static_cast*>(object); + RefObject* newObject = (RefObject*)object; RefPtr result(newObject); return result; } diff --git a/test/Engine/EngineTest.cpp b/test/Engine/EngineTest.cpp index 7006305..300da51 100644 --- a/test/Engine/EngineTest.cpp +++ b/test/Engine/EngineTest.cpp @@ -12,8 +12,9 @@ struct TestStruct : data(10) { } - ~TestStruct() + virtual ~TestStruct() { + data = 15; } uint32 data; }; @@ -33,7 +34,16 @@ BOOST_AUTO_TEST_CASE(basic_refcount) struct DerivedStruct : public TestStruct { + DerivedStruct() + :data2(20) + { + } + ~DerivedStruct() + { + data2 = 30; + } + uint32 data2; }; BOOST_AUTO_TEST_CASE(inheritance_cast) @@ -46,6 +56,7 @@ BOOST_AUTO_TEST_CASE(inheritance_cast) backCast = base.cast(); } BOOST_REQUIRE_EQUAL(backCast->data, 10); + BOOST_REQUIRE_EQUAL(backCast->data2, 20); } BOOST_AUTO_TEST_CASE(unique_ptr)