diff --git a/shaders/frag.frag b/shaders/frag.frag index 01a4d15..9642779 100644 --- a/shaders/frag.frag +++ b/shaders/frag.frag @@ -3,10 +3,12 @@ out vec4 FragColor; in vec3 ourColor; in vec2 TexCoord; +in vec4 position; -uniform sampler2D ourTexture; +uniform sampler2D texture1; +uniform sampler2D texture2; void main() { - FragColor = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0f); + FragColor = mix(texture(texture1, TexCoord), texture(texture2, vec2(TexCoord.x, -TexCoord.y)), position.x * position.y); } \ No newline at end of file diff --git a/shaders/vert.vert b/shaders/vert.vert index 311ec24..fac18d7 100644 --- a/shaders/vert.vert +++ b/shaders/vert.vert @@ -5,10 +5,12 @@ layout (location = 2) in vec2 aTexCoord; out vec3 ourColor; out vec2 TexCoord; +out vec4 position; void main() { gl_Position = vec4(aPos, 1.0); ourColor = aColor; TexCoord = aTexCoord; + position = gl_Position; } \ No newline at end of file diff --git a/src/engine/Primitive.java b/src/engine/Primitive.java index e4a44df..e072155 100644 --- a/src/engine/Primitive.java +++ b/src/engine/Primitive.java @@ -1,5 +1,7 @@ package engine; +import engine.math.Vector3f; + public class Primitive { public float[] vertices; @@ -74,10 +76,10 @@ public class Primitive { }; public static float[] rectangle_texture = new float[]{ - 1.0f, 1.0f, - 1.0f, 0.0f, + 2.0f, 2.0f, + 2.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f + 0.0f, 2.0f }; public static byte[] rectangle_indices = new byte[] { diff --git a/src/engine/Scene.java b/src/engine/Scene.java index 5f791cf..a6f136a 100644 --- a/src/engine/Scene.java +++ b/src/engine/Scene.java @@ -1,13 +1,17 @@ package engine; -import static org.lwjgl.opengl.GL11.*; +import engine.graphics.Shader; +import engine.graphics.Texture; +import engine.graphics.VertexArray; public class Scene { float[] vertices; float[] color; float[] texture; + float[] texture2; Texture texture_map; + Texture texture_map2; byte[] indices; VertexArray vertexArray; @@ -25,15 +29,21 @@ public class Scene { this.indices = indices; this.color = color; this.shader = new Shader(vertPath, fragPath); - this.texture_map = new Texture("textures/container.jpg"); + this.texture_map = new Texture("textures/container.jpg", 0); this.texture = texture; + this.texture_map2 = new Texture("textures/awesomeface.png", 1); + this.texture2 = texture; this.vertexArray = new VertexArray(this.vertices, this.indices, this.color, this.texture); + shader.setUniform1i("texture1", 0); + shader.setUniform1i("texture2", 1); } public void render(){ this.shader.enable(); this.texture_map.bind(); + this.texture_map2.bind(); this.vertexArray.render(); + this.texture_map2.unbind(); this.texture_map.unbind(); this.shader.disable(); } diff --git a/src/engine/Shader.java b/src/engine/graphics/Shader.java similarity index 94% rename from src/engine/Shader.java rename to src/engine/graphics/Shader.java index c656a3d..19ae290 100644 --- a/src/engine/Shader.java +++ b/src/engine/graphics/Shader.java @@ -1,4 +1,8 @@ -package engine; +package engine.graphics; + +import engine.math.Matrix4f; +import engine.utils.ShaderUtils; +import engine.math.Vector3f; import java.util.HashMap; import java.util.Map; diff --git a/src/engine/Texture.java b/src/engine/graphics/Texture.java similarity index 81% rename from src/engine/Texture.java rename to src/engine/graphics/Texture.java index f3f8675..78a23a4 100644 --- a/src/engine/Texture.java +++ b/src/engine/graphics/Texture.java @@ -1,4 +1,7 @@ -package engine; +package engine.graphics; + +import engine.utils.BufferUtils; +import org.lwjgl.opengl.GL11; import java.awt.image.BufferedImage; import java.io.FileInputStream; @@ -13,8 +16,10 @@ public class Texture { private int width, height; private int texture; + private int index; - public Texture(String path) { + public Texture(String path, int index) { + this.index = index; texture = load(path); } @@ -44,13 +49,14 @@ public class Texture { glBindTexture(GL_TEXTURE_2D, result); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtils.createIntBuffer(data)); + GL11.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtils.createIntBuffer(data)); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); return result; } public void bind() { + glActiveTexture(GL_TEXTURE0 + this.index); glBindTexture(GL_TEXTURE_2D, texture); } diff --git a/src/engine/VertexArray.java b/src/engine/graphics/VertexArray.java similarity index 94% rename from src/engine/VertexArray.java rename to src/engine/graphics/VertexArray.java index 9727ec3..f76c654 100644 --- a/src/engine/VertexArray.java +++ b/src/engine/graphics/VertexArray.java @@ -1,4 +1,7 @@ -package engine; +package engine.graphics; + +import engine.utils.BufferUtils; +import org.lwjgl.opengl.GL15; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL15.*; @@ -20,7 +23,7 @@ public class VertexArray { EBO = glGenBuffers(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW); + GL15.glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); diff --git a/src/engine/Matrix4f.java b/src/engine/math/Matrix4f.java similarity index 97% rename from src/engine/Matrix4f.java rename to src/engine/math/Matrix4f.java index 2c1dcc2..f8be361 100644 --- a/src/engine/Matrix4f.java +++ b/src/engine/math/Matrix4f.java @@ -1,4 +1,6 @@ -package engine; +package engine.math; + +import engine.utils.BufferUtils; import java.nio.FloatBuffer; diff --git a/src/engine/Vector3f.java b/src/engine/math/Vector3f.java similarity index 92% rename from src/engine/Vector3f.java rename to src/engine/math/Vector3f.java index 928e33b..af4015b 100644 --- a/src/engine/Vector3f.java +++ b/src/engine/math/Vector3f.java @@ -1,4 +1,4 @@ -package engine; +package engine.math; public class Vector3f { diff --git a/src/engine/BufferUtils.java b/src/engine/utils/BufferUtils.java similarity index 97% rename from src/engine/BufferUtils.java rename to src/engine/utils/BufferUtils.java index 234dc77..d420b8e 100644 --- a/src/engine/BufferUtils.java +++ b/src/engine/utils/BufferUtils.java @@ -1,4 +1,4 @@ -package engine; +package engine.utils; import java.nio.ByteBuffer; import java.nio.ByteOrder; diff --git a/src/engine/FileUtils.java b/src/engine/utils/FileUtils.java similarity index 96% rename from src/engine/FileUtils.java rename to src/engine/utils/FileUtils.java index 1191880..4f82877 100644 --- a/src/engine/FileUtils.java +++ b/src/engine/utils/FileUtils.java @@ -1,4 +1,4 @@ -package engine; +package engine.utils; import java.io.BufferedReader; import java.io.FileNotFoundException; diff --git a/src/engine/ShaderUtils.java b/src/engine/utils/ShaderUtils.java similarity index 97% rename from src/engine/ShaderUtils.java rename to src/engine/utils/ShaderUtils.java index caaf6ac..69879ba 100644 --- a/src/engine/ShaderUtils.java +++ b/src/engine/utils/ShaderUtils.java @@ -1,4 +1,6 @@ -package engine; +package engine.utils; + +import engine.utils.FileUtils; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL20.*; diff --git a/textures/awesomeface.png b/textures/awesomeface.png new file mode 100644 index 0000000..c7bfec6 Binary files /dev/null and b/textures/awesomeface.png differ