diff --git a/Crafter.Graphics-Mesh.cppm b/Crafter.Graphics-Mesh.cppm index 0a284b0..01e8487 100644 --- a/Crafter.Graphics-Mesh.cppm +++ b/Crafter.Graphics-Mesh.cppm @@ -44,6 +44,7 @@ namespace Crafter { } Mesh(const char* asset) requires(std::same_as) : vertexCount(reinterpret_cast(asset)[0]), indexCount(((reinterpret_cast(asset)[1]) + 63) & ~63), verticies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vertexCount), indicies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, indexCount) { + uint32_t indexCountNoPadding = reinterpret_cast(asset)[1]; const float* verticies = reinterpret_cast(asset+sizeof(std::uint32_t)*2); std::uint32_t counter = 0; @@ -55,16 +56,16 @@ namespace Crafter { counter++; } - memcpy(indicies.value, asset+(sizeof(std::uint32_t)*2)+(vertexCount*sizeof(float)*3), indexCount*sizeof(std::uint32_t)); - for(std::uint32_t i = indexCount; i < indexCount+(indexCount%64); i++) { + memcpy(indicies.value, asset+(sizeof(std::uint32_t)*2)+(vertexCount*sizeof(float)*3), indexCountNoPadding*sizeof(std::uint32_t)); + for(std::uint32_t i = indexCountNoPadding; i < indexCountNoPadding+(indexCountNoPadding%64); i++) { indicies.value[i] = 0;//pad indicies to nearest 64 } } + Mesh(const char* asset) requires(std::same_as) : vertexCount(reinterpret_cast(asset)[0]), indexCount(((reinterpret_cast(asset)[1]) + 63) & ~63), verticies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vertexCount), indicies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, indexCount) { + uint32_t indexCountNoPadding = reinterpret_cast(asset)[1]; const float* verticies = reinterpret_cast(asset+sizeof(std::uint32_t)*2); - std::cout << vertexCount << std::endl; - std::cout << indexCount << std::endl; std::uint32_t counter = 0; for(std::uint32_t i = 0; i < vertexCount*5; i+=5) { this->verticies.value[counter].x = verticies[i]; @@ -75,13 +76,16 @@ namespace Crafter { this->verticies.value[counter].w = 1.0f; counter++; } - memcpy(indicies.value, asset+(sizeof(std::uint32_t)*2)+(vertexCount*sizeof(float)*5), indexCount*sizeof(std::uint32_t)); - for(std::uint32_t i = indexCount; i < indexCount+(indexCount%64); i++) { + memcpy(indicies.value, asset+(sizeof(std::uint32_t)*2)+(vertexCount*sizeof(float)*5), indexCountNoPadding*sizeof(std::uint32_t)); + for(std::uint32_t i = indexCountNoPadding; i < indexCountNoPadding+(indexCountNoPadding%64); i++) { indicies.value[i] = 0;//pad indicies to nearest 64 } } - Mesh(float* heights, uint32_t sizeX, uint32_t sizeZ, float spacing) : vertexCount(sizeX*sizeZ), indexCount(((sizeX-1)*(sizeZ-1))*6), verticies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vertexCount), indicies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, indexCount) { + + + Mesh(float* heights, uint32_t sizeX, uint32_t sizeZ, float spacing) : vertexCount(sizeX*sizeZ), indexCount(((((sizeX-1)*(sizeZ-1))*6)+ 63) & ~63), verticies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vertexCount), indicies(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, indexCount) { + uint32_t indexCountNoPadding = ((sizeX-1)*(sizeZ-1))*6; for (float x = 0; x < sizeX; x++) { for (float z = 0; z < sizeZ; z++) @@ -121,6 +125,9 @@ namespace Crafter { indicies.value[index + 5] = topRightIndex; } } + for(std::uint32_t i = indexCountNoPadding; i < indexCountNoPadding+(indexCountNoPadding%64); i++) { + indicies.value[i] = 0;//pad indicies to nearest 64 + } } }; } diff --git a/Crafter.Graphics-VulkanTexture.cppm b/Crafter.Graphics-VulkanTexture.cppm index 93e1525..dde3f64 100644 --- a/Crafter.Graphics-VulkanTexture.cppm +++ b/Crafter.Graphics-VulkanTexture.cppm @@ -33,7 +33,7 @@ import :VulkanBuffer; namespace Crafter { export template - class VulkanTexture : public Component { + class VulkanTexture { public: VkImage image; VkDeviceMemory imageMemory; @@ -107,11 +107,8 @@ namespace Crafter { VulkanDevice::CHECK_VK_RESULT(vkCreateImageView(VulkanDevice::device, &viewInfo, nullptr, &imageView)); } - static VulkanTexture* FromAsset(const char* asset, VkCommandBuffer cmd) { - std::uint32_t width = reinterpret_cast(asset)[0]; - std::uint32_t height = reinterpret_cast(asset)[1]; - const PixelType* pixels = reinterpret_cast(reinterpret_cast(asset)+2); - return new VulkanTexture(width, height, pixels, cmd); + VulkanTexture(const char* asset, VkCommandBuffer cmd) : VulkanTexture(reinterpret_cast(asset)[0], reinterpret_cast(asset)[1], reinterpret_cast(reinterpret_cast(asset)+2), cmd) { + } private: diff --git a/main.cpp b/main.cpp index 939ce4f..5a8bd33 100644 --- a/main.cpp +++ b/main.cpp @@ -51,8 +51,8 @@ int main() { MeshShader meshShader(&mesh, &camera); Asset asset2; asset2.LoadFull("texture.cras"); - VulkanTexture* txt = VulkanTexture::FromAsset(asset2.entries[0].data.data(), cmd); - TextureShader texShader(txt); + VulkanTexture txt = VulkanTexture(asset2.entries[0].data.data(), cmd); + TextureShader texShader(&txt); DescriptorSet descriptors; EventListener bruhlistener(&descriptors.onDescriptorRefresh, [&meshShader, &texShader, &camera, &descriptors](){ meshShader.WriteDescriptors(&descriptors.set[0]); @@ -60,25 +60,25 @@ int main() { }); meshShader.WriteDescriptors(&descriptors.set[0]); texShader.WriteDescriptors(&descriptors.set[0]); - // MeshShader meshShader2(&mesh, &camera); - // TextureShader texShader2(txt); - // DescriptorSet descriptors2; - // meshShader2.WriteDescriptors(&descriptors2.set[0]); - // texShader2.WriteDescriptors(&descriptors2.set[0]); + MeshShader meshShader2(&mesh, &camera); + TextureShader texShader2(&txt); + DescriptorSet descriptors2; + meshShader2.WriteDescriptors(&descriptors2.set[0]); + texShader2.WriteDescriptors(&descriptors2.set[0]); meshShader.Update(); - //meshShader2.Update(); + meshShader2.Update(); window.FinishInit(); - EventListener listener(&window.onDraw, [&descriptors, &meshShader](VkCommandBuffer cmd){ + EventListener listener(&window.onDraw, [&descriptors, &meshShader, &descriptors2, &meshShader2](VkCommandBuffer cmd){ vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipelineLayout, 0, 2, &descriptors.set[0], 0, NULL); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipeline); VulkanDevice::vkCmdDrawMeshTasksEXTProc(cmd, meshShader.threadCount, 1, 1); - // vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipelineLayout, 0, 2, &descriptors2.set[0], 0, NULL); - // vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipeline); - // VulkanDevice::vkCmdDrawMeshTasksEXTProc(cmd, meshShader2.threadCount, 1, 1); + vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipelineLayout, 0, 2, &descriptors2.set[0], 0, NULL); + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, Pipeline::pipeline); + VulkanDevice::vkCmdDrawMeshTasksEXTProc(cmd, meshShader2.threadCount, 1, 1); }); window.Start();