question: private void trace ( ) { glUseProgram ( photonTraceProgram ) ; long thisTime = System . nanoTime ( ) ; float elapsedSeconds = ( thisTime - firstTime ) / 1E9f ; glUniform1f ( timeUniform , elapsedSeconds ) ; glBindBufferBase ( GL_SHADER_STORAGE_BUFFER , boxesSsboBinding , ssbo ) ; glBindBufferBase ( GL_UNIFORM_BUFFER , imagesUboBinding , imageHandlesUbo ) ; int invocationsPerDimension = photonsPerFrame ; int worksizeX = mathRoundPoT ( invocationsPerDimension ) ; int worksizeY = mathRoundPoT ( invocationsPerDimension ) ; if ( variableGroupSize ) { ARBComputeVariableGroupSize . glDispatchComputeGroupSizeARB ( worksizeX / workGroupSizeX , worksizeY / workGroupSizeY , 1 , workGroupSizeX , workGroupSizeY , 1 ) ; } else { glDispatchCompute ( worksizeX / workGroupSizeX , worksizeY / workGroupSizeY , 1 ) ; } glMemoryBarrier ( GL_SHADER_IMAGE_ACCESS_BARRIER_BIT ) ; glBindBufferBase ( GL_SHADER_STORAGE_BUFFER , boxesSsboBinding , 0 ) ; glBindBufferBase ( GL_UNIFORM_BUFFER , imagesUboBinding , 0 ) ; glUseProgram ( 0 ) ; }
target:  Trace some rays from the light.