git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1119 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
BIN
BluntDx.dll
BIN
BluntDx.dll
Binary file not shown.
@@ -6,6 +6,7 @@ using System.Drawing;
|
|||||||
using BluntDirectX.Direct3D;
|
using BluntDirectX.Direct3D;
|
||||||
using OpenRa.FileFormats;
|
using OpenRa.FileFormats;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace OpenRa.Game
|
namespace OpenRa.Game
|
||||||
{
|
{
|
||||||
@@ -21,6 +22,58 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
const string mapName = "scm12ea.ini";
|
const string mapName = "scm12ea.ini";
|
||||||
|
|
||||||
|
Dictionary<TileReference, SheetRectangle<Sheet>> tileMapping =
|
||||||
|
new Dictionary<TileReference, SheetRectangle<Sheet>>();
|
||||||
|
|
||||||
|
FvfVertexBuffer<Vertex> vertexBuffer;
|
||||||
|
IndexBuffer indexBuffer;
|
||||||
|
|
||||||
|
void LoadTextures()
|
||||||
|
{
|
||||||
|
List<Sheet> tempSheets = new List<Sheet>();
|
||||||
|
|
||||||
|
Provider<Sheet> sheetProvider = delegate
|
||||||
|
{
|
||||||
|
Sheet t = new Sheet( new Bitmap(256, 256));
|
||||||
|
tempSheets.Add(t);
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
TileSheetBuilder<Sheet> builder = new TileSheetBuilder<Sheet>( new Size(256,256), sheetProvider );
|
||||||
|
|
||||||
|
for( int i = 0; i < 128; i++ )
|
||||||
|
for (int j = 0; j < 128; j++)
|
||||||
|
{
|
||||||
|
TileReference tileRef = map.MapTiles[i, j];
|
||||||
|
|
||||||
|
if (!tileMapping.ContainsKey(tileRef))
|
||||||
|
{
|
||||||
|
SheetRectangle<Sheet> rect = builder.AddImage(new Size(24, 24));
|
||||||
|
Bitmap srcImage = tileSet.tiles[ tileRef.tile ].GetTile( tileRef.image );
|
||||||
|
using (Graphics g = Graphics.FromImage(rect.sheet.bitmap))
|
||||||
|
g.DrawImage(srcImage, rect.origin);
|
||||||
|
|
||||||
|
tileMapping.Add(tileRef, rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Sheet s in tempSheets)
|
||||||
|
s.LoadTexture(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoadVertexBuffer()
|
||||||
|
{
|
||||||
|
Vertex[] vertices = new Vertex[4 * map.Width * map.Height];
|
||||||
|
|
||||||
|
vertexBuffer = new FvfVertexBuffer<Vertex>(device, vertices.Length, Vertex.Format);
|
||||||
|
vertexBuffer.SetData(vertices);
|
||||||
|
|
||||||
|
ushort[] indices = new ushort[6 * map.Width * map.Height];
|
||||||
|
|
||||||
|
indexBuffer = new IndexBuffer(device, indices.Length);
|
||||||
|
indexBuffer.SetData(indices);
|
||||||
|
}
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
ClientSize = new Size(640, 480);
|
ClientSize = new Size(640, 480);
|
||||||
@@ -35,6 +88,9 @@ namespace OpenRa.Game
|
|||||||
Text = string.Format("OpenRA - {0} - {1}", map.Title, mapName);
|
Text = string.Format("OpenRA - {0} - {1}", map.Title, mapName);
|
||||||
|
|
||||||
tileSet = LoadTileSet(map);
|
tileSet = LoadTileSet(map);
|
||||||
|
|
||||||
|
LoadTextures();
|
||||||
|
LoadVertexBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Run()
|
internal void Run()
|
||||||
@@ -53,6 +109,11 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
// render something :)
|
// render something :)
|
||||||
|
|
||||||
|
//vertexBuffer.Bind(0);
|
||||||
|
//indexBuffer.Bind();
|
||||||
|
|
||||||
|
//device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 2 * map.Width * map.Height);
|
||||||
|
|
||||||
device.End();
|
device.End();
|
||||||
device.Present();
|
device.Present();
|
||||||
}
|
}
|
||||||
@@ -81,5 +142,7 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
return new TileSet(TileMix, TileSuffix, pal);
|
return new TileSet(TileMix, TileSuffix, pal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Sheet.cs" />
|
||||||
|
<Compile Include="Vertex.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OpenRa.FileFormats\OpenRa.FileFormats.csproj">
|
<ProjectReference Include="..\OpenRa.FileFormats\OpenRa.FileFormats.csproj">
|
||||||
|
|||||||
29
OpenRa.Game/Sheet.cs
Normal file
29
OpenRa.Game/Sheet.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Drawing;
|
||||||
|
using BluntDirectX.Direct3D;
|
||||||
|
using System.IO;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
|
||||||
|
namespace OpenRa.Game
|
||||||
|
{
|
||||||
|
class Sheet
|
||||||
|
{
|
||||||
|
public readonly Bitmap bitmap;
|
||||||
|
public Texture texture;
|
||||||
|
|
||||||
|
public Sheet(Bitmap b) { bitmap = b; }
|
||||||
|
|
||||||
|
public void LoadTexture(GraphicsDevice device)
|
||||||
|
{
|
||||||
|
string tempFile = string.Format("../../../block-cache-{0}.bmp", suffix++);
|
||||||
|
bitmap.Save(tempFile);
|
||||||
|
|
||||||
|
using( Stream s = File.OpenRead(tempFile) )
|
||||||
|
texture = Texture.Create(s, device);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int suffix = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
OpenRa.Game/Vertex.cs
Normal file
23
OpenRa.Game/Vertex.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using BluntDirectX.Direct3D;
|
||||||
|
|
||||||
|
namespace OpenRa.Game
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
struct Vertex
|
||||||
|
{
|
||||||
|
public float x, y, z, u, v;
|
||||||
|
|
||||||
|
public Vertex(float x, float y, float z, float u, float v)
|
||||||
|
{
|
||||||
|
this.x = x; this.y = y; this.z = z;
|
||||||
|
this.u = u;
|
||||||
|
this.v = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public const VertexFormat Format = VertexFormat.Position | VertexFormat.Texture;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user