fractal #1

Merged
Persson-dev merged 21 commits from fractal into main 2025-11-09 15:41:00 +00:00
Showing only changes of commit 9c4894eda2 - Show all commits

View File

@@ -8,7 +8,10 @@
#include <chrono>
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);