diff options
author | Michael Bien <[email protected]> | 2010-04-12 22:27:03 +0200 |
---|---|---|
committer | Michael Bien <[email protected]> | 2010-04-12 22:27:03 +0200 |
commit | 2c85c416d85205ab98b33e1a0b0daab32d4d81ff (patch) | |
tree | 4187ba06dec81da46495a300bb4f914e931f0c58 /src/com/mbien/opencl/demos/julia3d/Julia3d.java | |
parent | b51f2e1c254cdd74c9e43904c62694f64e6ae7e6 (diff) |
changes due to package renaming in jocl.
Diffstat (limited to 'src/com/mbien/opencl/demos/julia3d/Julia3d.java')
-rw-r--r-- | src/com/mbien/opencl/demos/julia3d/Julia3d.java | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/src/com/mbien/opencl/demos/julia3d/Julia3d.java b/src/com/mbien/opencl/demos/julia3d/Julia3d.java deleted file mode 100644 index 5d5378f..0000000 --- a/src/com/mbien/opencl/demos/julia3d/Julia3d.java +++ /dev/null @@ -1,212 +0,0 @@ -package com.mbien.opencl.demos.julia3d; - -import com.mbien.opencl.CLBuffer; -import com.mbien.opencl.CLCommandQueue; -import com.mbien.opencl.CLContext; -import com.mbien.opencl.CLDevice; -import com.mbien.opencl.CLKernel; -import com.mbien.opencl.CLPlatform; -import com.mbien.opencl.CLProgram; -import com.mbien.opencl.demos.julia3d.structs.Camera; -import com.mbien.opencl.demos.julia3d.structs.RenderingConfig; -import com.mbien.opencl.demos.julia3d.structs.Vec; -import java.io.IOException; -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.FloatBuffer; -import javax.swing.SwingUtilities; - -import static com.mbien.opencl.CLMemory.Mem.*; -import static com.mbien.opencl.CLProgram.CompilerOptions.*; -import static com.mbien.opencl.demos.julia3d.UserSceneController.*; - -/** - * This sample has been ported from David Buciarelli's juliaGPU v1.2 written in C. - * @author Michael Bien - */ -public class Julia3d { - - private final CLContext context; - private CLBuffer<FloatBuffer> pixelBuffer; - private final CLBuffer<ByteBuffer> configBuffer; - private final CLCommandQueue commandQueue; - private final CLProgram program; - private final CLKernel julia; - private final CLKernel multiply; - - private final int workGroupSize; - private final String kernelFileName = "rendering_kernel.cl"; - - final RenderingConfig config; - - private Julia3d(RenderingConfig renderConfig) { - this.config = renderConfig; - updateCamera(); - - //setup - CLDevice gpu = CLPlatform.getDefault().getMaxFlopsDevice(); - context = CLContext.create(gpu); - - workGroupSize = 256; - - //allocate buffers - configBuffer = context.createBuffer(config.getBuffer(), READ_ONLY); - commandQueue = gpu.createCommandQueue(); -// update(true); - - try { - program = context.createProgram(Julia3d.class.getResourceAsStream(kernelFileName)) - .build(FAST_RELAXED_MATH); - } catch (IOException ex) { - throw new RuntimeException("unable to load program from source", ex); - } - - julia = program.createCLKernel("JuliaGPU"); - multiply = program.createCLKernel("multiply"); - System.out.println(program.getBuildStatus(gpu)); - System.out.println(program.getBuildLog()); - - } - - void update(boolean reallocate) { - - updateCamera(); - - int bufferSize = config.getWidth() * config.getHeight() * 3; - if(reallocate) { - if(pixelBuffer != null) { - pixelBuffer.release(); - } - - pixelBuffer = context.createFloatBuffer(bufferSize, READ_WRITE, USE_BUFFER); - } - - commandQueue.putWriteBuffer(configBuffer, true); - - julia.putArg(pixelBuffer) - .putArg(configBuffer) - .rewind(); - - multiply.putArg(pixelBuffer) - .putArg(bufferSize) - .rewind(); - } - - - void compute(boolean fastRendering) { - - // calculate workgroup size - int globalThreads = config.getWidth() * config.getHeight(); - if(globalThreads % workGroupSize != 0) - globalThreads = (globalThreads / workGroupSize + 1) * workGroupSize; - - int localThreads = workGroupSize; - int superSamplingSize = config.getSuperSamplingSize(); - - if (!fastRendering && superSamplingSize > 1) { - - for (int y = 0; y < superSamplingSize; ++y) { - for (int x = 0; x < superSamplingSize; ++x) { - - float sampleX = (x + 0.5f) / superSamplingSize; - float sampleY = (y + 0.5f) / superSamplingSize; - - if (x == 0 && y == 0) { - // First pass - julia.setArg(2, 0) - .setArg(3, sampleX) - .setArg(4, sampleY); - - commandQueue.put1DRangeKernel(julia, 0, globalThreads, localThreads); - - } else if (x == (superSamplingSize - 1) && y == (superSamplingSize - 1)) { - // Last pass - julia.setArg(2, 1) - .setArg(3, sampleX) - .setArg(4, sampleY); - - // normalize the values we accumulated - multiply.setArg(2, 1.0f/(superSamplingSize*superSamplingSize)); - - commandQueue.put1DRangeKernel(julia, 0, globalThreads, localThreads) - .put1DRangeKernel(multiply, 0, globalThreads*3, localThreads); - } else { - julia.setArg(2, 1) - .setArg(3, sampleX) - .setArg(4, sampleY); - - commandQueue.put1DRangeKernel(julia, 0, globalThreads, localThreads); - - } - } - } - - }else{ - - //fast rendering - julia.setArg(2, 0) - .setArg(3, 0.0f) - .setArg(4, 0.0f); - - commandQueue.put1DRangeKernel(julia, 0, globalThreads, localThreads); - } - - commandQueue.putBarrier() - .putReadBuffer(pixelBuffer, true); - - } - - private void updateCamera() { - - Camera camera = config.getCamera(); - - Vec dir = camera.getDir(); - Vec target = camera.getTarget(); - Vec camX = camera.getX(); - Vec camY = camera.getY(); - Vec orig = camera.getOrig(); - - vsub(dir, target, orig); - vnorm(dir); - - Vec up = Vec.create().setX(0).setY(1).setZ(0); - vxcross(camX, dir, up); - vnorm(camX); - vmul(camX, config.getWidth() * .5135f / config.getHeight(), camX); - - vxcross(camY, camX, dir); - vnorm(camY); - vmul(camY, .5135f, camY); - } - - - public static void main(String[] args) { - - RenderingConfig config = RenderingConfig.create() - .setWidth(640).setHeight(480) - .setEnableShadow(1) - .setSuperSamplingSize(2) - .setActvateFastRendering(1) - .setMaxIterations(9) - .setEpsilon(0.003f * 0.75f) - .setLight(new float[] {5, 10, 15}) - .setMu(new float[] {-0.2f, 0.4f, -0.4f, -0.4f}); - - config.getCamera().getOrig() .setX(1).setY(2).setZ(8); - config.getCamera().getTarget().setX(0).setY(0).setZ(0); - - final Julia3d julia3d = new Julia3d(config); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - new Renderer(julia3d); - } - }); - } - - Buffer getPixelBuffer() { - return pixelBuffer.getBuffer(); - } - - -} |