private static void initCLIfNecessary() throws Exception { if(clPlatform == null) { clPlatform = CLPlatform.getPlatforms().get(0); clDevices = clPlatform.getDevices(CL10.CL_DEVICE_TYPE_GPU); clContext = CLContext.create(clPlatform, clDevices, null); // TODO: // replace // null clQueue = CL10.clCreateCommandQueue(clContext, clDevices.get(0), CL10.CL_QUEUE_PROFILING_ENABLE, null); // TODO: // replace // null } }
@PointerWrapper("GLsync") GLSync glCreateSyncFromCLeventARB(@PointerWrapper("cl_context") CLContext context, @PointerWrapper("cl_event") CLEvent event, @GLbitfield int flags);
/** * Loads a CL Shader. * It will load the files from the assets folder. * Structure should be like: * * clshaders/[SHADERNAME]/shader.cl * * This function handles include-preprocessing, so you can use #include "test.cl". * It will replace all includes with the contents of the given filename. * Important! When using like #include "/test.cl" it will search the file assets/test.cl in the internal storage. * If you use it like #include "test.cl" in a shader called test it will search in assets/shaders/test/test.cl. * * @param shaderName * @return Null if the shader was not found */ public static CLProgram loadCLShader(String shaderName, CLContext clContext) { String shaderPath = "clshaders/"+shaderName+"/"; // Check if shader exists if (!Gdx.files.internal(shaderPath+"shader.cl").exists()) return null; // Preprocessing String shaderCode = ShaderLoader.preprocessShader(Gdx.files.internal(shaderPath+"shader.cl").readString(), shaderPath); return JLibOpenCL.compileProgram(shaderCode, clContext); }
/** * Converts this instance's opengl vertex buffer to a OpenCL Byte-Buffer. * Remember the layout of opengl vertex buffer's is a structure or all your vertex attributes, so for ex. * If you got 3 vertices with position and color-attribute the buffer's data will look like: * * [3 Floats - x,y,z -> Position][4 Bytes r,g,b,a -> Color][3 Float - x,y,z -> Position][4 Bytes r,g,b,a -> Color]... * @param usage * @param clContext * @return */ public CLBuffer createCLBuffer(CLContext clContext) { return new CLRawBuffer(clContext, this.getBufferHandle()); }