You should use GL_interopeting ability. You use this for communication between opencl and opengl. Your openCL wouldnt delete an openGL vertex buffer object (VBO) after termination, would it? But this kind of kernel is harder to write and could need jogl files too!
cl_mem clCreateFromGLBuffer(cl_context context, cl_mem_flags flags,
GLuint vbo_desc, cl_int *err)
Creates the object for gl-cl sharing.
glFinish();
clEnqueueAcquireGLObjects(queue, 1, &buff, 0, NULL, NULL);
clEnqueueNDRangeKernel(queue, proc, 1, NULL, global_size, local_size, 0, NULL, NULL);
clEnqueueReleaseGLObjects(queue, 1, &buff, 0, NULL, NULL);
clFinish();
is an example for this execution. Taken from: http://www.dyn-lab.com/articles/cl-gl.html
So you dont have to copy buffers to host every time.