From cba6626da396d9bbb6b498358dfa2221706d0852 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Wed, 29 May 2019 14:01:16 +1000 Subject: [PATCH] prep for post processing and fix timing a bit more --- .../java/io/github/hydos/ginger/Example.java | 29 ++- .../hydos/ginger/engine/elements/Player.java | 36 ++-- .../ginger/engine/particle/Particle.java | 4 +- .../postProcessing/ContrastChanger.java | 29 +++ .../engine/postProcessing/ContrastShader.java | 23 +++ .../ginger/engine/postProcessing/Fbo.java | 174 ++++++++++++++++++ .../engine/postProcessing/ImageRenderer.java | 36 ++++ .../engine/postProcessing/PostProcessing.java | 44 +++++ .../hydos/ginger/engine/terrain/Terrain.java | 15 +- .../hydos/ginger/engine/utils/Loader.java | 1 - .../github/hydos/ginger/main/GingerMain.java | 32 ++++ .../hydos/ginger/main/settings/Constants.java | 17 ++ .../resources/shaders/contrastFragment.glsl | 13 ++ .../resources/shaders/contrastVertex.glsl | 12 ++ .../io/github/hydos/ginger/Example.class | Bin 10161 -> 10559 bytes .../hydos/ginger/engine/elements/Player.class | Bin 3012 -> 2644 bytes .../ginger/engine/particle/Particle.class | Bin 4266 -> 4267 bytes .../postProcessing/ContrastChanger.class | Bin 0 -> 1149 bytes .../postProcessing/ContrastShader.class | Bin 0 -> 838 bytes .../ginger/engine/postProcessing/Fbo.class | Bin 0 -> 3027 bytes .../engine/postProcessing/ImageRenderer.class | Bin 0 -> 1159 bytes .../postProcessing/PostProcessing.class | Bin 0 -> 1715 bytes .../renderers/TerrainRenderer.class | Bin 4340 -> 4412 bytes .../hydos/ginger/engine/terrain/Terrain.class | Bin 5692 -> 5781 bytes .../hydos/ginger/engine/utils/Loader.class | Bin 7261 -> 7261 bytes .../github/hydos/ginger/main/GingerMain.class | Bin 0 -> 1679 bytes .../ginger/main/settings/Constants.class | Bin 0 -> 635 bytes target/classes/shaders/contrastFragment.glsl | 13 ++ target/classes/shaders/contrastVertex.glsl | 12 ++ 29 files changed, 450 insertions(+), 40 deletions(-) create mode 100644 src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.java create mode 100644 src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastShader.java create mode 100644 src/main/java/io/github/hydos/ginger/engine/postProcessing/Fbo.java create mode 100644 src/main/java/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.java create mode 100644 src/main/java/io/github/hydos/ginger/engine/postProcessing/PostProcessing.java create mode 100644 src/main/java/io/github/hydos/ginger/main/GingerMain.java create mode 100644 src/main/java/io/github/hydos/ginger/main/settings/Constants.java create mode 100644 src/main/resources/shaders/contrastFragment.glsl create mode 100644 src/main/resources/shaders/contrastVertex.glsl create mode 100644 target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.class create mode 100644 target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastShader.class create mode 100644 target/classes/io/github/hydos/ginger/engine/postProcessing/Fbo.class create mode 100644 target/classes/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.class create mode 100644 target/classes/io/github/hydos/ginger/engine/postProcessing/PostProcessing.class create mode 100644 target/classes/io/github/hydos/ginger/main/GingerMain.class create mode 100644 target/classes/io/github/hydos/ginger/main/settings/Constants.class create mode 100644 target/classes/shaders/contrastFragment.glsl create mode 100644 target/classes/shaders/contrastVertex.glsl diff --git a/src/main/java/io/github/hydos/ginger/Example.java b/src/main/java/io/github/hydos/ginger/Example.java index 250a0a3..38a13c6 100644 --- a/src/main/java/io/github/hydos/ginger/Example.java +++ b/src/main/java/io/github/hydos/ginger/Example.java @@ -20,6 +20,8 @@ import io.github.hydos.ginger.engine.obj.normals.NormalMappedObjLoader; import io.github.hydos.ginger.engine.particle.ParticleMaster; import io.github.hydos.ginger.engine.particle.ParticleSystem; import io.github.hydos.ginger.engine.particle.ParticleTexture; +import io.github.hydos.ginger.engine.postProcessing.Fbo; +import io.github.hydos.ginger.engine.postProcessing.PostProcessing; import io.github.hydos.ginger.engine.renderEngine.MasterRenderer; import io.github.hydos.ginger.engine.renderEngine.models.TexturedModel; import io.github.hydos.ginger.engine.renderEngine.texture.ModelTexture; @@ -28,6 +30,8 @@ import io.github.hydos.ginger.engine.terrain.Terrain; import io.github.hydos.ginger.engine.terrain.TerrainTexture; import io.github.hydos.ginger.engine.terrain.TerrainTexturePack; import io.github.hydos.ginger.engine.utils.Loader; +import io.github.hydos.ginger.main.GingerMain; +import io.github.hydos.ginger.main.settings.Constants; public class Example { @@ -49,17 +53,19 @@ public class Example { Window.create(1200, 800, "Ginger Example", 60); + GingerMain.init(); + Window.setBackgroundColour(0.2f, 0.2f, 0.8f); - TextMaster.init(); TexturedModel tModel = ModelLoader.loadModel("stall.obj", "stallTexture.png"); tModel.getTexture().setReflectivity(1f); tModel.getTexture().setShineDamper(7f); Player entity = new Player(tModel, new Vector3f(0,0,-3),0,180f,0, new Vector3f(0.2f, 0.2f, 0.2f)); - entity.setSpeeds(0.00001f, 0.0003f); - entity.setGravity(-0.0000000001f); - entity.setJumpPower(0.00005f); + Constants.movementSpeed = 0.000005f; + Constants.turnSpeed = 0.00002f; + Constants.gravity = -0.000000000005f; + Constants.jumpPower = 0.000005f; ThirdPersonCamera camera = new ThirdPersonCamera(new Vector3f(0,0.1f,0), entity); masterRenderer = new MasterRenderer(camera); @@ -138,6 +144,9 @@ public class Example { system.setSpeedError(0); system.setScaleError(1f); + Fbo fbo = new Fbo(Window.width, Window.height, Fbo.DEPTH_RENDER_BUFFER); + PostProcessing.init(); + while(!Window.closed()) { if(Window.isUpdating()) { @@ -160,14 +169,24 @@ public class Example { dragon.increaseRotation(0,1,0); barrel.increaseRotation(0, 1, 0); + +// fbo.bindFrameBuffer(); +// masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); +// ParticleMaster.renderParticles(camera); +// fbo.unbindFrameBuffer(); +// PostProcessing.doPostProcessing(fbo.getColourTexture()); + masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); - ParticleMaster.renderParticles(camera); + masterRenderer.renderGuis(guis); TextMaster.render(); + Window.swapBuffers(); } } + PostProcessing.cleanUp(); + fbo.cleanUp(); ParticleMaster.cleanUp(); masterRenderer.cleanUp(); TextMaster.cleanUp(); diff --git a/src/main/java/io/github/hydos/ginger/engine/elements/Player.java b/src/main/java/io/github/hydos/ginger/engine/elements/Player.java index 07d7533..f7887b2 100644 --- a/src/main/java/io/github/hydos/ginger/engine/elements/Player.java +++ b/src/main/java/io/github/hydos/ginger/engine/elements/Player.java @@ -6,14 +6,15 @@ import io.github.hydos.ginger.engine.io.Window; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector3f; import io.github.hydos.ginger.engine.renderEngine.models.TexturedModel; import io.github.hydos.ginger.engine.terrain.Terrain; +import io.github.hydos.ginger.main.settings.Constants; public class Player extends Entity{ - private static float RUN_SPEED = 0.3f; - private static float TURN_SPEED = 0.7f; - public static float GRAVITY = -0.04f; - private static float JUMP_POWER = 0.3f; - +// private static float RUN_SPEED = 0.3f; +// private static float TURN_SPEED = 0.7f; +// public static float GRAVITY = -0.04f; +// private static float JUMP_POWER = 0.3f; + private static float terrainHeight = 0; @@ -26,19 +27,6 @@ public class Player extends Entity{ public Player(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, Vector3f scale) { super(model, position, rotX, rotY, rotZ, scale); } - - public void setSpeeds(float runSpeed, float turnSpeed) { - RUN_SPEED = runSpeed; - TURN_SPEED = turnSpeed; - } - - public void setJumpPower(float power) { - JUMP_POWER = power; - } - - public void setGravity(float gravity) { - GRAVITY = gravity; - } public void move(Terrain t) { checkInputs(); @@ -49,7 +37,7 @@ public class Player extends Entity{ super.increasePosition(dx, 0, dz); super.increasePosition(0, (float) (upwardsSpeed * (Window.getTime())), 0); terrainHeight = t.getHeightOfTerrain(super.getPosition().x, super.getPosition().z); - upwardsSpeed += GRAVITY * Window.getTime(); + upwardsSpeed += Constants.gravity * Window.getTime(); if(super.getPosition().y < terrainHeight) { isInAir = false; upwardsSpeed = 0; @@ -61,26 +49,26 @@ public class Player extends Entity{ private void jump() { if(!isInAir) { isInAir = true; - this.upwardsSpeed = JUMP_POWER; + this.upwardsSpeed = Constants.jumpPower; } } private void checkInputs() { if(Window.isKeyDown(GLFW.GLFW_KEY_W)) { - this.currentSpeed = RUN_SPEED; + this.currentSpeed = Constants.movementSpeed; } else if(Window.isKeyDown(GLFW.GLFW_KEY_S)) { - this.currentSpeed = -RUN_SPEED; + this.currentSpeed = -Constants.movementSpeed; }else { this.currentSpeed = 0; } if(Window.isKeyDown(GLFW.GLFW_KEY_A)) { - this.currentTurn = TURN_SPEED; + this.currentTurn = Constants.turnSpeed; } else if(Window.isKeyDown(GLFW.GLFW_KEY_D)) { - this.currentTurn = -TURN_SPEED; + this.currentTurn = -Constants.turnSpeed; } if(Window.isKeyReleased(68) || Window.isKeyReleased(65)){ this.currentTurn = 0; diff --git a/src/main/java/io/github/hydos/ginger/engine/particle/Particle.java b/src/main/java/io/github/hydos/ginger/engine/particle/Particle.java index 45e643e..af9cf2d 100644 --- a/src/main/java/io/github/hydos/ginger/engine/particle/Particle.java +++ b/src/main/java/io/github/hydos/ginger/engine/particle/Particle.java @@ -1,10 +1,10 @@ package io.github.hydos.ginger.engine.particle; -import io.github.hydos.ginger.engine.elements.Player; import io.github.hydos.ginger.engine.elements.ThirdPersonCamera; import io.github.hydos.ginger.engine.io.Window; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector3f; +import io.github.hydos.ginger.main.settings.Constants; public class Particle { @@ -72,7 +72,7 @@ public class Particle { public boolean update(ThirdPersonCamera camera) { float time = (float) Window.getTime() / 1000000; - velocity.y += Player.GRAVITY * gravityEffect * time; + velocity.y += Constants.gravity * gravityEffect * time; Vector3f change = new Vector3f(velocity); change.scale((float) time); Vector3f.add(change, position, position); diff --git a/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.java b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.java new file mode 100644 index 0000000..7c6cf1f --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.java @@ -0,0 +1,29 @@ +package io.github.hydos.ginger.engine.postProcessing; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL13; + +public class ContrastChanger { + + private ImageRenderer renderer; + private ContrastShader shader; + + public ContrastChanger() { + shader = new ContrastShader(); + renderer = new ImageRenderer(); + } + + public void render(int texture) { + shader.start(); + GL13.glActiveTexture(GL13.GL_TEXTURE0); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); + renderer.renderQuad(); + shader.stop(); + } + + public void cleanUp() { + renderer.cleanUp(); + shader.cleanUp(); + } + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastShader.java b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastShader.java new file mode 100644 index 0000000..86d4b32 --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ContrastShader.java @@ -0,0 +1,23 @@ +package io.github.hydos.ginger.engine.postProcessing; + +import io.github.hydos.ginger.engine.renderEngine.shaders.ShaderProgram; + +public class ContrastShader extends ShaderProgram { + + private static final String VERTEX_FILE = "contrastVertex.glsl"; + private static final String FRAGMENT_FILE = "contrastFragment.glsl"; + + public ContrastShader() { + super(VERTEX_FILE, FRAGMENT_FILE); + } + + @Override + protected void getAllUniformLocations() { + } + + @Override + protected void bindAttributes() { + super.bindAttribute(0, "position"); + } + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/postProcessing/Fbo.java b/src/main/java/io/github/hydos/ginger/engine/postProcessing/Fbo.java new file mode 100644 index 0000000..3e83b4f --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/engine/postProcessing/Fbo.java @@ -0,0 +1,174 @@ +package io.github.hydos.ginger.engine.postProcessing; + +import java.nio.ByteBuffer; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL30; + +import io.github.hydos.ginger.engine.io.Window; + +public class Fbo { + + public static final int NONE = 0; + public static final int DEPTH_TEXTURE = 1; + public static final int DEPTH_RENDER_BUFFER = 2; + + private final int width; + private final int height; + + private int frameBuffer; + + private int colourTexture; + private int depthTexture; + + private int depthBuffer; + private int colourBuffer; + + /** + * Creates an FBO of a specified width and height, with the desired type of + * depth buffer attachment. + * + * @param width + * - the width of the FBO. + * @param height + * - the height of the FBO. + * @param depthBufferType + * - an int indicating the type of depth buffer attachment that + * this FBO should use. + */ + public Fbo(int width, int height, int depthBufferType) { + this.width = width; + this.height = height; + initialiseFrameBuffer(depthBufferType); + } + + /** + * Deletes the frame buffer and its attachments when the game closes. + */ + public void cleanUp() { + GL30.glDeleteFramebuffers(frameBuffer); + GL11.glDeleteTextures(colourTexture); + GL11.glDeleteTextures(depthTexture); + GL30.glDeleteRenderbuffers(depthBuffer); + GL30.glDeleteRenderbuffers(colourBuffer); + } + + /** + * Binds the frame buffer, setting it as the current render target. Anything + * rendered after this will be rendered to this FBO, and not to the screen. + */ + public void bindFrameBuffer() { + GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, frameBuffer); + GL11.glViewport(0, 0, width, height); + } + + /** + * Unbinds the frame buffer, setting the default frame buffer as the current + * render target. Anything rendered after this will be rendered to the + * screen, and not this FBO. + */ + public void unbindFrameBuffer() { + GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0); + GL11.glViewport(0, 0, Window.width, Window.height); + } + + /** + * Binds the current FBO to be read from (not used in tutorial 43). + */ + public void bindToRead() { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); + GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, frameBuffer); + GL11.glReadBuffer(GL30.GL_COLOR_ATTACHMENT0); + } + + /** + * @return The ID of the texture containing the colour buffer of the FBO. + */ + public int getColourTexture() { + return colourTexture; + } + + /** + * @return The texture containing the FBOs depth buffer. + */ + public int getDepthTexture() { + return depthTexture; + } + + /** + * Creates the FBO along with a colour buffer texture attachment, and + * possibly a depth buffer. + * + * @param type + * - the type of depth buffer attachment to be attached to the + * FBO. + */ + private void initialiseFrameBuffer(int type) { + createFrameBuffer(); + createTextureAttachment(); + if (type == DEPTH_RENDER_BUFFER) { + createDepthBufferAttachment(); + } else if (type == DEPTH_TEXTURE) { + createDepthTextureAttachment(); + } + unbindFrameBuffer(); + } + + /** + * Creates a new frame buffer object and sets the buffer to which drawing + * will occur - colour attachment 0. This is the attachment where the colour + * buffer texture is. + * + */ + private void createFrameBuffer() { + frameBuffer = GL30.glGenFramebuffers(); + GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBuffer); + GL11.glDrawBuffer(GL30.GL_COLOR_ATTACHMENT0); + } + + /** + * Creates a texture and sets it as the colour buffer attachment for this + * FBO. + */ + private void createTextureAttachment() { + colourTexture = GL11.glGenTextures(); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, colourTexture); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, + (ByteBuffer) null); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE); + GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL11.GL_TEXTURE_2D, colourTexture, + 0); + } + + /** + * Adds a depth buffer to the FBO in the form of a texture, which can later + * be sampled. + */ + private void createDepthTextureAttachment() { + depthTexture = GL11.glGenTextures(); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, depthTexture); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT24, width, height, 0, GL11.GL_DEPTH_COMPONENT, + GL11.GL_FLOAT, (ByteBuffer) null); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, GL11.GL_TEXTURE_2D, depthTexture, 0); + } + + /** + * Adds a depth buffer to the FBO in the form of a render buffer. This can't + * be used for sampling in the shaders. + */ + private void createDepthBufferAttachment() { + depthBuffer = GL30.glGenRenderbuffers(); + GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, depthBuffer); + GL30.glRenderbufferStorage(GL30.GL_RENDERBUFFER, GL14.GL_DEPTH_COMPONENT24, width, height); + GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, GL30.GL_RENDERBUFFER, + depthBuffer); + } + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.java b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.java new file mode 100644 index 0000000..35d66ca --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.java @@ -0,0 +1,36 @@ +package io.github.hydos.ginger.engine.postProcessing; + +import org.lwjgl.opengl.GL11; + +public class ImageRenderer { + + private Fbo fbo; + + protected ImageRenderer(int width, int height) { + this.fbo = new Fbo(width, height, Fbo.NONE); + } + + protected ImageRenderer() {} + + protected void renderQuad() { + if (fbo != null) { + fbo.bindFrameBuffer(); + } + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); + GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, 4); + if (fbo != null) { + fbo.unbindFrameBuffer(); + } + } + + protected int getOutputTexture() { + return fbo.getColourTexture(); + } + + protected void cleanUp() { + if (fbo != null) { + fbo.cleanUp(); + } + } + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/postProcessing/PostProcessing.java b/src/main/java/io/github/hydos/ginger/engine/postProcessing/PostProcessing.java new file mode 100644 index 0000000..5b8a996 --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/engine/postProcessing/PostProcessing.java @@ -0,0 +1,44 @@ +package io.github.hydos.ginger.engine.postProcessing; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GL30; + +import io.github.hydos.ginger.engine.renderEngine.models.RawModel; +import io.github.hydos.ginger.engine.utils.Loader; + +public class PostProcessing { + + private static final float[] POSITIONS = { -1, 1, -1, -1, 1, 1, 1, -1 }; + private static RawModel quad; + private static ContrastChanger contrastChanger; + + public static void init(){ + quad = Loader.loadToVAO(POSITIONS, 2); + contrastChanger = new ContrastChanger(); + } + + public static void doPostProcessing(int colourTexture){ + start(); + contrastChanger.render(colourTexture); + end(); + } + + public static void cleanUp(){ + contrastChanger.cleanUp(); + } + + private static void start(){ + GL30.glBindVertexArray(quad.getVaoID()); + GL20.glEnableVertexAttribArray(0); + GL11.glDisable(GL11.GL_DEPTH_TEST); + } + + private static void end(){ + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL20.glDisableVertexAttribArray(0); + GL30.glBindVertexArray(0); + } + + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/terrain/Terrain.java b/src/main/java/io/github/hydos/ginger/engine/terrain/Terrain.java index ee4d45a..002cf65 100644 --- a/src/main/java/io/github/hydos/ginger/engine/terrain/Terrain.java +++ b/src/main/java/io/github/hydos/ginger/engine/terrain/Terrain.java @@ -10,11 +10,10 @@ import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector3f; import io.github.hydos.ginger.engine.renderEngine.models.RawModel; import io.github.hydos.ginger.engine.utils.Loader; +import io.github.hydos.ginger.main.settings.Constants; public class Terrain { - private static final float SIZE = 100; - private static final float MAX_HEIGHT = 20; private static final float MAX_PIXEL_COLOUR = 256 * 256 * 256; private float[][] heights; @@ -27,8 +26,8 @@ public class Terrain { public Terrain(float gridX, float gridZ, TerrainTexturePack texturePack, TerrainTexture blendMap, String heightMapLocation) { this.texturePack = texturePack; this.blendMap = blendMap; - this.x = gridX * SIZE; - this.z = gridZ * SIZE; + this.x = gridX * Constants.terrainSize; + this.z = gridZ * Constants.terrainSize; this.model = generateTerrain(heightMapLocation); @@ -37,7 +36,7 @@ public class Terrain { public float getHeightOfTerrain(float worldX, float worldZ) { float terrainX = worldX - this.x; float terrainZ = worldZ - this.z; - float gridSquareSize = SIZE / ((float) heights.length - 1); + float gridSquareSize = Constants.terrainSize / ((float) heights.length - 1); int gridX = (int) Math.floor(terrainX / gridSquareSize); int gridZ = (int) Math.floor(terrainZ / gridSquareSize); if(gridX >= heights.length - 1 || gridZ >= heights.length - 1 || gridX <0 || gridZ < 0) { @@ -100,11 +99,11 @@ public class Terrain { for(int i=0;i)vJ1%*;T!2k+ro3?>AsYwb_kF+4* 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 delta 3582 zcmZ`*d0-Uf75}}N$<7{=WHUJ@KrWCY5}=%6L4wLHgiDSk2yT)kSxBZ9TAPt74@dwTGgXzHgVK|8!?(=FPjl-#flHb7I=z z$<8pl?uMtQHDVp24jf1T`siRF%-j8xXhPR zip|lToDK{}CPDEv`9eqH@+ygjm?JE2)ehP?OSLK<|m5E{*l)GG5(fz1qeR#SS-RI$YDXD>DbmQ-`Q)#+%(QlYtwa06== zB{a`j^K2_Lq`;!$PLpi?^4kcG8c$QLC+O)DXsWYg74BBCnozpwOo8dMrOEeTjk(NL zYOMPo%>_*%J67U8vB3T2i?&Y6`pXu*yJ)f%8%>+NJ8fn>BlJypK&Y|nc044gE#^A= zJ;m+Vs^Jj~Nv7#$e}lgzs8kFXFhJ<-(6H0&_4I8C`5O98^fhz- ze~woPvZuC|klk})LfYVIs_Q$sdZD)_G_2PgD_-Nc>Vlr;X0f0ZuU~ykB)Jm5((ndO znZ44wl$_S^Yn&paw={dlcouml`s(UKzGN-l(r^ZEoAqh6{eMSL8(V5cm8^J&;7qt5 z(;&K|Im!Ja!5Z*{>cx|a_qbuW9Wv9+KIy5BckzLU>@4B^L^~w;s<|S4U*?~<*{U17 zO|_Fefu!w6iH2vLp2`W{FjoA9kXr8*$QqM6cAUef!sBOzwcOn1)XYA-ki&f4If*`J z^HQ@S!)iT;FEm`h-^|Gwg_iTUUB%Z4*FP1cmss(4j=HYJ*W9;`}vO$~le?XBKBLM=hBo${ziEK)2+#rW~OovEwn=re_b%(L05qlCH(aSy`C1cvmS zlIu&Tmqw*x9%Tf13;P>=%e>S4Ay3HXZ&F;Vb-$fTs7#|i)YtUnOrKFgKhvoHmC-WM zx4=6(81x5))m%@$=?xJy z#u0GG;dVRppo7)QqG)z0rE#>n4JC>@j$wHmE8TiHhP(8&QQYfFiKE@EZ_qmorZ%}9 zY-MV!`k>2VSR9%of`<)@zAb|7eA^X{;8DXO6!ks&9#)NDZ|PAikKoA|_UniBiWqKm zsfHTCSp7%@lM+;F1h>X$M|5*RnNHfy)KS%M2%NfUcx1lC5br?>)L$8Y9uX+`uap?0L3BE{uIGOt|T^R`j zTS8F9237yZ;EKM^@e~<)GM+fT;#^d^^>3p1HiCa8@_A9e$oWi=Kj=R&8O4vTOg8Im zWL`156y`Es&bQ%=61lSC80XF;B}QD8N~Sb+8KpE=wvo-LO7b$2%S0$M!OWywE=YpZ zFLI3%p=66tG{dQB95_3f>u@B)W-tN{cifk*oG>q5V&o+8h>*&zkw!+6c9iF`B;Rme zMooDPD?dh^oz^H7y7J;w;x_X12*b#vZu$|uBTCn~48w>}Ps0!}9GP^z=w7`#LcI;c z5utvG>i{EcXb~E`4<}+YbSsX>=!RT&a(#7qu8|d?kp}1CMv)%@&9Fx3WK#qILWCv>!>O)(BmX4qMvjpmp&3_E%oZpj1`~R&SHi1IqsA$AS``{yJZ{J$VFHyUx#&aIqsE5;68a2?w2QEy*vpU<>}~59WVdO^a=83%-^I(k3=hX@K+%Z6*^|8Yg`~ z4=~S09_dwjkRF1a>ZKQG3sVmAOULM8rugL~9i**HrP5ky2R%aDkVYG%hiE(V(rLG} zns(4mIO&Wuop#Zq2xmwnb*0@*>QXsfpvPzrGNsw{CheuiktHqWcg_>MaJF=k=FvXZ z%aJZnIXy{FAy>BXN6^#s4D#e6QfNONfFbY1B05OVBA*U%BIZH9#MQ`G!5?FXRg6h F{{l;|p(OwS diff --git a/target/classes/io/github/hydos/ginger/engine/elements/Player.class b/target/classes/io/github/hydos/ginger/engine/elements/Player.class index 4708bf24adace3e3015e03d2b8e576cc2bedc262..594bfab37296e832200ac2cf5c1493277c01455c 100644 GIT binary patch literal 2644 zcmbtVZBr9h6n-|@5RzO3@r5E<6{Uutrd6sUs6`+`1*JgorS@e>uE|QWo9=FSu`l|e zU+pl{nND^5q#yiTtHtR|`vdw*`YW71_in1znUc;3Gr9Mid(OG%Jm=hJ|9t-29{~Ds zJC2BfL$;eO+CizdkS(niT%UqdlwMXk+{mmf%ZhXYKRaEvR;3q*`Tt$UoWKrN4YUN( z^DNsLmv*rf7%*}MM84*E3_M$vvS1)p7w2l8!^2v2+42g0{V;C(6V9;h(etW-=AnGq zcI@D^foQsS-hesc7Gwej+5}=~GSE87%rDd`3(}jj7Ru5<`=pz<%JY_IE4i+08mfo+ zJw3TG2u!pfy|ECH3U4d>**Uoq)I3?3QsQ8P02M1J)!mn5K5#uhJFnNH*9UXC+#7iJ z&L&=S0#N|k%9@l4-ebuu%sDL$aP~Z?+ z)O?m?esRL7)&f6?EZ&RbT>}R;9vhxsvYmpvEN}!z4aAEwn6oR)hJ!n*`u4uSF&yXQ z+D_h+mM>@AzzQL0N^>y6?hXi?1i@GSG+>SN&n0mRXX4;9*mT2Mva)5%DQ2fQXaXN# z*gzt1XRLy4Ic&6<9#t2f!id1AI*j_ZqvV{xIW6a1))mEsz=!`zXu94bbvP+7g$o3O zdHka{a4Ox~U>G)<{sg8m6URpe1~vwBgCGL4>e(ABD%i&Y^IE!@#ARHKgK#zAxYt@Q z@CmMwGgxKFSQoF?hk{eZuJq;-_zYjf@wtJ+|B-ZsbeHvI5Rgp$?1=05fkhS-uvBjG zqGv6U8dbh|fr8GLL}`#58@Owxt$BHwv(*btg`bwgYKpO!R#ASQ zVk9b(Id>67XnG}`>6K)rS5g_*7->$Rg?^hT^>9^xvD7bU{h6BxHuJYhtJ~48HK0Vk zth?Oj1##-TGkphpI?Rq(XVW^iWl~Skp?*5mPgf@T6uVx=+o4m~$!oVU=5}=Oee{erBa~J&dA??Z!LYnR<7CyO`dkX{Yk;MJCMDIL@f* z>|tgdeVJ6|2|DjQ!{NoX)H?bpb%fH`{yQ`{L1E|_&MvOyUX{ld*G`z3o>Ygqj&U8M z>qU(5KKh-1f{WoY_bV%iaz%tYU@HOJb&utlD*MMM zv#ys}x9fHsA>c%lV`qr~iw?tuVVMu-^>KFV~zrbm`^bGD@v@p2OVS0qF zwpp#&q%=!f)vV{NZTN*H)t!&9rEOGeQnXxBDkZPpLrPh$-i3DSY}=!a;%vv)FH_HH z*auktNwi{+X%ArsxxO2x3Hcd9e3sv%5e#6ACpmr)&S4T0xJK%?$nZ8Uupu+Al-1-|>QF0sr literal 3012 zcmbtVX;Tze6g@rD!)&eKfTBnQQOq!+lZbJ{jR*rM2o8%%jM~h!(86?+o*ovnnP}E3 zQ&goY6)ZpL2S3LpSgA5UAb%i#A-}@Pd9NEVR063Is^-1>-hJn8=idI~)o;H8IEe4V z2q@TR+UYUV9WRZh$LI2Pk%Bd5IBCP;#z-5JM!~S$V!D4)pEH~=)c^ma!*We`PC+y~ zbpF~ve@92V0wtp$HaL`BJ_vVa+lIRbFZ1~9P;dXW{=SPHSp^$h!*O)e>N3o+aaVzs zD>)7w8JIGRyn?td4wf8?m!+v0-N_gI%dlDOw%SaG)662{V+z?nEIaO7f0^uAJJ*aaZ#W%Z;tOqK zx(+}=cgOwb(?-s#4Qm%N2+6%yGM zDzf4%eY9wJ++@6=WF{ks7I8|JPsu2YxU|=(dbU)U>bGYMa#T%9<9>20N)06D#e-(jtN(~T*Q`CojKqtdIZ%FNJ zZmd?TL)*$0u{#xijy>WhDSlF^;Bz#u;MYhuw-ddJu5Cs&E!JWy@oS}xE)Nm=ktQ;+ z@ebaV?l<57TIi)XJ4h6fum-%xoho;SxD&oN;4t;d_~r6^Ay; zi#meTGiN)c6ZL*ImYj&kd-QtI+Er0zXI zjnvD{3j#>B(i80X=>e)G9Xw+2oQKa*5`hLK`;L)uKr;i~M}F)_9a)ej15T3zU9A5l zR<^+E-)7x^z#;s|TK~*CKV(@1Ll1f(FX#9XW--Tv)Zs2}$-<@K;$!ZD#LVFn?o@or zmk}th@GuYvuuAM!zqA9C6y8=bVa@kZo>EEX)DzS)t`)Bn!~m-qW+gS^Rhzrd-3y{x}74=dn%yN9a;(CUjfc`{~VWW4lCA(0=dC|bnWh2fZ z#gF3w^s$jHknvfxV*ow;XkEcDbXTAseIKBaia`FX`9iFqZ(JPdIRoQw?Y=|zcU NnI)B**RlQK1OPsF6TScd delta 44 zcmZ3jxJq$DAseIa85!8!gB-&=Ln1e?XZynm03t^W A!2kdN diff --git a/target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.class b/target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastChanger.class new file mode 100644 index 0000000000000000000000000000000000000000..f12305471ccd6e72859b777b49e76980af1e8e50 GIT binary patch literal 1149 zcmbVM+iuf95Iviub?Z7wbA>h(Xt^Z;YD$4ZQ!156phyu=S|ai2I4j4IYe)8`z&k&L zL@xpf@yuWFBZyhsrSzc>L6+7trHRM(rHD|{mm&AuUjr69#HJ23VQ-Jyd1sypDOV3_i`+v7g> z3BNrSL2J*j_?x)9!7v&04MJjgIv&o6(4DYd0&Uo?EjAgF)mn!k)%1E?MG|QZ(@+&; z85(0LJYnGQGHw?k>{nudo^Wy>0Y z?06&JUfqbr#wvLJRzC{*8c#MybJIE literal 0 HcmV?d00001 diff --git a/target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastShader.class b/target/classes/io/github/hydos/ginger/engine/postProcessing/ContrastShader.class new file mode 100644 index 0000000000000000000000000000000000000000..7edbcdb30046f17f14776356003847a0e7607dfc GIT binary patch literal 838 zcmaJ<%We}f6g^HtGfmP5lcqp!>ljT`r(SM#ylkW(t}K=5*3cG@mgvqwsVTo_*>c z4?+fi@R@(*LCVQ*Xf@d$GOUrau{^U8Pjlg6m7zT@FB1uE#kYebH7No6r@eRY!;?{= z=Ap&V`3LN4p3FpMOX$ignMwPGq1xSx7-~mqA{waTb_;9p8J>1;-sI+vqizf+tCM^d z3q9g-DqIt4%+rW#>FRQ`W~b6HydEr%Y-#3{#dacWFHJvY@?7beGqRG>VOWo4HtAW) zEY7Vk9(EW!Qj_l7b@rfzhj>IGT?3M0_xS&fHHIqJW6_tcr}p*NKXA{4T~L1XpDNhF zEv!&gFDf!eW1(&mij1*N;|3vK7B#TC?|Xjp0-HYyTARiOi2+T}<6(g0c13nK05%th^Z`oZ-Am$&(%svy`u8qy|B631-=Z!$3mRUj!SI;WD|qr3 Ds4K+N literal 0 HcmV?d00001 diff --git a/target/classes/io/github/hydos/ginger/engine/postProcessing/Fbo.class b/target/classes/io/github/hydos/ginger/engine/postProcessing/Fbo.class new file mode 100644 index 0000000000000000000000000000000000000000..ddd89b916150a1623fd2926ec4fa937f6e5ff478 GIT binary patch literal 3027 zcmb7FS$7j<7=9*6n*v{jjHL)IsEF7`AZ!*C6)0`7SPG<}A}%;dh9o%6gvrE;3yZr5 zZg+|cSF-4h9;-QCc;ThLLjQ=z=ly1qPPNB#yhy(7eV_Mv*ZKXgUw#F!6Q3p#GqAPd zW=a*m+{kCj=ZbEfhib|8GIo_4J5zJ({!z~@*!4Q^Gh=x-iG+a_XRMd3jAQZYNdAmn z@C_s;k4%mlFvbmZA8@O6->Ul4mea7~v<6;|j2_KBaVj@@B6mDHDwl?VJA=#Y=;X*~ z_SEq4v9ZytJds$(Y^CUz4Rn_6N~uf(%T9aNj6K{qecJX2S8yG-;pOa?{f1{7P({1u zm)pl>`q&ayfpF{C`DmqD@gFDl!1(z1;55k}aEta*#BrBG4^|t94-8H(A?rScZgk3S zt->AXT*}?u3ise%11klkVmXz%Jr<>w7|@u@Cm6uV#!TM!a#r3UM{~k0SkAQNRpcCA zCj4@xZeaVw|4qam1Ir^`=FZh3t9ra9j0Y8#3*!f|If+f=>w2Y(Gkd1wWZW9_ z>tqg2?AWTXMV#p=IU}}X`++NY9p$>9P+*0iY{$+db}WvvZJWYFg0iB85+*_;>{3Vt zF??9T3>fWEcvQ!*rI59&Mca$meO%#AbkfIsrCN-{m*sKgmN+%6Z~!9)QYB}&B@*bf zc$nD1X(2tPa1c)zSXy$XEB0*7^;k+t$-7Qcs!{zn{?&a;FoC`#4jXvjzth6kr)b=r z6^*qtBWO7{YgRKVN}G0oAURE$V@9dC81CyN7PzHx}s$J2Nu>ii;~^7 zoDU1`tuTiHki4E!ctKuQ1+O8C{l0G%$}@J=7n!_5L1g*@8Eqgy zSSV*JoEEwMh}@!pWrcAOO!&GmyQgUF#lu!jm%ZfAQJBHgI)4Z4s?KnbzPd!kRj7qg z8S$*ymNVPoDbz)cA*EWY&KS*$Cq(Zhg;~6;qsh1N8LMP(X9Dig8JDb2=+RYW;)c)p z;W*h7)XFOguVSS{*rD!GOPboZy$ZoEWrXs1g$uZ7pts~i_=X(BOjlrLa9UKp;ont= z-dhT93ujYvUQp^HvtMN1Q+QuWg)&mkQ6YK$K;eqi@k*(Z`Bs_oU5_q`#D@wWiNxv! ze*im94K=Hojij)La#9^k60bdwFtbE5WrV{WDgj`{uAF-9Lx^^xB`X?t87Z zp8vh%1`JX%O;!)m;wFxW&A5-Z=|CSFa6eB((!3146J{~J+sIve4eMN1AmO6$nrZe#ZcrT z$h~dk6L>o0n&B$Q9R$pL$4v~9U8y?YWJI~6t$cD(<)MEnTZ<^iz;AVE`8Ar7LRil- zdxpQ~`#P>;DL2*)sJ_H?B)Ko9e?m$8i)&iz*#zLAN}$S}%d)C5dS@9Y4{PBQyP>W2 z2FM|0+CW9SbcWgq#Cp2;&Ji6lX-7BR#EWwnFb_qdTm5Hr&ojCg7~PAE?xl#2t?0(U z@g5@o#)^?ZmWh0J4jHCT;>-+6B2AwMU2O5x>aJ9eVKmX;Luvr2johEpdn2-snXk33 z<9cfzGIJp)>*Do!u0xCs@E*Co&j?+{Mts0VyUfV`eInM~iD!*25(a^v`T*L=rp(`@3h&}h9~ poe$qSng?$1|0Yv?3wPr-XW6%$cegp`zKa;&-0q8ysS(2`e**(oP|N@T literal 0 HcmV?d00001 diff --git a/target/classes/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.class b/target/classes/io/github/hydos/ginger/engine/postProcessing/ImageRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..8c2114cecdcc7182dae808d66ab1f193263aca2c GIT binary patch literal 1159 zcmb7C%Tg0T6g`~>6T;*{cqoFrd?isBKy;y$rD9>lilTy4v798$WN^r&Ix`~wJD@S`kGPa+U^Z2EEg-gC}9w}1cn{u96|?i+{+JaB!>af4=9vzkW@zr#z*k;;-S z9;DUwJHcz^*JY=}xK%l@9r;$a8d6DRAR&<7w?EjHXY+BhwlC{}Kzy&}3#?QxguGGn z9|{btxh*$%B#U%Gk2%2t3VC`bv_4&p=lZS32XbOl5wKS#c zH0fJfMaI4f?S|HR)x@;!I9GF9jSXcV$fx1no>XbfV&1@$jw)IRhSuf|&?V zr)qUwzyv1ouQ()?ek+x~pzw<_xqZXb@MD}{CKWeMaHH>~s0rec@@cjT~ zQr#GB8Ap+dbthfoQjhpHBMHQ^6I}0LfyCOT74BL>s>{9jiRZ32-4-U#A*D`R;D~zl jFM9R4KA|gTLc12vQ0Od$&Yy$JofAeMvP4>q*zf%XIo9Bb literal 0 HcmV?d00001 diff --git a/target/classes/io/github/hydos/ginger/engine/postProcessing/PostProcessing.class b/target/classes/io/github/hydos/ginger/engine/postProcessing/PostProcessing.class new file mode 100644 index 0000000000000000000000000000000000000000..bc08ddefc02af89818a134970d0f5717c11153a2 GIT binary patch literal 1715 zcmb7^+jG-K6vn@eFS5nrBqjlpLLoqj9ZE!i-iQN)+%Pq9ZuLxtC)wU{lo3{t{Bm4Hxw&mLVw_4v;8abyo@GD_+BP zYqsy`eQZpZB9@5+#wE@{k{9kdfxyE5OSE5R=9$!B6O*`P;0uA7!8&$Ahssqvn`%m2 z#+SSjm%AOWwpbNdEWB7P7eABHz`M}eT$M18F>sCdIyjxdw_sul;~Mytq~<0?Z+iXp zv;0E2STlL1C^4gDO$DLtQ;;cqEpZ#u0_l^4^&v~*jy{xNI|-a^c&^v+chsA(T80Bbk25GmELq4*CWIoK8Z*dm1r)J(^ ztml@FjArDbkMaP{;{xX_E}l9sL~vmI5W}f1CXR6BcTDZR!}TNF=)rPP#iPt6k1@u6 zpGOuqF-^FxbD1a|Cf7yb5H}`|ajT2j9wQ&=aGsA64x5ICdO6#Fb-w+eInS#p39hS6!_3C?^SBr5;mE<{Hbo p{sE1zFQ(1MwBZQwBT?)8l|BaDWIEHVtiXFJo`M86S=A7>{spmSe2)MC literal 0 HcmV?d00001 diff --git a/target/classes/io/github/hydos/ginger/engine/renderEngine/renderers/TerrainRenderer.class b/target/classes/io/github/hydos/ginger/engine/renderEngine/renderers/TerrainRenderer.class index 1736b6be291fde6ed0780be69d0409cec03bd57d..4472ab94a12200bbb37e5921aa82939ee3f82ad5 100644 GIT binary patch literal 4412 zcmbtX>wgs08Gg>PVPN;fkQlj$(xRb_X^y>+FPp z+A3AsdcXDR-L|6kZmUVq)?(XF{nn4|H~$g!d1oe@CFYkE`0a0J&YUyny*%&pzUQ6) zeEPvh0Jh^}12KgIwwo!~esMCNDV`a3D|~PYmY1;{4y=r4IpdbsSNmXjmCT6cd8X|g z4OT7BKwM$f3Gi8xq)@fWTO0OPs z9f#satkeFaXWc>kE3$r_#`UruulR0Rp=p3z8Je8PTi%G7FIfsL1MZkv8Z|vzo}!mJ#&3yvu$ zDm=7MdOfrKFyH3#F1z~*&5;P+pV!jjeQ!u*iSGD zmLDwfb-J>&%@?tILIhSaN6o2Ve>Q%b4_zj4yZ+s=4|u*7>r;|`GPM$xPc1)-(RV+1I|mV#E*a3#nq%JC!e1>(`yJW8u2AZ8q$Woa zd>(H3K#s7ztZ}cfU59}UihfY=D;ho~S;Zs`hKnrsJdslU{ZiSCC>V5xoQV>l9?Esn zpd0sT+>ZxB8b`;^5yn8Fr*4WZAVO^(mI60NVt9jK>W;M)jA(_ZpWpo)BkR#TnvL@R;n( z$w>TDc*elf3fnJ7yvDOaQBBd2K%wa&Jg@Nre!{E>xfrbpA#x<5;PJ6I_H&J2%;D@s zFUjIRW$`7Am**A>HH-g}#n&`mpIgk=EdHB8^F!A{F6_FrG7*WAy=)&=FbksK@3<^E zWYbB!rSZ0e_F9%qyRv9z8ThTj&ZQ$zQ!h@j;d0qzj|TUy{`1U!@y;kBtm-lgXLDG-eIVC~W!C>Uq8uneOND0i7E2EYr6}JkzNh zcRd-h>`%RpSVN+nn|M*q|pZnAAp^?f{?dQ?XgDw6R+SkR;qf_Amx`)yoGuSDY zTaAus?48De=GKOlv$&nsACdQl6<+-8zhZGbu=oZ#DmJa4H5(xMZ$ygvyJsvS38!c?%OQQA!f6^4lT$S^=l^^Xzws=`@m$MKt1~}~W`0?nc`=%Kr8@I!H1kF{!!U`Ec~5qbHNXy9)Qtpo zq6xdmo*u^HR{FGue(dG1myy}e)=uJZ5GK3G`6%V9-sP*_-Gg7@*YqaAsQm_S66BaP zhLN9#c$Zi<6Y6t>`W&G?$MN{QS*rv39U>e9B+DST4iV(Tf!Z+G&5_!eG~topGNUT- zOn-=X?k0Y}OY-uk8T=)gOv;qjnh&#he=y?phw~b*3U(f)8gY2$ia=& O^HG#M|De7YE_@E#C)_^( literal 4340 zcmbtX`Bxj)75<(qJVtteA%qw&iLnzS3uDFLy0&q>V1rAHunU+tY14KDV=<1HQAUH8 zu5pt#>FVxn+9chat#y~Q3E-qn)8(h0p8f&-t^Y<(PuuU#3_@Ux4$k3lb>G!{_kH)f z%Z&c^-?!cYuov$pkiofH?8YMrJc1eP>+I`r)23Q;G&qo6Y#`V5?{V-o)&S@z@;_7(*&>)mlL>xPbBb3d`f(L zTE6&`*ghlLpGEtuXnzsyNzwi)eyRo)Od)>Uov;)d1_^&?dMammqh_u^OVgk` zZWhK&&z5y$jQf*zNuj^Wt&3;~7nWBhVmKhl@<_${qUT<)#(mp$LR1Qes`y?pB9a?k zr*Jwoc)`4AW~P0+kQuZ~e$RVxEL169fu2?@06)z2e9jr-y2wP@)-Oe*Q0Kc+7w)Bz zqB&01TNbl^r8v+0u_b4#(XiK##Vnv z6?Rt4olsm~^sJ)kSy9U74CM zj9Qn4DyA~&hw2#;s&KGM+)F@4Zse>K2;0k3!5+m-kH*WRY()i60`SWeMTiQsY3nLm2Vvm8ZXna)`U&A$x zuZ#8#5#Pi$1K-m4Hon8s()cdEr}2F}r_i~op3(Rq1~f)7pm4YAjqxZcp29~~S6hKpsUE5}VR{|cs)&z#Q5l;u!g7>NTc zN|T@zj;`XmWuIvZH6`El=)YMi?#wMS{YbSguAqwQGLNad#$Cr@2vO^t-VS=`QC{H$i{|T8M8c2rQ`0j6QXDT)aMH)I0E|$)|BN4V@7IVVBjGc z4g!75bO%l>-woXlDm3N`y_|ZX-(wstSI9?dKu#~$m|Z;5nlJP@^1=`u@|nzBbhK8A zV`P#q8Z4Mpf4}$<+!f=HW4bDhD-P2n{q>gT>Ha%(#>_V43&;3ga*>asVCF0AUpYUw zhs6RFRGjvCkI9*TiYV;86OVipEpR5;s|&MK##zG@3$;RpSGLM3zi5>!uQswu?9y$r z7U#ipK{xa>`&_Uo)-roR`gX4zK}B0<`69~t+c@r7rf-cd`xu&C#h6$+QG1A}O8-@$ zx#e`V-mN%Gb;*EI*dV37Tu^A^&z1~-CMm?^=}B!Z^)7T%?&azU+WBJyo6@sT>5exM z>zKisj$Jc|Q>o$q+SmDY4DX}77Y5}$h+_k4(TY0$?rFj%v|ux}E!f9zw}$TUe(dLp zj)QAepdG+LdQ#}YA%4pB|3D4@fRpJr5aXpr$4#tL80x%T_g|2)2;DY z=s?yPt??N&%wTvs9q31U z05{G3+qv%pI82Q|%D_)@?@@vk+pz$6FLfPRj?fFAl(Zxf`wton^!=L-`)P>rKulgD zxItpPN=Ag@c9PkUWsrBxp?S?5?vC@nhX3h~S+ocNIyr-T7U&LR=paG6cyA}xGndVb zVgo7N!d&iP78fXQFC%ZqLyU$)j&YyDAi>1sEhK{TPp%}=9N}!pQnU^=ZJNX8#=3tI z+m;#JJBRz4ww5hzk!4%ivOTigU$#6DS$2e$&TzR9$v&0}h_!|o6F7hd^0}Es&_>>O zljm+SeH6XuBdfzC@nKSEl0u12GDNiH=yK)g9>Wk$Gnxd>;S4@Rl4J577R7mrpOU>s zQr%9f+evjh_2vawEkW&_;st{&lq^XeBFU$NYr{l0M%TvVeK2xdWbI2n({Cg72>IKY zq+kJdB$G)oX|1`K!>(*p)SU}A)(0nt8TbfG@@z%=(&YftQGji{=WNt5W4tehhyM>w C1jf_= diff --git a/target/classes/io/github/hydos/ginger/engine/terrain/Terrain.class b/target/classes/io/github/hydos/ginger/engine/terrain/Terrain.class index 58bfa48b0d4445cbdbf86dc98a876e1c66285c6d..365d633f8f475feba532da9a98520cbe87f6395c 100644 GIT binary patch literal 5781 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 diff --git a/target/classes/io/github/hydos/ginger/engine/utils/Loader.class b/target/classes/io/github/hydos/ginger/engine/utils/Loader.class index 984d4efd05876bec5f809af36297f11352075a15..cbfc9b298f5ca3ccb2a73a49e2778643d916ee15 100644 GIT binary patch delta 535 zcmWNOTT4`76owz6DKa;;o!K+99mh^)O%~Y{I0bn?Dlati!m=7F%c1g+prs`khTtK> zwADrDkRY?Pw6cq`lXYAD0*U^K@74bHx8C)<>s{YcYAH2a=mzr0CT0mYnH9CPJCi72 z1?ySO2G+8P5QS`K3)MQ;vyC(fF6ib8#g@z+_I62Kg3E3qB*|xw^n2}ZZpJB9B_;Mg z9QIpf@U&CLO3KNhLi$RZ4mLUmr8%U(!+2Di8*1`ubW^LFBjVM`^Qb)QZ79?gZy>-i z)^MD4G!o{7oK8~ADS4+Y;`R7v#6K&?Ce3kE7p4+Ote+MSTeku1Uy~rze@LF4)rhyr~#T(^(s|2(3GRFY#;}4W^K_mW&_iBINx7K>z_g#B7HJchQaRX5n5VM4v%=0bdjwXtj z!!qWxoW&FqqLkIFq(JnW>IOC^h_QvY@v2{t*^>e;DV4IaD94YhcC^s-kkwc^#WLYk{+u%1wRd_Msi zSx6I0I6#9`-fj@&rlkum__yV_Uz@z6P2N>PBgz0vxo0y4{qaFnhg7|<>I3C@DA$ja_^~$r z#B%!VeLqMEEJfFA=6~ZLH!y1#M~@ diff --git a/target/classes/io/github/hydos/ginger/main/GingerMain.class b/target/classes/io/github/hydos/ginger/main/GingerMain.class new file mode 100644 index 0000000000000000000000000000000000000000..b165a2b1f52d02f1c676a8f8feae4d6fc2e2fec8 GIT binary patch literal 1679 zcmb_cTTc@~6#k}cS-KR86fEEkykN_1z2J)_8Z}}Yve*OOO6TmW_nMerCI-Xs3f<~ueHx6oEn+vzD ze7hwb*M1kuWr`*YfssA=QQA%E*6oeTo~i}{{VR^^1TO^o@`W7%2 zOv!Q8dZ$%U{n%DSyW?0U%55q zzm4Eq+H*T3&;=@5xQ+=ExeLjAl|4J;R`Mi$rZI^zfmD;LnDSr{g|I1uhR*N_{!|Y+ zL<-4J7I^i~F$f%7DqANR{g3?3;GT)Q0x!?Me4Rhn^IMWvupZ83xxcS!tl{H~-p2z0 zQ)hJJ^_sxuDM9@W;rH@Wctb@K4=<#7Va1pzT+K;b6;biTRc;}VdHpyS1jbJbbH~Cg zmb8W~@a4=Gc}|&kqrOUcoyN7OTgp&$b-c2ucvr6CH7xYD-DN~~G0^eTv9`R9UsbD) z?oF9q!&}mC2s2=3W48nhO6+JHO|ERtf^%~2I|jZ{NWkK#k3ngWV>(jcJj7K>cO33$ z<2*n8GY*mI*;@1g>h>WM+Ur#cS&YS2YdqIf2Il7uFd*o=DX~{m{}yg@)PC>8egp0&sWml!i0Sns%fgc6r4>`Cr&o~2$YYOkCwIwdZ;;Yqe6m86^B5Pf_mR1D`%s4U9H!F_FthK zkT`Hg{3yhD6Tulv&+}&ecHW!kU%$Wq0Pqq|o2Ut#m^?|1pOnL7ay`xq5}Rt5WXjm2 z(B6|4$ysg-udFYcXb5ah)m$YrWz*zhIMpLB&`h108-Fbz&IRIWnO%L%KWoR_m(C8Z zv>pp|vwW^IZT*UOympR_2IfXncE#SSFYmNTCzNfSj%LOh|5~8_?D?fY<18QR7%Y}p zLsVrwiRLo9Ezw$LcO+s&jkiBR6u2+ZCVjKFqz@!Ihy*tJ#_A7cHq`Eu8qPREub+?9 z>{2;X@zr5;8b)ZNj(v&8=yD7{F@?a3{{L<7l|Xxtmu{rbP1SDw?_N);m13W>*7ueen)upX|+WdWYxfQ15wLFVWW D7mIi1 literal 0 HcmV?d00001 diff --git a/target/classes/shaders/contrastFragment.glsl b/target/classes/shaders/contrastFragment.glsl new file mode 100644 index 0000000..378e817 --- /dev/null +++ b/target/classes/shaders/contrastFragment.glsl @@ -0,0 +1,13 @@ +#version 140 + +in vec2 textureCoords; + +out vec4 out_Colour; + +uniform sampler2D colourTexture; + +void main(void){ + + out_Colour = texture(colourTexture, textureCoords); + +} \ No newline at end of file diff --git a/target/classes/shaders/contrastVertex.glsl b/target/classes/shaders/contrastVertex.glsl new file mode 100644 index 0000000..3d2fd8a --- /dev/null +++ b/target/classes/shaders/contrastVertex.glsl @@ -0,0 +1,12 @@ +#version 140 + +in vec2 position; + +out vec2 textureCoords; + +void main(void){ + + gl_Position = vec4(position, 0.0, 1.0); + textureCoords = position * 0.5 + 0.5; + +} \ No newline at end of file