private void initOpenCL1() {
        clContext = context.getOpenCLContext();
        Device device = clContext.getDevices().get(0);
        clQueue = clContext.createQueue(device).register();
        //create kernel
        Program program = null;
        File tmpFolder = JmeSystem.getStorageFolder();
        File binaryFile = new File(tmpFolder, getClass().getSimpleName()+".clc");
        try {
            //attempt to load cached binary
            byte[] bytes = Files.readAllBytes(binaryFile.toPath());
            ByteBuffer bb = BufferUtils.createByteBuffer(bytes);
            program = clContext.createProgramFromBinary(bb, device);
            program.build();
            LOG.info("reuse program from cached binaries");
        } catch (java.nio.file.NoSuchFileException ex) {
            //do nothing, cache was not created yet
        } catch (Exception ex) {
            LOG.log(Level.INFO, "Unable to use cached program binaries", ex);
        }
        if (program == null) {
            //build from sources
            String source = ""
                    + "__kernel void ScaleKernel(__global float* vb, float scale)\n"
                    + "{\n"
                    + "  int idx = get_global_id(0);\n"
                    + "  float3 pos = vload3(idx, vb);\n"
                    + "  pos *= scale;\n"
                    + "  vstore3(pos, idx, vb);\n"
                    + "}\n";
            program = clContext.createProgramFromSourceCode(source);
            program.build();
            //Save binary
            try {
                ByteBuffer bb = program.getBinary(device);
                byte[] bytes = new byte[bb.remaining()];
                bb.get(bytes);
                Files.write(binaryFile.toPath(), bytes);
            } catch (UnsupportedOperationException | OpenCLException | IOException ex) {
               LOG.log(Level.SEVERE, "Unable to save program binaries", ex);
            }
            LOG.info("create new program from sources");
        }
        program.register();
        kernel = program.createKernel("ScaleKernel").register();
    }
This test class tests the capability to read and modify an OpenGL vertex buffer.
It is also shown how to use the program binaries to implement a simple program
cache.
@author shaman
jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java