diff options
| author | FalsePattern <me@falsepattern.com> | 2023-11-28 09:41:56 +0100 |
|---|---|---|
| committer | makamys <makamys@outlook.com> | 2023-12-01 18:34:00 +0100 |
| commit | fbe408c777dcf6ea5d2d784b739287d6db2bf52c (patch) | |
| tree | 77e4023ef11829d36adf1095a5f20bc8845b32f6 /src/main/java/makamys/neodymium/renderer/attribs | |
| parent | a4ec946f5931f8fe6e6271b22c553f99b9d5afb8 (diff) | |
| download | Neodymium-fbe408c777dcf6ea5d2d784b739287d6db2bf52c.tar.gz Neodymium-fbe408c777dcf6ea5d2d784b739287d6db2bf52c.tar.bz2 Neodymium-fbe408c777dcf6ea5d2d784b739287d6db2bf52c.zip | |
abstraction layer for attribute index/stride/offset
Diffstat (limited to 'src/main/java/makamys/neodymium/renderer/attribs')
| -rw-r--r-- | src/main/java/makamys/neodymium/renderer/attribs/AttributeSet.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/java/makamys/neodymium/renderer/attribs/AttributeSet.java b/src/main/java/makamys/neodymium/renderer/attribs/AttributeSet.java new file mode 100644 index 0000000..ebf9c4c --- /dev/null +++ b/src/main/java/makamys/neodymium/renderer/attribs/AttributeSet.java @@ -0,0 +1,49 @@ +package makamys.neodymium.renderer.attribs; + +import org.lwjgl.opengl.GL20; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class AttributeSet { + private final List<VertexAttribute> attributes = new ArrayList<>(); + + public void addAttribute(String name, int size, int elementSize, int type) { + int index = attributes.size(); + attributes.add(new VertexAttribute(name, index, size, elementSize, type)); + } + + public void enable() { + int stride = attributes.stream().mapToInt(attrib -> attrib.size * attrib.elementSize).sum(); + int offset = 0; + for (int i = 0, size = attributes.size(); i < size; i++) { + VertexAttribute attribute = attributes.get(i); + GL20.glVertexAttribPointer(i, attribute.size, attribute.type, false, stride, offset); + offset += attribute.size * attribute.elementSize; + GL20.glEnableVertexAttribArray(i); + } + } + + public void addDefines(Map<String, String> defines) { + for (VertexAttribute attribute: attributes) { + defines.put("ATTRIB_" + attribute.name, Integer.toString(attribute.index)); + } + } + + public static class VertexAttribute { + public final String name; + public final int index; + public final int size; + public final int elementSize; + public final int type; + + private VertexAttribute(String name, int index, int size, int elementSize, int type) { + this.name = name; + this.index = index; + this.size = size; + this.elementSize = elementSize; + this.type = type; + } + } +} |
