Skip to content

Commit 4fc691b

Browse files
committed
Start on Program. I guess.
1 parent 2db89f0 commit 4fc691b

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.nullprogram.lwjgl;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
import lombok.Getter;
6+
import org.lwjgl.LWJGLException;
7+
import org.lwjgl.opengl.GL20;
8+
9+
public class Program {
10+
11+
@Getter
12+
private final int handle = GL20.glCreateProgram();
13+
14+
private boolean disposed = false;
15+
16+
@Getter
17+
private Set<Shader> shaders = new HashSet<Shader>();
18+
19+
public Program add(Shader shader) {
20+
if (shaders.add(shader)) {
21+
GL20.glAttachShader(handle, shader.getHandle());
22+
}
23+
return this;
24+
}
25+
26+
public Program detach(Shader shader) {
27+
if (shaders.remove(shader)) {
28+
GL20.glDetachShader(shader.getHandle());
29+
}
30+
}
31+
32+
public Program attrib(GlBuffer buffer, String name) {
33+
return this;
34+
}
35+
36+
public void link() throws LWJGLException {
37+
GL20.glLinkProgram(handle);
38+
if (GL20.glGetProgram(handle, GL20.GL_LINK_STATUS) == 0) {
39+
/* Link failed. */
40+
int len = GL20.glGetProgram(handle, GL20.GL_INFO_LOG_LENGTH);
41+
String info = GL20.glGetProgramInfoLog(handle, len);
42+
throw new LWJGLException(info);
43+
}
44+
}
45+
46+
public void dispose() {
47+
if (!disposed) {
48+
GL20.glDeleteProgram(handle);
49+
}
50+
}
51+
52+
@Override
53+
protected void finalize() {
54+
dispose();
55+
}
56+
}

0 commit comments

Comments
 (0)