Move the camera object out of the game map object
TODO: this commit impacts the performance. FPS decreased from ~60 to ~24, it should be immediately fixed.
This commit is contained in:
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.core.gc.Disposable;
|
||||
import com.bartlomiejpluta.base.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
|
||||
@@ -55,7 +56,7 @@ public class Mesh implements Renderable, Disposable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
glBindVertexArray(vaoId);
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.core.gl.render;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -33,13 +34,14 @@ public class DefaultRenderer implements Renderer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, Renderable renderable) {
|
||||
public void render(Window window, Camera camera, Renderable renderable) {
|
||||
clear();
|
||||
updateViewport(window);
|
||||
|
||||
shaderManager.selectShader("default").useSelectedShader();
|
||||
|
||||
renderable.render(window, shaderManager);
|
||||
camera.render(window, shaderManager);
|
||||
renderable.render(window, camera, shaderManager);
|
||||
|
||||
shaderManager.detachCurrentShader();
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@ package com.bartlomiejpluta.base.core.gl.render;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
|
||||
public interface Renderable {
|
||||
void render(Window window, ShaderManager shaderManager);
|
||||
void render(Window window, Camera camera, ShaderManager shaderManager);
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@ package com.bartlomiejpluta.base.core.gl.render;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gc.Cleanable;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
|
||||
public interface Renderer extends Cleanable {
|
||||
void init();
|
||||
void render(Window window, Renderable renderable);
|
||||
void render(Window window, Camera camera, Renderable renderable);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.core.gl.object.material.Material;
|
||||
import com.bartlomiejpluta.base.core.gl.object.mesh.Mesh;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.base.core.world.object.RenderableObject;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.joml.Vector2f;
|
||||
@@ -34,9 +35,9 @@ public abstract class AnimationableObject extends RenderableObject {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
animate();
|
||||
super.render(window, shaderManager);
|
||||
super.render(window, camera, shaderManager);
|
||||
}
|
||||
|
||||
private void animate() {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.bartlomiejpluta.base.core.world.camera;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.object.PositionableObject;
|
||||
import org.joml.Matrix4f;
|
||||
@@ -19,4 +22,9 @@ public class Camera extends PositionableObject {
|
||||
.identity()
|
||||
.translate(-position.x, -position.y, 0);
|
||||
}
|
||||
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, getProjectionMatrix(window));
|
||||
shaderManager.setUniform(UniformName.UNI_VIEW_MATRIX, getViewMatrix());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.bartlomiejpluta.base.core.world.map;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.image.Image;
|
||||
import com.bartlomiejpluta.base.core.logic.Updatable;
|
||||
@@ -19,7 +18,6 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class GameMap implements Renderable, Updatable {
|
||||
private final Camera camera;
|
||||
private final TileSet tileSet;
|
||||
private final List<Layer> layers = new ArrayList<>();
|
||||
|
||||
@@ -34,8 +32,7 @@ public class GameMap implements Renderable, Updatable {
|
||||
@Getter
|
||||
private final Vector2f stepSize;
|
||||
|
||||
public GameMap(Camera camera, TileSet tileSet, int rows, int columns, float scale) {
|
||||
this.camera = camera;
|
||||
public GameMap(TileSet tileSet, int rows, int columns, float scale) {
|
||||
this.tileSet = tileSet;
|
||||
this.scale = scale;
|
||||
this.rows = rows;
|
||||
@@ -44,12 +41,9 @@ public class GameMap implements Renderable, Updatable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix(window));
|
||||
shaderManager.setUniform(UniformName.UNI_VIEW_MATRIX, camera.getViewMatrix());
|
||||
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
for (var layer : layers) {
|
||||
layer.render(window, shaderManager);
|
||||
layer.render(window, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,13 +4,14 @@ import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.image.Image;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
|
||||
public class ImageLayer implements Layer {
|
||||
|
||||
public enum Mode {
|
||||
NORMAL,
|
||||
FIT_SCREEN,
|
||||
FIT_MAP;
|
||||
FIT_MAP
|
||||
}
|
||||
|
||||
private final float mapWidth;
|
||||
@@ -36,7 +37,7 @@ public class ImageLayer implements Layer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
if (image == null) {
|
||||
return;
|
||||
}
|
||||
@@ -48,7 +49,7 @@ public class ImageLayer implements Layer {
|
||||
case FIT_MAP -> image.setScale(mapWidth / imageInitialWidth, mapHeight / imageInitialHeight);
|
||||
}
|
||||
|
||||
image.render(window, shaderManager);
|
||||
image.render(window, camera, shaderManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.base.core.world.map;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.base.core.world.movement.Direction;
|
||||
import com.bartlomiejpluta.base.core.world.movement.MovableObject;
|
||||
import org.joml.Vector2i;
|
||||
@@ -53,10 +54,9 @@ public class ObjectLayer implements Layer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
for (var object : objects) {
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix());
|
||||
object.render(window, shaderManager);
|
||||
object.render(window, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.bartlomiejpluta.base.core.world.map;
|
||||
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.base.core.world.tileset.model.Tile;
|
||||
import org.joml.Vector2f;
|
||||
|
||||
@@ -28,12 +28,11 @@ public class TileLayer implements Layer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
for (var row : layer) {
|
||||
for (var tile : row) {
|
||||
if (tile != null) {
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, tile.getModelMatrix());
|
||||
tile.render(window, shaderManager);
|
||||
tile.render(window, camera, shaderManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.bartlomiejpluta.base.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -23,16 +24,17 @@ public abstract class RenderableObject extends PositionableObject implements Ren
|
||||
private Material material;
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
public void render(Window window, Camera camera, ShaderManager shaderManager) {
|
||||
material.activateTextureIfExists();
|
||||
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, getModelMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_OBJECT_COLOR, material.getColor());
|
||||
shaderManager.setUniform(UniformName.UNI_HAS_OBJECT_TEXTURE, material.hasTexture());
|
||||
shaderManager.setUniform(UniformName.UNI_TEXTURE_SAMPLER, 0);
|
||||
shaderManager.setUniform(UniformName.UNI_SPRITE_SIZE, material.getSpriteSize());
|
||||
shaderManager.setUniform(UniformName.UNI_SPRITE_POSITION, material.getSpritePosition());
|
||||
|
||||
mesh.render(window, shaderManager);
|
||||
mesh.render(window, camera, shaderManager);
|
||||
}
|
||||
|
||||
public void setAlpha(float alpha) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.bartlomiejpluta.base.core.profiling.fps.FPSMonitor;
|
||||
import com.bartlomiejpluta.base.core.profiling.time.TimeProfilerService;
|
||||
import com.bartlomiejpluta.base.core.ui.Window;
|
||||
import com.bartlomiejpluta.base.core.util.mesh.MeshManager;
|
||||
import com.bartlomiejpluta.base.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.base.core.world.map.GameMap;
|
||||
import com.bartlomiejpluta.base.core.world.tileset.manager.TileSetManager;
|
||||
import com.bartlomiejpluta.base.game.world.entity.manager.EntityManager;
|
||||
@@ -30,6 +31,8 @@ public class DefaultGameLogic implements GameLogic {
|
||||
private final TimeProfilerService profiler;
|
||||
private final FPSMonitor fpsMonitor;
|
||||
|
||||
private final Camera camera = new Camera();
|
||||
|
||||
private GameMap map;
|
||||
|
||||
@Override
|
||||
@@ -52,7 +55,7 @@ public class DefaultGameLogic implements GameLogic {
|
||||
|
||||
@Override
|
||||
public void render(Window window) {
|
||||
renderer.render(window, map);
|
||||
renderer.render(window, camera, map);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user