Implement Texture Units, bugfix guessChannelCountAndInternalFormat
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
BIN
assets/textures/flames.png
Normal file
BIN
assets/textures/flames.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user