diff --git a/assets/shaders/texture.frag.glsl b/assets/shaders/texture.frag.glsl index 74e5d39..cda5df4 100644 --- a/assets/shaders/texture.frag.glsl +++ b/assets/shaders/texture.frag.glsl @@ -4,9 +4,16 @@ out vec4 FragColour; in vec4 ourColour; in vec2 TexCoord; -uniform sampler2D ourTexture; +uniform sampler2D texture1; +uniform sampler2D texture2; void main() { - FragColour = texture(ourTexture, TexCoord); + vec4 tex1Color = texture(texture1, TexCoord); + vec4 tex2Color = texture(texture2, TexCoord); + + if (tex2Color.a < 0.1) + tex2Color = tex1Color; + + FragColour = mix(tex1Color, tex2Color, 0.4f); } diff --git a/assets/textures/flames.png b/assets/textures/flames.png new file mode 100644 index 0000000..bff3177 Binary files /dev/null and b/assets/textures/flames.png differ diff --git a/src/main/java/org/hirw/game/Mesh.java b/src/main/java/org/hirw/game/Mesh.java index d5e429c..1dedbfa 100644 --- a/src/main/java/org/hirw/game/Mesh.java +++ b/src/main/java/org/hirw/game/Mesh.java @@ -12,7 +12,7 @@ import org.lwjgl.BufferUtils; public class Mesh { @Getter @Setter private int vaoID, vboID, eboID; - @Getter private Shader shader; + @Getter protected Shader shader; @Getter float[] vertices; @Getter int[] elements; diff --git a/src/main/java/org/hirw/game/SplashScene.java b/src/main/java/org/hirw/game/SplashScene.java index 2d00af1..a2d0290 100644 --- a/src/main/java/org/hirw/game/SplashScene.java +++ b/src/main/java/org/hirw/game/SplashScene.java @@ -38,9 +38,15 @@ public class SplashScene extends Scene { Shader texturedShader = new Shader("assets/shaders/texture"); texturedShader.init(); Texture logoTexture = new Texture(225, 225, "assets/textures/plink.png"); + Texture flameTexture = new Texture(2500, 2500, "assets/textures/flames.png"); logoTexture.init(); + flameTexture.init(); Mesh logoMesh = - new TexturedMesh(texturedShader, logoTexture, logoRectVertices, screenCoverRectElements); + new TexturedMesh( + texturedShader, + new Texture[] {logoTexture, flameTexture}, + logoRectVertices, + screenCoverRectElements); logoMesh.init(); setLogo(logoMesh); } diff --git a/src/main/java/org/hirw/game/Texture.java b/src/main/java/org/hirw/game/Texture.java index dadb766..933d72c 100644 --- a/src/main/java/org/hirw/game/Texture.java +++ b/src/main/java/org/hirw/game/Texture.java @@ -39,9 +39,11 @@ public class Texture { case "png": setChannelCount(4); setInternalFormat(GL_RGBA); + break; case "jpg": setChannelCount(3); setInternalFormat(GL_RGB); + break; default: // just pray at this point setChannelCount(3); @@ -69,7 +71,7 @@ public class Texture { setTextureID(glGenTextures()); glBindTexture(GL_TEXTURE_2D, getTextureID()); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); setupFilterParameters(); setupWrapParameters(); diff --git a/src/main/java/org/hirw/game/TexturedMesh.java b/src/main/java/org/hirw/game/TexturedMesh.java index 4a7ea5c..83f1285 100644 --- a/src/main/java/org/hirw/game/TexturedMesh.java +++ b/src/main/java/org/hirw/game/TexturedMesh.java @@ -6,17 +6,17 @@ import static org.lwjgl.opengl.GL20.*; import lombok.Getter; public class TexturedMesh extends Mesh { - @Getter private Texture texture; + @Getter private Texture[] textures; private final int TEXTURE_COORDS_SIZE = 2; - public TexturedMesh(Shader shader, Texture texture, float[] vertexArray, int[] elementArray) { + public TexturedMesh(Shader shader, Texture[] textures, float[] vertexArray, int[] elementArray) { super(shader, vertexArray, elementArray); - this.texture = texture; + this.textures = textures; } - public TexturedMesh(Shader shader, Texture texture) { - this(shader, texture, DEFAULT_VERTEX_ARRAY, DEFAULT_ELEMENT_ARRAY); + public TexturedMesh(Shader shader, Texture[] textures) { + this(shader, textures, DEFAULT_VERTEX_ARRAY, DEFAULT_ELEMENT_ARRAY); } protected int initialiseAttribPointers() { @@ -34,8 +34,14 @@ public class TexturedMesh extends Mesh { } protected void glDraw() { - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, getTexture().getTextureID()); + for (int i = 0; i < textures.length; i++) { + int textureUnitIndexStart = GL_TEXTURE0; + int textureUnitIndex = textureUnitIndexStart + i; + glActiveTexture(textureUnitIndex); + glBindTexture(GL_TEXTURE_2D, getTextures()[i].getTextureID()); + String uniformName = "texture" + Integer.toString(i + 1); + glUniform1i(glGetUniformLocation(getShader().getShaderProgramID(), uniformName), i); + } super.glDraw(); } }