Implement Texture Units, bugfix guessChannelCountAndInternalFormat
This commit is contained in:
@@ -4,9 +4,16 @@ out vec4 FragColour;
|
|||||||
in vec4 ourColour;
|
in vec4 ourColour;
|
||||||
in vec2 TexCoord;
|
in vec2 TexCoord;
|
||||||
|
|
||||||
uniform sampler2D ourTexture;
|
uniform sampler2D texture1;
|
||||||
|
uniform sampler2D texture2;
|
||||||
|
|
||||||
void main()
|
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 {
|
public class Mesh {
|
||||||
@Getter @Setter private int vaoID, vboID, eboID;
|
@Getter @Setter private int vaoID, vboID, eboID;
|
||||||
@Getter private Shader shader;
|
@Getter protected Shader shader;
|
||||||
@Getter float[] vertices;
|
@Getter float[] vertices;
|
||||||
@Getter int[] elements;
|
@Getter int[] elements;
|
||||||
|
|
||||||
|
|||||||
@@ -38,9 +38,15 @@ public class SplashScene extends Scene {
|
|||||||
Shader texturedShader = new Shader("assets/shaders/texture");
|
Shader texturedShader = new Shader("assets/shaders/texture");
|
||||||
texturedShader.init();
|
texturedShader.init();
|
||||||
Texture logoTexture = new Texture(225, 225, "assets/textures/plink.png");
|
Texture logoTexture = new Texture(225, 225, "assets/textures/plink.png");
|
||||||
|
Texture flameTexture = new Texture(2500, 2500, "assets/textures/flames.png");
|
||||||
logoTexture.init();
|
logoTexture.init();
|
||||||
|
flameTexture.init();
|
||||||
Mesh logoMesh =
|
Mesh logoMesh =
|
||||||
new TexturedMesh(texturedShader, logoTexture, logoRectVertices, screenCoverRectElements);
|
new TexturedMesh(
|
||||||
|
texturedShader,
|
||||||
|
new Texture[] {logoTexture, flameTexture},
|
||||||
|
logoRectVertices,
|
||||||
|
screenCoverRectElements);
|
||||||
logoMesh.init();
|
logoMesh.init();
|
||||||
setLogo(logoMesh);
|
setLogo(logoMesh);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,11 @@ public class Texture {
|
|||||||
case "png":
|
case "png":
|
||||||
setChannelCount(4);
|
setChannelCount(4);
|
||||||
setInternalFormat(GL_RGBA);
|
setInternalFormat(GL_RGBA);
|
||||||
|
break;
|
||||||
case "jpg":
|
case "jpg":
|
||||||
setChannelCount(3);
|
setChannelCount(3);
|
||||||
setInternalFormat(GL_RGB);
|
setInternalFormat(GL_RGB);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// just pray at this point
|
// just pray at this point
|
||||||
setChannelCount(3);
|
setChannelCount(3);
|
||||||
@@ -69,7 +71,7 @@ public class Texture {
|
|||||||
setTextureID(glGenTextures());
|
setTextureID(glGenTextures());
|
||||||
glBindTexture(GL_TEXTURE_2D, getTextureID());
|
glBindTexture(GL_TEXTURE_2D, getTextureID());
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
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();
|
setupFilterParameters();
|
||||||
setupWrapParameters();
|
setupWrapParameters();
|
||||||
|
|||||||
@@ -6,17 +6,17 @@ import static org.lwjgl.opengl.GL20.*;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
public class TexturedMesh extends Mesh {
|
public class TexturedMesh extends Mesh {
|
||||||
@Getter private Texture texture;
|
@Getter private Texture[] textures;
|
||||||
|
|
||||||
private final int TEXTURE_COORDS_SIZE = 2;
|
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);
|
super(shader, vertexArray, elementArray);
|
||||||
this.texture = texture;
|
this.textures = textures;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TexturedMesh(Shader shader, Texture texture) {
|
public TexturedMesh(Shader shader, Texture[] textures) {
|
||||||
this(shader, texture, DEFAULT_VERTEX_ARRAY, DEFAULT_ELEMENT_ARRAY);
|
this(shader, textures, DEFAULT_VERTEX_ARRAY, DEFAULT_ELEMENT_ARRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int initialiseAttribPointers() {
|
protected int initialiseAttribPointers() {
|
||||||
@@ -34,8 +34,14 @@ public class TexturedMesh extends Mesh {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void glDraw() {
|
protected void glDraw() {
|
||||||
glActiveTexture(GL_TEXTURE0);
|
for (int i = 0; i < textures.length; i++) {
|
||||||
glBindTexture(GL_TEXTURE_2D, getTexture().getTextureID());
|
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();
|
super.glDraw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user