Huge CPU usage reduction by using view clamp
This commit is contained in:
@@ -449,9 +449,9 @@ public class Render {
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
txquad.tx.bind();
|
||||
glBegin(GL_QUADS);
|
||||
setColor(tint);
|
||||
}
|
||||
|
||||
setColor(tint);
|
||||
|
||||
final RectDigest q = quad.digest();
|
||||
final RectDigest u = txquad.uvs.digest();
|
||||
|
||||
@@ -82,7 +82,7 @@ public class WorldRenderer extends RectProxy implements Pollable {
|
||||
}
|
||||
|
||||
|
||||
private int[] getOffset()
|
||||
private Vect getOffset()
|
||||
{
|
||||
WorldPos pos = player.getPosition();
|
||||
final double playerX = pos.getVisualX();
|
||||
@@ -90,29 +90,26 @@ public class WorldRenderer extends RectProxy implements Pollable {
|
||||
|
||||
double ts = tileSize.value();
|
||||
|
||||
return new int[]{(int) (-ts * playerX), (int) (-ts * playerY)};
|
||||
return Vect.make((-ts * playerX), (-ts * playerY));
|
||||
}
|
||||
|
||||
|
||||
public void render()
|
||||
{
|
||||
int[] off = getOffset();
|
||||
System.out.println(trc.getRectForTile(10, 10));
|
||||
|
||||
{
|
||||
Render.pushMatrix();
|
||||
Render.translate(off[0], off[1]);
|
||||
Render.setColor(RGB.WHITE);
|
||||
Render.translate(getOffset());
|
||||
|
||||
// tiles to render
|
||||
final WorldPos pos = player.getPosition();
|
||||
final double w = width().value();
|
||||
final double h = height().value();
|
||||
final double ts = tileSize.value();
|
||||
final double tsh = ts / 2;
|
||||
|
||||
final int x1 = (int) Math.floor(pos.x - (w / tsh));
|
||||
final int y1 = (int) Math.floor(pos.y - (h / tsh));
|
||||
final int x2 = (int) Math.ceil(pos.x + (w / tsh));
|
||||
final int y2 = (int) Math.ceil(pos.y + (h / tsh));
|
||||
final int x1 = (int) Math.floor(pos.x - (w / (ts*2)));
|
||||
final int y1 = (int) Math.floor(pos.y - (h / (ts*2)));
|
||||
final int x2 = (int) Math.ceil(pos.x + (w / (ts*2)));
|
||||
final int y2 = (int) Math.ceil(pos.y + (h / (ts*2)))+1;
|
||||
|
||||
// === TILES ===
|
||||
|
||||
@@ -121,11 +118,16 @@ public class WorldRenderer extends RectProxy implements Pollable {
|
||||
Render.enterBatchTexturedQuadMode(Res.getTexture("tiles16"));
|
||||
}
|
||||
|
||||
Render.setColor(RGB.WHITE);
|
||||
|
||||
int c = 0;
|
||||
for (trc.y = y1; trc.y <= y2; trc.y++) {
|
||||
for (trc.x = x1; trc.x <= x2; trc.x++) {
|
||||
trc.renderTile();
|
||||
c++;
|
||||
}
|
||||
}
|
||||
System.out.println(c);
|
||||
|
||||
if (USE_BATCH_RENDERING) {
|
||||
Render.leaveBatchTexturedQuadMode();
|
||||
@@ -167,8 +169,7 @@ public class WorldRenderer extends RectProxy implements Pollable {
|
||||
|
||||
public WorldPos getClickedTile(Vect clickPos)
|
||||
{
|
||||
int[] off = getOffset();
|
||||
Vect v = clickPos.sub(mapRect.origin().add(off[0], off[1]));
|
||||
Vect v = clickPos.sub(mapRect.origin().add(getOffset()));
|
||||
int ts = (int) tileSize.value();
|
||||
return new WorldPos(v.xi() / ts, v.yi() / ts);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package mightypork.rogue.world.level.render;
|
||||
|
||||
import mightypork.rogue.world.level.MapAccess;
|
||||
import mightypork.util.constraints.rect.Rect;
|
||||
import mightypork.util.constraints.rect.RectConst;
|
||||
import mightypork.util.constraints.rect.builders.TiledRect;
|
||||
|
||||
|
||||
@@ -13,33 +12,18 @@ public abstract class MapRenderContext {
|
||||
protected final TiledRect tiler;
|
||||
private final Rect mapRect;
|
||||
|
||||
private RectConst tileRects[][];
|
||||
|
||||
|
||||
public MapRenderContext(MapAccess map, Rect drawArea) {
|
||||
this.map = map;
|
||||
this.map = map;
|
||||
|
||||
this.tiler = drawArea.tiles(map.getWidth(), map.getHeight());
|
||||
this.mapRect = drawArea;
|
||||
|
||||
tileRects = new RectConst[map.getHeight()][map.getWidth()];
|
||||
|
||||
rebuildTileRects();
|
||||
}
|
||||
|
||||
|
||||
public void rebuildTileRects()
|
||||
{
|
||||
for(int y=0;y<map.getHeight();y++) {
|
||||
for(int x=0;x<map.getWidth();x++) {
|
||||
tileRects[y][x] = tiler.tile(x, y).freeze();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Rect getRectForTile(int x, int y)
|
||||
{
|
||||
return tileRects[y][x];
|
||||
return tiler.tile(x, y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -71,20 +71,17 @@ public abstract class RectMutable extends Rect {
|
||||
setTo(Vect.ZERO, Vect.ZERO);
|
||||
}
|
||||
|
||||
public abstract void setOrigin(double x, double y);
|
||||
|
||||
/**
|
||||
* Set new origin
|
||||
*
|
||||
* @param origin new origin
|
||||
*/
|
||||
public abstract void setOrigin(Vect origin);
|
||||
public void setOrigin(Vect origin) {
|
||||
setOrigin(origin.x(), origin.y());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set new size
|
||||
*
|
||||
* @param size new size
|
||||
*/
|
||||
public abstract void setSize(Vect size);
|
||||
public void setSize(Vect size) {
|
||||
setSize(size.x(), size.y());
|
||||
}
|
||||
|
||||
|
||||
public abstract void setSize(double x, double y);
|
||||
}
|
||||
|
||||
@@ -41,15 +41,15 @@ public class RectVar extends RectMutable {
|
||||
|
||||
|
||||
@Override
|
||||
public void setOrigin(Vect origin)
|
||||
public void setOrigin(double x, double y)
|
||||
{
|
||||
this.pos.setTo(origin);
|
||||
this.pos.setTo(x,y);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setSize(Vect size)
|
||||
public void setSize(double x, double y)
|
||||
{
|
||||
this.size.setTo(size);
|
||||
this.size.setTo(x,y);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user