Fix #2106.
The current tilesets only use only ~3% of the available sheet space, so a future patch may want to look into decreasing the terrain sheet size to save some GPU memory.
This commit is contained in:
@@ -18,8 +18,8 @@ namespace OpenRA.Graphics
|
|||||||
{
|
{
|
||||||
class TerrainRenderer
|
class TerrainRenderer
|
||||||
{
|
{
|
||||||
|
SheetBuilder sheetBuilder;
|
||||||
IVertexBuffer<Vertex> vertexBuffer;
|
IVertexBuffer<Vertex> vertexBuffer;
|
||||||
Sheet terrainSheet;
|
|
||||||
|
|
||||||
World world;
|
World world;
|
||||||
Map map;
|
Map map;
|
||||||
@@ -29,11 +29,12 @@ namespace OpenRA.Graphics
|
|||||||
this.world = world;
|
this.world = world;
|
||||||
this.map = world.Map;
|
this.map = world.Map;
|
||||||
|
|
||||||
|
// TODO: Use a fixed sheet size specified in the tileset yaml
|
||||||
|
sheetBuilder = new SheetBuilder(SheetType.Indexed);
|
||||||
var tileSize = new Size(Game.CellSize, Game.CellSize);
|
var tileSize = new Size(Game.CellSize, Game.CellSize);
|
||||||
var tileMapping = new Cache<TileReference<ushort,byte>, Sprite>(
|
var tileMapping = new Cache<TileReference<ushort,byte>, Sprite>(
|
||||||
x => Game.modData.SheetBuilder.Add(world.TileSet.GetBytes(x), tileSize, false));
|
x => sheetBuilder.Add(world.TileSet.GetBytes(x), tileSize, false));
|
||||||
|
|
||||||
terrainSheet = tileMapping[map.MapTiles.Value[map.Bounds.Left, map.Bounds.Top]].sheet;
|
|
||||||
var terrainPalette = wr.Palette("terrain").Index;
|
var terrainPalette = wr.Palette("terrain").Index;
|
||||||
var vertices = new Vertex[4 * map.Bounds.Height * map.Bounds.Width];
|
var vertices = new Vertex[4 * map.Bounds.Height * map.Bounds.Width];
|
||||||
int nv = 0;
|
int nv = 0;
|
||||||
@@ -84,7 +85,7 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
|
Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
|
||||||
vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
|
vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
|
||||||
PrimitiveType.QuadList, terrainSheet);
|
PrimitiveType.QuadList, sheetBuilder.Current);
|
||||||
|
|
||||||
foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
|
foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
|
||||||
r.Render(wr);
|
r.Render(wr);
|
||||||
|
|||||||
Reference in New Issue
Block a user