diff --git a/src/Main.cpp b/src/Main.cpp index 82e3657..3570c24 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -8,7 +8,10 @@ #include -constexpr int PARTICLE_COUNT = 64 * 5000; +constexpr int WORK_GROUP_SIZE = 64; +constexpr int PARTICLE_COUNT = WORK_GROUP_SIZE * 1000; + +constexpr int SWAP_INTERVAL = 60; class Timer { public: @@ -51,6 +54,7 @@ static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, i if (key == GLFW_KEY_R) { s_ComputeShader = ReloadComputeShader(s_ComputeShader, s_ComputeShaderPath); s_GraphicsShader = ReloadGraphicsShader(s_GraphicsShader, s_VertexShaderPath, s_FragmentShaderPath); + glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * PARTICLE_COUNT * 2, nullptr, GL_DYNAMIC_COPY); } } @@ -72,12 +76,12 @@ static GLuint CreateDummyVAO() { return vertexArray; } -static void CreateGpuBuffer(std::size_t a_Size) { +static void CreateGpuBuffer() { GLuint ssbo; glGenBuffers(1, &ssbo); glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo); - glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * a_Size, nullptr, + glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * 2 * PARTICLE_COUNT, nullptr, GL_DYNAMIC_COPY); // sizeof(data) only works for statically sized C/C++ arrays. } @@ -103,7 +107,7 @@ static GLFWwindow* InitWindow() { glfwMakeContextCurrent(window); gladLoadGL(); - glfwSwapInterval(1); + glfwSwapInterval(SWAP_INTERVAL); s_ComputeShader = CreateComputeShader(s_ComputeShaderPath); if (s_ComputeShader == -1) { @@ -127,7 +131,7 @@ int main() { auto vertexArray = CreateDummyVAO(); - CreateGpuBuffer(PARTICLE_COUNT); + CreateGpuBuffer(); float lastTime = (float)glfwGetTime(); @@ -154,7 +158,7 @@ int main() { // Compute glUseProgram(s_ComputeShader); - glDispatchCompute(PARTICLE_COUNT / 64, 1, 1); + glDispatchCompute(PARTICLE_COUNT / WORK_GROUP_SIZE, 1, 1); // Ensure all writes to the image are complete glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);