blob: f9f3a239bc1d27e71da1d07e0cdbfcf7286ab813 (
plain)
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
|
package com.mbien.opencl;
import java.nio.ByteBuffer;
import static com.mbien.opencl.CLException.*;
/**
*
* @author Michael Bien
*/
public class CLBuffer {
public final ByteBuffer buffer;
public final long ID;
private final CLContext context;
private final CL cl;
CLBuffer(CLContext context, int flags, ByteBuffer directBuffer) {
if(!directBuffer.isDirect())
throw new IllegalArgumentException("buffer is not a direct buffer");
this.buffer = directBuffer;
this.context = context;
this.cl = context.cl;
int[] intArray = new int[1];
this.ID = cl.clCreateBuffer(context.ID, flags, directBuffer.capacity(), null, intArray, 0);
checkForError(intArray[0], "can not create cl buffer");
}
public void release() {
int ret = cl.clReleaseMemObject(ID);
context.bufferReleased(this);
checkForError(ret, "can not release mem object");
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CLBuffer other = (CLBuffer) obj;
if (this.buffer != other.buffer && (this.buffer == null || !this.buffer.equals(other.buffer))) {
return false;
}
if (this.context.ID != other.context.ID) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 29 * hash + (this.buffer != null ? this.buffer.hashCode() : 0);
hash = 29 * hash + (int) (this.context.ID ^ (this.context.ID >>> 32));
return hash;
}
}
|