diff --git a/projects/wobble_bobble/shaders/init_particle_volumes.comp b/projects/wobble_bobble/shaders/init_particle_volumes.comp index e429209837a805d75bf6104b097844eb1db55dd9..be0e0d0610c06cb741728c0082dcf825cebda499 100644 --- a/projects/wobble_bobble/shaders/init_particle_volumes.comp +++ b/projects/wobble_bobble/shaders/init_particle_volumes.comp @@ -41,7 +41,7 @@ void main() { float density = minimal.mass / volume; //volume = minimal.mass / (mass / volume); - mass = density * volume; + //mass = density * volume; } particles[gl_GlobalInvocationID.x].minimal.size = sphere_radius(volume); diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp index a65e93256aaad3ab12d17144a0c1f7c38d0d4d80..5294f1ae4929a29db7b1951225fe52dc442f7a58 100644 --- a/projects/wobble_bobble/src/main.cpp +++ b/projects/wobble_bobble/src/main.cpp @@ -185,8 +185,6 @@ int main(int argc, const char **argv) { true ); - grid.switchLayout(vk::ImageLayout::eGeneral); - vkcv::Image gridCopy = core.createImage( grid.getFormat(), grid.getWidth(), @@ -196,17 +194,14 @@ int main(int argc, const char **argv) { true ); - gridCopy.switchLayout(vk::ImageLayout::eGeneral); - - /* TODO: clear grid via compute shader? std::vector<glm::vec4> grid_vec (grid.getWidth() * grid.getHeight() * grid.getDepth()); for (size_t i = 0; i < grid_vec.size(); i++) { - grid_vec[i] = glm::vec4(0); + grid_vec[i] = glm::vec4(0.0f); } - grid.fill(grid_vec.data()); // FIXME: gets limited by staging buffer size... - */ + grid.fill(grid_vec.data()); + gridCopy.fill(grid_vec.data()); vkcv::SamplerHandle gridSampler = core.createSampler( vkcv::SamplerFilterType::LINEAR, diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp index bde020498e19e3f9bf0667c7182ca13d11f9044f..ae69aa75265e207737fc1dd56b86c5e5df5c1f9c 100644 --- a/src/vkcv/ImageManager.cpp +++ b/src/vkcv/ImageManager.cpp @@ -345,7 +345,7 @@ namespace vkcv { recordImageBarrier(cmdBuffer, transitionBarrier); } - constexpr uint32_t getChannelsByFormat(vk::Format format) { + constexpr uint32_t getBytesPerPixel(vk::Format format) { switch (format) { case vk::Format::eR8Unorm: return 1; @@ -353,6 +353,8 @@ namespace vkcv { return 4; case vk::Format::eR8G8B8A8Unorm: return 4; + case vk::Format::eR32G32B32A32Sfloat: + return 16; default: std::cerr << "Unknown image format" << std::endl; return 4; @@ -379,15 +381,15 @@ namespace vkcv { handle, vk::ImageLayout::eTransferDstOptimal); - uint32_t channels = getChannelsByFormat(image.m_format); const size_t image_size = ( - image.m_width * image.m_height * image.m_depth * channels + image.m_width * image.m_height * image.m_depth * + getBytesPerPixel(image.m_format) ); const size_t max_size = std::min(size, image_size); BufferHandle bufferHandle = m_bufferManager.createBuffer( - BufferType::STAGING, max_size, BufferMemoryType::HOST_VISIBLE, false + BufferType::STAGING, max_size, BufferMemoryType::DEVICE_LOCAL, false ); m_bufferManager.fillBuffer(bufferHandle, data, max_size, 0);