diff --git a/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/nodes/PalettedSprite.groovy b/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/nodes/PalettedSprite.groovy index 1e16fcba..a97277db 100644 --- a/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/nodes/PalettedSprite.groovy +++ b/redhorizon-classic/source/nz/net/ultraq/redhorizon/classic/nodes/PalettedSprite.groovy @@ -129,6 +129,29 @@ class PalettedSprite extends Sprite implements FactionColours { ) } + @Override + RenderCommand renderCommand() { + + transformCopy.set(globalTransform) + + var updateAdjustmentMap = materialCopy.adjustmentMap != material.adjustmentMap + materialCopy.copy(material) + + return { renderer -> + if (mesh && shader && materialCopy.texture) { + if (updateAdjustmentMap) { + var paletteMetadataBuffer = IntBuffer.allocate(256 * 4) + materialCopy.adjustmentMap.each { adjustment -> + paletteMetadataBuffer.put(adjustment).advance(3) + } + paletteMetadataBuffer.flip() + materialCopy.paletteMetadataBuffer.updateBufferData(paletteMetadataBuffer, 0) + } + renderer.draw(mesh, transformCopy, shader, materialCopy) + } + } + } + /** * Update the faction being applied to this sprite. */ @@ -142,7 +165,6 @@ class PalettedSprite extends Sprite implements FactionColours { @Override void update(float delta) { - // TODO: Make this a UBO if (factionChanged) { material.adjustmentMap = buildAdjustmentMap(faction) factionChanged = false diff --git a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/opengl/OpenGLUniformBuffer.groovy b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/opengl/OpenGLUniformBuffer.groovy index 8032f65e..7a8cfc94 100644 --- a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/opengl/OpenGLUniformBuffer.groovy +++ b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/graphics/opengl/OpenGLUniformBuffer.groovy @@ -108,6 +108,9 @@ class OpenGLUniformBuffer extends UniformBuffer { case ByteBuffer -> { glBufferSubData(GL_UNIFORM_BUFFER, offset, stack.malloc(data.capacity()).put(data).flip()) } + case IntBuffer -> { + glBufferSubData(GL_UNIFORM_BUFFER, offset, stack.mallocInt(data.capacity()).put(data).flip()) + } case FloatBuffer -> { glBufferSubData(GL_UNIFORM_BUFFER, offset, stack.mallocFloat(data.capacity()).put(data).flip()) } diff --git a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Sprite.groovy b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Sprite.groovy index 9dc92a63..94cab025 100644 --- a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Sprite.groovy +++ b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Sprite.groovy @@ -167,7 +167,6 @@ class Sprite extends Node implements GraphicsElement { return scene.requestDelete(mesh, spriteSheet, material.spriteMetadataBuffer) } - @Override RenderCommand renderCommand() {