1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package com.mbien.opencl;
import java.nio.Buffer;
import com.mbien.opencl.CLBuffer.Mem;
import com.sun.opengl.impl.GLContextImpl;
import com.sun.opengl.impl.macosx.cgl.MacOSXCGLContext;
import com.sun.opengl.impl.windows.wgl.WindowsWGLContext;
import com.sun.opengl.impl.x11.glx.X11GLXContext;
import com.sun.opengl.impl.x11.glx.X11GLXGraphicsConfiguration;
import java.nio.LongBuffer;
import javax.media.nativewindow.DefaultGraphicsConfiguration;
import javax.media.opengl.GLContext;
/**
*
* @author Michael Bien
*/
public final class CLGLContext extends CLContext {
final long glContextID;
private CLGLContext(long clContextID, long glContextID) {
super(clContextID);
this.glContextID = glContextID;
}
public static CLGLContext create(GLContext glContext) {
long glID = glContext.getContext();
//UNIX
//cl_context_properties props[] = {
// CL_GL_CONTEXT_KHR, (cl_context_properties)glXGetCurrentContext(),
// CL_GLX_DISPLAY_KHR, (cl_context_properties) glXGetCurrentDisplay(),
// CL_CONTEXT_PLATFORM, (cl_context_properties)cpPlatform, 0};
//WIN32
//cl_context_properties props[] = {
// CL_GL_CONTEXT_KHR, (cl_context_properties)TODO0,
// CL_WGL_HDC_KHR, (cl_context_properties)TODO 0,
// CL_CONTEXT_PLATFORM, (cl_context_properties)cpPlatform, 0};
//MACOSX
//cl_context_properties props[] = {
// CL_CGL_SHAREGROUP_KHR, (cl_context_properties)TODO 0,
// CL_CONTEXT_PLATFORM, (cl_context_properties)cpPlatform, 0};
GLContextImpl ctxImpl = (GLContextImpl)glContext;
DefaultGraphicsConfiguration config = (DefaultGraphicsConfiguration)ctxImpl.getDrawableImpl()
.getNativeWindow().getGraphicsConfiguration().getNativeGraphicsConfiguration();
LongBuffer properties = LongBuffer.allocate(5);
if(glContext instanceof X11GLXContext) {
long handle = config.getScreen().getDevice().getHandle();
properties.put(CLGLI.CL_GL_CONTEXT_KHR).put(glID)
.put(CLGLI.CL_GLX_DISPLAY_KHR).put(handle);
}else if(glContext instanceof WindowsWGLContext) {
// TODO test on windows
throw new RuntimeException("cl-gl interoperability on windows not yet implemented");
}else if(glContext instanceof MacOSXCGLContext) {
// TODO test on mac
throw new RuntimeException("cl-gl interoperability on mac not yet implemented");
}
properties.put(0).rewind(); // 0 terminated array
long clID = createContextFromType(properties, CL.CL_DEVICE_TYPE_ALL);
return new CLGLContext(clID, glID);
}
public final <B extends Buffer> CLBuffer<B> createFromGLBuffer(B directBuffer, int glBuffer, Mem... flags) {
return createFromGLBuffer(directBuffer, glBuffer, Mem.flagsToInt(flags));
}
public final <B extends Buffer> CLBuffer<B> createFromGLBuffer(B directBuffer, int glBuffer, int flags) {
CLBuffer<B> buffer = new CLBuffer<B>(this, directBuffer, glBuffer, flags);
buffers.add(buffer);
return buffer;
}
}
|