On Jun 7, 2010, at 11:39 AM, askoh wrote:
The following code is from Nvidia example oclSimpleGL_vc9.sln Can we create the following code in Squeak without creating primitives?
Ah, I see what you're getting at. The answer is "yes and no". As I said before, in order to have OpenCL/OpenGL compatibility, you need to create an OpenCL context that refers to the OpenGL context that it wishes to share with (see Section 9.11 of the OpenCL specification: "Creating CL context from a GL context or share group"). The hitch is that we don't have easy access to the OpenGL context created by Croquet-OpenGL (a new B3DAcceleratorPlugin primitive is required).
Once you have obtained the OpenGL context handle and used it to create a new OpenCL context, you can directly transcribe the code below into Squeak using only FFI calls.
Cheers, Josh
Thanks, Aik-Siong Koh
void createVBO(GLuint* vbo) { // create VBO unsigned int size = mesh_width * mesh_height * 4 * sizeof(float); if(!bQATest) { // create buffer object glGenBuffers(1, vbo); glBindBuffer(GL_ARRAY_BUFFER, *vbo);
// initialize buffer object glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW); #ifdef GL_INTEROP // create OpenCL buffer from GL VBO vbo_cl = clCreateFromGLBuffer(cxGPUContext, CL_MEM_WRITE_ONLY,
*vbo, NULL); #else // create standard OpenCL mem buffer vbo_cl = clCreateBuffer(cxGPUContext, CL_MEM_WRITE_ONLY, size, NULL, &ciErrNum); #endif shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup); } else { // create standard OpenCL mem buffer vbo_cl = clCreateBuffer(cxGPUContext, CL_MEM_WRITE_ONLY, size, NULL, &ciErrNum); shrCheckErrorEX(ciErrNum, CL_SUCCESS, pCleanup); } }
-- View this message in context: http://forum.world.st/OpenCL-and-OpenGL-interop-tp2246017p2246383.html Sent from the Squeak - Dev mailing list archive at Nabble.com.