Fix light support
This commit is contained in:
@@ -27,8 +27,6 @@ public class Material implements Renderable {
|
||||
|
||||
if (texture != null) {
|
||||
shaderManager.setUniform(UniformName.UNI_HAS_OBJECT_TEXTURE, true);
|
||||
shaderManager.setUniform(UniformName.UNI_SPRITE_SIZE, texture.getSpriteFragment());
|
||||
shaderManager.setUniform(UniformName.UNI_SPRITE_POSITION, spritePosition);
|
||||
shaderManager.setUniform(UniformName.UNI_TEXTURE_SAMPLER, 0);
|
||||
texture.activate();
|
||||
} else {
|
||||
|
||||
@@ -8,14 +8,13 @@ import java.util.function.Consumer;
|
||||
@RequiredArgsConstructor
|
||||
public enum Shader {
|
||||
DEFAULT("default", "/shaders/default.vs", "/shaders/default.fs", shaderManager -> {
|
||||
shaderManager.createUniform(UniformName.UNI_VIEW_MODEL_MATRIX)
|
||||
shaderManager
|
||||
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_VIEW_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX)
|
||||
.createUniform(UniformName.UNI_OBJECT_COLOR)
|
||||
.createUniform(UniformName.UNI_HAS_OBJECT_TEXTURE)
|
||||
.createUniform(UniformName.UNI_OBJECT_COLOR)
|
||||
.createUniform(UniformName.UNI_TEXTURE_SAMPLER)
|
||||
.createUniform(UniformName.UNI_SPRITE_SIZE)
|
||||
.createUniform(UniformName.UNI_SPRITE_POSITION)
|
||||
.createUniform(UniformName.UNI_AMBIENT)
|
||||
.createUniform(UniformName.UNI_ACTIVE_LIGHTS)
|
||||
.createCounter(CounterName.LIGHT);
|
||||
@@ -27,13 +26,6 @@ public enum Shader {
|
||||
shaderManager.createUniform(UniformName.UNI_LIGHTS + "[" + i + "].linearAttenuation");
|
||||
shaderManager.createUniform(UniformName.UNI_LIGHTS + "[" + i + "].quadraticAttenuation");
|
||||
}
|
||||
}),
|
||||
|
||||
BATCH("batch", "/shaders/batch.vs", "/shaders/batch.fs", shaderManager -> {
|
||||
shaderManager
|
||||
.createUniform(UniformName.UNI_VIEW_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX)
|
||||
.createUniform(UniformName.UNI_TEXTURE_SAMPLER);
|
||||
});
|
||||
|
||||
public final String name;
|
||||
|
||||
@@ -7,8 +7,6 @@ public interface UniformName {
|
||||
String UNI_OBJECT_COLOR = "objectColor";
|
||||
String UNI_HAS_OBJECT_TEXTURE = "hasTexture";
|
||||
String UNI_TEXTURE_SAMPLER = "sampler";
|
||||
String UNI_SPRITE_SIZE = "spriteSize";
|
||||
String UNI_SPRITE_POSITION = "spritePosition";
|
||||
String UNI_LIGHTS = "lights";
|
||||
String UNI_ACTIVE_LIGHTS = "activeLights";
|
||||
String UNI_AMBIENT = "ambient";
|
||||
|
||||
@@ -3,10 +3,9 @@ package com.bartlomiejpluta.base.engine.world.map.layer.autotile;
|
||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
||||
import com.bartlomiejpluta.base.engine.world.autotile.model.AutoTileSet;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.tile.ChunkManager;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager;
|
||||
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||
import lombok.NonNull;
|
||||
import org.joml.Vector2f;
|
||||
@@ -112,6 +111,7 @@ public abstract class BaseAutoTileLayer extends BaseLayer {
|
||||
}
|
||||
|
||||
chunkManager.render(screen, camera, shaderManager);
|
||||
// super.render(screen, camera, shaderManager);
|
||||
|
||||
super.render(screen, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,19 +106,17 @@ public class DefaultImageLayer extends BaseLayer implements ImageLayer {
|
||||
|
||||
@Override
|
||||
public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
|
||||
if (image != null) {
|
||||
if (parallax) {
|
||||
var cameraPosition = camera.getPosition();
|
||||
image.setPosition(cameraPosition.x() + x, cameraPosition.y() + y);
|
||||
}
|
||||
|
||||
if (mode == ImageLayerMode.FIT_SCREEN) {
|
||||
image.setScale(screen.getWidth() / imageWidth, screen.getHeight() / imageHeight);
|
||||
}
|
||||
|
||||
image.render(screen, camera, shaderManager);
|
||||
if (parallax) {
|
||||
var cameraPosition = camera.getPosition();
|
||||
image.setPosition(cameraPosition.x() + x, cameraPosition.y() + y);
|
||||
}
|
||||
|
||||
if (mode == ImageLayerMode.FIT_SCREEN) {
|
||||
image.setScale(screen.getWidth() / imageWidth, screen.getHeight() / imageHeight);
|
||||
}
|
||||
|
||||
image.render(screen, camera, shaderManager);
|
||||
|
||||
super.render(screen, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,22 +4,19 @@ import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.map.layer.tile.TileLayer;
|
||||
import com.bartlomiejpluta.base.api.map.model.GameMap;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.base.BaseLayer;
|
||||
import com.bartlomiejpluta.base.engine.world.map.layer.util.ChunkManager;
|
||||
import com.bartlomiejpluta.base.engine.world.tileset.model.TileSet;
|
||||
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||
import lombok.NonNull;
|
||||
|
||||
public class DefaultTileLayer extends BaseLayer implements TileLayer {
|
||||
private final Texture tileSet;
|
||||
private final ChunkManager chunkManager;
|
||||
|
||||
public DefaultTileLayer(@NonNull GameMap map, @NonNull TileSet tileSet, int rows, int columns) {
|
||||
super(map);
|
||||
|
||||
this.tileSet = tileSet.getTileSet();
|
||||
|
||||
this.chunkManager = new ChunkManager(tileSet.getTileSet(), rows, columns);
|
||||
this.chunkManager = new ChunkManager(tileSet.texture(), rows, columns);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,5 +32,6 @@ public class DefaultTileLayer extends BaseLayer implements TileLayer {
|
||||
@Override
|
||||
public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
|
||||
chunkManager.render(screen, camera, shaderManager);
|
||||
super.render(screen, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.tile;
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.util;
|
||||
|
||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
@@ -1,7 +1,8 @@
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.tile;
|
||||
package com.bartlomiejpluta.base.engine.world.map.layer.util;
|
||||
|
||||
import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.QuadTemplate;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
||||
@@ -16,6 +17,7 @@ import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||
|
||||
public class TileChunk extends Model implements Placeable, Renderable, Disposable, BoundingBox {
|
||||
private final Texture tileSet;
|
||||
private final Material material;
|
||||
private final Mesh mesh;
|
||||
private final int chunkSize;
|
||||
private final QuadTemplate template;
|
||||
@@ -28,6 +30,7 @@ public class TileChunk extends Model implements Placeable, Renderable, Disposabl
|
||||
|
||||
public TileChunk(Texture tileSet, int chunkSize, float originX, float originY) {
|
||||
this.tileSet = tileSet;
|
||||
this.material = Material.textured(tileSet);
|
||||
this.chunkSize = chunkSize;
|
||||
this.mesh = new Mesh(chunkSize * chunkSize);
|
||||
this.template = new QuadTemplate(tileSet.getSpriteSize().x(), tileSet.getSpriteSize().y(), originX, originY);
|
||||
@@ -61,15 +64,13 @@ public class TileChunk extends Model implements Placeable, Renderable, Disposabl
|
||||
|
||||
@Override
|
||||
public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
|
||||
tileSet.activate();
|
||||
material.render(screen, camera, shaderManager);
|
||||
|
||||
shaderManager.activateShader(Shader.BATCH.name);
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, getModelMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_VIEW_MODEL_MATRIX, camera.computeViewModelMatrix(getModelMatrix()));
|
||||
shaderManager.setUniform(UniformName.UNI_TEXTURE_SAMPLER, 0);
|
||||
|
||||
mesh.render(screen, camera, shaderManager);
|
||||
shaderManager.deactivateShader();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,7 +82,7 @@ public class TileChunk extends Model implements Placeable, Renderable, Disposabl
|
||||
@Override
|
||||
public float getMaxX() {
|
||||
float scaledOriginX = originX * scaleX;
|
||||
float scaledChunkWidth = chunkSize * tileSet.getSpriteSize().x() *scaleX;
|
||||
float scaledChunkWidth = chunkSize * tileSet.getSpriteSize().x() * scaleX;
|
||||
return getPosition().x() + scaledChunkWidth - scaledOriginX;
|
||||
}
|
||||
|
||||
@@ -92,15 +92,12 @@ public abstract class Sprite extends LocationableModel implements Renderable, Bo
|
||||
return;
|
||||
}
|
||||
|
||||
material.getTexture().activate();
|
||||
shaderManager.activateShader(Shader.BATCH.name);
|
||||
material.render(screen, camera, shaderManager);
|
||||
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, getModelMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_VIEW_MODEL_MATRIX, camera.computeViewModelMatrix(getModelMatrix()));
|
||||
shaderManager.setUniform(UniformName.UNI_TEXTURE_SAMPLER, 0);
|
||||
|
||||
quad.render(screen, camera, shaderManager);
|
||||
|
||||
shaderManager.deactivateShader();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,25 +1,7 @@
|
||||
package com.bartlomiejpluta.base.engine.world.tileset.model;
|
||||
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.object.texture.Texture;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
|
||||
@Getter
|
||||
public class TileSet {
|
||||
private final Texture tileSet;
|
||||
private final Material material;
|
||||
|
||||
public TileSet(@NonNull Texture tileSet) {
|
||||
this.tileSet = tileSet;
|
||||
this.material = Material.textured(tileSet);
|
||||
}
|
||||
|
||||
public Tile tileById(int id) {
|
||||
return new Tile(tileSet, id);
|
||||
}
|
||||
|
||||
public Tile tileAt(int row, int column) {
|
||||
return new Tile(tileSet, row, column);
|
||||
}
|
||||
public record TileSet(@NonNull Texture texture) {
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragmentTexCoord;
|
||||
|
||||
uniform sampler2D sampler;
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
void main() {
|
||||
fragColor = texture(sampler, fragmentTexCoord);
|
||||
|
||||
if (fragColor.a < 0.1) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
#version 330
|
||||
|
||||
uniform mat4 viewModelMatrix;
|
||||
uniform mat4 projectionMatrix;
|
||||
|
||||
layout(location=0) in vec2 position;
|
||||
layout(location=1) in vec2 texCoord;
|
||||
|
||||
out vec2 fragmentTexCoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = projectionMatrix * viewModelMatrix * vec4(position, 0.0, 1.0);
|
||||
fragmentTexCoord = texCoord;
|
||||
}
|
||||
@@ -25,7 +25,7 @@ out vec4 fragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = hasTexture == 1 ? objectColor * texture(sampler, fragmentTexCoord * spriteSize + spritePosition) : objectColor;
|
||||
vec4 color = hasTexture == 1 ? objectColor * texture(sampler, fragmentTexCoord) : objectColor;
|
||||
vec4 total = vec4(color.rgb * ambient, color.a);
|
||||
|
||||
for(int i=0; i<activeLights; ++i)
|
||||
|
||||
Reference in New Issue
Block a user