From d35f7acddc9bb9a6f37719b1244ddb01c9d58f2a Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Sun, 5 Nov 2023 11:47:22 +0100 Subject: [PATCH] Got a bit further --- res/shaders/Placeholder.json | 15 +++++++++++++++ src/Editor/Asset/MaterialLoader.cpp | 2 +- src/Editor/Asset/MeshLoader.cpp | 1 + src/Editor/main.cpp | 3 +++ src/Engine/Graphics/Initializer.h | 2 +- src/Engine/Graphics/StaticMeshVertexData.cpp | 10 +++++----- src/Engine/Graphics/Vulkan/Buffer.cpp | 2 +- src/Engine/Graphics/Vulkan/Graphics.cpp | 8 +++----- src/Engine/Graphics/Vulkan/Graphics.h | 2 +- src/Engine/Graphics/Vulkan/Initializer.h | 5 ----- src/Engine/Material/MaterialInstance.cpp | 2 +- 11 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 res/shaders/Placeholder.json diff --git a/res/shaders/Placeholder.json b/res/shaders/Placeholder.json new file mode 100644 index 0000000..89e2329 --- /dev/null +++ b/res/shaders/Placeholder.json @@ -0,0 +1,15 @@ +{ + "name": "TerrainMaterial", + "params": { + }, + "code": [ + { + "exp": "BRDF", + "profile": "BlinnPhong", + "values": { + "baseColor": "float3(0, 1, 0)", + "normal": "float3(0, 0, 1)" + } + } + ] +} \ No newline at end of file diff --git a/src/Editor/Asset/MaterialLoader.cpp b/src/Editor/Asset/MaterialLoader.cpp index c1bcc6a..8cb354a 100644 --- a/src/Editor/Asset/MaterialLoader.cpp +++ b/src/Editor/Asset/MaterialLoader.cpp @@ -17,7 +17,7 @@ MaterialLoader::MaterialLoader(Gfx::PGraphics graphics) { OMaterialAsset placeholderAsset = new MaterialAsset(); import(MaterialImportArgs{ - .filePath = std::filesystem::absolute("./shaders/Placeholder.asset"), + .filePath = std::filesystem::absolute("./shaders/Placeholder.json"), .importPath = "", }, placeholderAsset); AssetRegistry::get().assetRoot->materials[""] = std::move(placeholderAsset); diff --git a/src/Editor/Asset/MeshLoader.cpp b/src/Editor/Asset/MeshLoader.cpp index 4133d6c..6518b33 100644 --- a/src/Editor/Asset/MeshLoader.cpp +++ b/src/Editor/Asset/MeshLoader.cpp @@ -257,6 +257,7 @@ void MeshLoader::loadGlobalMeshes(const aiScene* scene, const Arrayid = id; globalMeshes[meshIndex]->referencedMaterial = materials[mesh->mMaterialIndex]->getMaterial()->instantiate(); globalMeshes[meshIndex]->meshlets = std::move(meshlets); + globalMeshes[meshIndex]->vertexCount = mesh->mNumVertices; } } diff --git a/src/Editor/main.cpp b/src/Editor/main.cpp index 503b6c9..5092f2e 100644 --- a/src/Editor/main.cpp +++ b/src/Editor/main.cpp @@ -11,6 +11,7 @@ #include "Asset/MaterialLoader.h" #include "Asset/FontLoader.h" #include "Asset/AssetImporter.h" +#include "Graphics/StaticMeshVertexData.h" using namespace Seele; using namespace Seele::Editor; @@ -29,6 +30,8 @@ int main() GraphicsInitializer initializer; graphics->init(initializer); + StaticMeshVertexData* vd = StaticMeshVertexData::getInstance(); + vd->init(graphics); PWindowManager windowManager = new WindowManager(); AssetRegistry::init(std::string("C:/Users/Dynamitos/TrackClear/Assets"), graphics); AssetImporter::init(graphics, AssetRegistry::getInstance()); diff --git a/src/Engine/Graphics/Initializer.h b/src/Engine/Graphics/Initializer.h index 8cceb58..4070c90 100644 --- a/src/Engine/Graphics/Initializer.h +++ b/src/Engine/Graphics/Initializer.h @@ -25,7 +25,7 @@ struct GraphicsInitializer , engineName("SeeleEngine") , windowLayoutFile(nullptr) , layers{"VK_LAYER_KHRONOS_validation"} - , instanceExtensions{"VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"} + , instanceExtensions{} , deviceExtensions{"VK_KHR_swapchain"} , windowHandle(nullptr) { diff --git a/src/Engine/Graphics/StaticMeshVertexData.cpp b/src/Engine/Graphics/StaticMeshVertexData.cpp index 67420a4..77f36dc 100644 --- a/src/Engine/Graphics/StaticMeshVertexData.cpp +++ b/src/Engine/Graphics/StaticMeshVertexData.cpp @@ -24,7 +24,7 @@ StaticMeshVertexData* StaticMeshVertexData::getInstance() void StaticMeshVertexData::loadPositions(MeshId id, const Array& data) { uint64 offset = meshOffsets[id]; - assert(offset + data.size() < head); + assert(offset + data.size() <= head); std::memcpy(positionData.data() + offset, data.data(), data.size() * sizeof(Vector)); dirty = true; } @@ -32,7 +32,7 @@ void StaticMeshVertexData::loadPositions(MeshId id, const Array& data) void StaticMeshVertexData::loadTexCoords(MeshId id, const Array& data) { uint64 offset = meshOffsets[id]; - assert(offset + data.size() < head); + assert(offset + data.size() <= head); std::memcpy(texCoordsData.data() + offset, data.data(), data.size() * sizeof(Vector2)); dirty = true; } @@ -40,7 +40,7 @@ void StaticMeshVertexData::loadTexCoords(MeshId id, const Array& data) void StaticMeshVertexData::loadNormals(MeshId id, const Array& data) { uint64 offset = meshOffsets[id]; - assert(offset + data.size() < head); + assert(offset + data.size() <= head); std::memcpy(normalData.data() + offset, data.data(), data.size() * sizeof(Vector)); dirty = true; } @@ -48,7 +48,7 @@ void StaticMeshVertexData::loadNormals(MeshId id, const Array& data) void StaticMeshVertexData::loadTangents(MeshId id, const Array& data) { uint64 offset = meshOffsets[id]; - assert(offset + data.size() < head); + assert(offset + data.size() <= head); std::memcpy(tangentData.data() + offset, data.data(), data.size() * sizeof(Vector)); dirty = true; } @@ -56,7 +56,7 @@ void StaticMeshVertexData::loadTangents(MeshId id, const Array& data) void StaticMeshVertexData::loadBiTangents(MeshId id, const Array& data) { uint64 offset = meshOffsets[id]; - assert(offset + data.size() < head); + assert(offset + data.size() <= head); std::memcpy(biTangentData.data() + offset, data.data(), data.size() * sizeof(Vector)); dirty = true; } diff --git a/src/Engine/Graphics/Vulkan/Buffer.cpp b/src/Engine/Graphics/Vulkan/Buffer.cpp index b68bb98..0b8fac2 100644 --- a/src/Engine/Graphics/Vulkan/Buffer.cpp +++ b/src/Engine/Graphics/Vulkan/Buffer.cpp @@ -392,7 +392,7 @@ void* ShaderBuffer::lock(bool writeOnly) { return dedicatedStagingBuffer->getMappedPointer(); } - return ShaderBuffer::lock(writeOnly); + return Vulkan::Buffer::lock(writeOnly); } void ShaderBuffer::unlock() diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index 8da271c..edda4f0 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -445,7 +445,7 @@ void Graphics::pickPhysicalDevice() { uint32 currentRating = 0; vkGetPhysicalDeviceProperties(dev, &props); - vkGetPhysicalDeviceFeatures2(dev, &features); + vkGetPhysicalDeviceFeatures(dev, &features); if (props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) { std::cout << "found dedicated gpu " << props.deviceName << std::endl; @@ -465,7 +465,7 @@ void Graphics::pickPhysicalDevice() } physicalDevice = bestDevice; vkGetPhysicalDeviceProperties(physicalDevice, &props); - vkGetPhysicalDeviceFeatures2(physicalDevice, &features); + vkGetPhysicalDeviceFeatures(physicalDevice, &features); } void Graphics::createDevice(GraphicsInitializer initializer) @@ -565,7 +565,7 @@ void Graphics::createDevice(GraphicsInitializer initializer) VkDeviceCreateInfo deviceInfo = init::DeviceCreateInfo( queueInfos.data(), (uint32)queueInfos.size(), - &features); + nullptr); VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexing = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, @@ -594,8 +594,6 @@ void Graphics::createDevice(GraphicsInitializer initializer) { descriptorIndexing.pNext = &enabledMeshShaderFeatures; initializer.deviceExtensions.add("VK_EXT_mesh_shader"); - initializer.deviceExtensions.add("VK_KHR_SPIRV_1_4_EXTENSION_NAME"); - initializer.deviceExtensions.add("VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME"); } deviceInfo.enabledExtensionCount = (uint32)initializer.deviceExtensions.size(); deviceInfo.ppEnabledExtensionNames = initializer.deviceExtensions.data(); diff --git a/src/Engine/Graphics/Vulkan/Graphics.h b/src/Engine/Graphics/Vulkan/Graphics.h index fb73da5..db8912b 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.h +++ b/src/Engine/Graphics/Vulkan/Graphics.h @@ -99,7 +99,7 @@ protected: thread_local static OCommandBufferManager transferCommands; thread_local static OCommandBufferManager dedicatedTransferCommands; VkPhysicalDeviceProperties props; - VkPhysicalDeviceFeatures2 features; + VkPhysicalDeviceFeatures features; VkDebugReportCallbackEXT callback; std::mutex viewportLock; Array viewports; diff --git a/src/Engine/Graphics/Vulkan/Initializer.h b/src/Engine/Graphics/Vulkan/Initializer.h index 50d37b5..822451b 100644 --- a/src/Engine/Graphics/Vulkan/Initializer.h +++ b/src/Engine/Graphics/Vulkan/Initializer.h @@ -51,11 +51,6 @@ VkDeviceCreateInfo DeviceCreateInfo( uint32_t queueCount, VkPhysicalDeviceFeatures *features); -VkDeviceCreateInfo DeviceCreateInfo( - VkDeviceQueueCreateInfo* queueInfos, - uint32_t queueCount, - VkPhysicalDeviceFeatures2* features); - VkSwapchainCreateInfoKHR SwapchainCreateInfo( VkSurfaceKHR surface, uint32_t minImageCount, diff --git a/src/Engine/Material/MaterialInstance.cpp b/src/Engine/Material/MaterialInstance.cpp index ad709fe..e04ff90 100644 --- a/src/Engine/Material/MaterialInstance.cpp +++ b/src/Engine/Material/MaterialInstance.cpp @@ -30,7 +30,7 @@ MaterialInstance::MaterialInstance(uint64 id, parameters.reserve(params.size()); for (int i = 0; i < params.size(); ++i) { - Serialization::save(buffer, params[i]); + Serialization::save(buffer, expressions[params[i]]); buffer.rewind(); OShaderParameter param; Serialization::load(buffer, param);