// Clear the previously rendered scene glClear(GL_COLOR_BUFFER_BIT); /*************** AGGIORNO IL TLAS ****************************/ Program::use(*mRaytracerUpdate); prapareDispatch(); // Dispatch the compute work! glDispatchCompute(1 << expOfTwo_maxModels, 1, 1); // synchronize with the GPU glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT); /*************** Render ****************************************/ // Set the raytracer program as the active one Program::use(*mRaytracerRender); // Bind the raytracer SSBO (the rendering context) prapareDispatch(); // Bind the texture to be written by the raytracer glBindImageTexture(0, mRaytracerOutputTexture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F); // Set rendering information mRaytracerRender->setUniform("width", getWidth()); mRaytracerRender->setUniform("height", getHeight()); // Set camera parameters mDisplayWriter->setUniform("cameraPosition", glm::vec3(0, 0, 0)); mDisplayWriter->setUniform("cameraViewDir", glm::vec3(0, 0, -1)); mDisplayWriter->setUniform("cameraUpVector", glm::vec3(0, 1, 0)); mDisplayWriter->setUniform("cameraFoV", glm::float32(60)); mDisplayWriter->setUniform("cameraAspect", glm::float32(getWidth()) / glm::float32(getHeight())); // Dispatch the compute work! glDispatchCompute((GLuint)(getWidth()), (GLuint)(getHeight()), 1); /***************** prepareDispatch() binda degli SSO: **********************/ // Bind the raytracer SSBO (the rendering context) for (GLuint k = 0; k < mRaytracingSSBO.size(); ++k) glBindBufferBase(GL_SHADER_STORAGE_BUFFER, k, mRaytracingSSBO[k]);