cl_event release_event;
GLsync sync = glFenceSync(GLSYNC_GPU_COMMANDS_COMPLETE, 0);
gl_event = clCreateEventFromGLSyncKHR(context,sync,NULL);
// map OpenGL buffer object for writing from OpenCL
clEnqueueAcquireGLObjects(cqCommandQue, 1, &vbo_cl, 0,&gl_event,NULL);
// Set work size and execute the kernel
clEnqueueNDRangeKernel(cqCommandQue, ckKernel, 2, NULL, szGlobalWorkSize, NULL, 0,0,0 );
// unmap openGL buffer object
clEnqueueReleaseGLObjects(cqCommandQue, 1, &vbo_cl, 0,0,&release_event);
GLsync cl_sync = glCreateSyncFromCLeventARB(context,release_event,0);
glWaitSync(cl_sync, 0, GL_TIMEOUT_IGNORED);