-
Notifications
You must be signed in to change notification settings - Fork 1
/
fbo.js
86 lines (68 loc) · 1.83 KB
/
fbo.js
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
84
85
86
class Renderbuffer {
constructor(format, w, h, gl) {
this.gl = gl;
this.bufType = gl.RENDERBUFFER;
this.rb = gl.createRenderbuffer();
this.bind();
this.data(format, w, h);
}
data(format, w, h) {
this.gl.renderbufferStorage(this.bufType, format, w, h);
}
bind() {
this.gl.bindRenderbuffer(this.bufType, this.rb);
}
unbind() {
this.gl.bindRenderbuffer(this.bufType, null);
}
delete() {
this.gl.deleteRenderbuffer(this.rb);
}
}
class Framebuffer {
constructor(gl) {
this.gl = gl;
this.bufType = gl.FRAMEBUFFER
this.create();
}
create() {
this.fb = this.gl.createFramebuffer();
}
bind() {
this.gl.bindFramebuffer(this.bufType, this.fb);
}
unbind() {
this.gl.bindFramebuffer(this.bufType, null);
}
bindRead() {
this.gl.bindFramebuffer(this.gl.READ_FRAMEBUFFER, this.fb);
}
unbindRead() {
this.gl.bindFramebuffer(this.gl.READ_FRAMEBUFFER, null);
}
bindDraw() {
this.gl.bindFramebuffer(this.gl.DRAW_FRAMEBUFFER, this.fb);
}
unbindDraw() {
this.gl.bindFramebuffer(this.gl.DRAW_FRAMEBUFFER, null);
}
blit(srcX, srcY, srcW, srcH,
dstX, dstY, dstW, dstH,
mask, filt) {
this.gl.blitFramebuffer(srcX, srcY, srcW, srcH,
dstX, dstY, dstW, dstH,
mask, filt);
}
readPixels(x, y, w, h, format, type, pixels, writeOffset = 0) {
this.gl.readPixels(x, y, w, h, format, type, pixels, writeOffset);
}
linkTexture2D(attachmentPoint, texType, tex, level) {
this.gl.framebufferTexture2D(this.bufType, attachmentPoint, texType, tex, level);
}
linkRBO(attachmentType, rb) {
this.gl.framebufferRenderbuffer(this.bufType, attachmentType, this.gl.RENDERBUFFER, rb);
}
delete() {
this.gl.deleteFramebuffer(this.fb);
}
}