- remove DataStream class

This commit is contained in:
Magnus Norddahl 2019-08-08 20:06:35 +02:00
parent c665bfca86
commit 690a4d2e83
9 changed files with 32 additions and 190 deletions

View file

@ -12,6 +12,7 @@ using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.Geometry;
using System.Linq;
#endregion
@ -988,19 +989,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
}
//mesh
Mesh mesh = new Mesh(polyIndecesList.Count / 3, vertList.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements);
using(DataStream stream = mesh.VertexBuffer.Lock(LockFlags.None))
{
stream.WriteRange(vertList.ToArray());
}
mesh.VertexBuffer.Unlock();
using(DataStream stream = mesh.IndexBuffer.Lock(LockFlags.None))
{
stream.WriteRange(polyIndecesList.ToArray());
}
mesh.IndexBuffer.Unlock();
Mesh mesh = new Mesh(vertexElements, vertList.ToArray(), polyIndecesList.ToArray());
//store in result
result.Meshes.Add(mesh);
@ -1183,23 +1172,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
mde.Model.Textures.Add(texture);
// Create mesh
MeshFlags meshflags = MeshFlags.Managed;
if(indices.Count > ushort.MaxValue - 1) meshflags |= MeshFlags.Use32Bit;
Mesh mesh = new Mesh(facescount, verts.Count, meshflags, vertexElements);
DataStream mstream = mesh.VertexBuffer.Lock(LockFlags.None);
mstream.WriteRange(verts.ToArray());
mesh.VertexBuffer.Unlock();
mstream = mesh.IndexBuffer.Lock(LockFlags.None);
if(indices.Count > ushort.MaxValue - 1)
mstream.WriteRange(indices.ToArray());
else
foreach(int index in indices) mstream.Write((ushort)index);
mesh.IndexBuffer.Unlock();
Mesh mesh = new Mesh(vertexElements, verts.ToArray(), indices.ToArray());
// Add mesh
mde.Model.Meshes.Add(mesh);
@ -1718,19 +1691,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
private static void CreateMesh(ref MD3LoadResult result, List<WorldVertex> verts, List<int> indices)
{
//create mesh
Mesh mesh = new Mesh(indices.Count / 3, verts.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements);
using (DataStream stream = mesh.VertexBuffer.Lock(LockFlags.None))
{
stream.WriteRange(verts.ToArray());
}
mesh.VertexBuffer.Unlock();
using(DataStream stream = mesh.IndexBuffer.Lock(LockFlags.None))
{
stream.WriteRange(indices.ToArray());
}
mesh.IndexBuffer.Unlock();
Mesh mesh = new Mesh(vertexElements, verts.ToArray(), indices.ToArray());
//store in result
result.Meshes.Add(mesh);

View file

@ -30,10 +30,7 @@ namespace CodeImp.DoomBuilder.Rendering
#region High level mesh rendering
public class Mesh
{
public Mesh(int indexCount, int vertexCount, MeshFlags flags, VertexElement[] elements) { }
public VertexBuffer VertexBuffer { get; private set; }
public IndexBuffer IndexBuffer { get; private set; }
public Mesh(VertexElement[] vertexDecl, Array vertexData, Array indexData) { }
public void DrawSubset(int index) { }
@ -81,33 +78,13 @@ namespace CodeImp.DoomBuilder.Rendering
{
public VertexBuffer(int sizeInBytes) { }
public DataStream Lock(LockFlags flags) { return null; }
public DataStream Lock(int offset, int size, LockFlags flags) { return null; }
public void Unlock() { }
public object Tag { get; set; }
public void SetBufferData(Array data) { }
public void SetBufferSubdata(long destOffset, Array data) { }
public void SetBufferSubdata(long destOffset, Array data, long offset, long size) { }
public bool Disposed { get; private set; }
public void Dispose() { Disposed = true; }
}
public class IndexBuffer
{
public DataStream Lock(LockFlags flags) { return null; }
public void Unlock() { }
public bool Disposed { get; private set; }
public void Dispose() { Disposed = true; }
}
public class DataStream : IDisposable
{
public void Seek(long offset, System.IO.SeekOrigin origin) { }
public void Write(ushort v) { }
public void WriteRange(Array data) { }
public void WriteRange(Array data, long offset, long size) { }
public void Dispose() { }
}
#endregion
#region Textures
@ -188,8 +165,6 @@ namespace CodeImp.DoomBuilder.Rendering
public enum SamplerState { AddressU, AddressV, AddressW }
public enum TextureAddress { Wrap, Clamp }
public enum Format { Unknown, A8R8G8B8 }
public enum LockFlags { None, Discard }
public enum MeshFlags { Use32Bit, IndexBufferManaged, VertexBufferManaged, Managed }
public enum ShaderFlags { None, Debug }
public enum PrimitiveType { LineList, TriangleList, TriangleStrip }
public enum CubeMapFace { PositiveX, PositiveY, PositiveZ, NegativeX, NegativeY, NegativeZ }

View file

@ -391,11 +391,8 @@ namespace CodeImp.DoomBuilder.Rendering
thingsvertices = new VertexBuffer(THING_BUFFER_SIZE * 12 * sizeof(FlatVertex));
// Make screen vertices
DataStream stream = screenverts.Lock(LockFlags.Discard);
FlatVertex[] verts = CreateScreenVerts(structsize);
stream.WriteRange(verts);
screenverts.Unlock();
stream.Dispose();
screenverts.SetBufferData(verts);
// Force update of view
lastgridscale = -1f;
@ -1203,8 +1200,6 @@ namespace CodeImp.DoomBuilder.Rendering
// Anything to render?
if(things.Count > 0)
{
DataStream stream;
// Make alpha color
Color4 alphacolor = new Color4(alpha, 1.0f, 1.0f, 1.0f);
bool isthingsmode = (General.Editing.Mode.GetType().Name == "ThingsMode");
@ -1272,10 +1267,7 @@ namespace CodeImp.DoomBuilder.Rendering
if(buffercount == locksize)
{
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw!
graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2);
@ -1287,10 +1279,7 @@ namespace CodeImp.DoomBuilder.Rendering
}
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
if(buffercount > 0) stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
if(buffercount > 0) thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw what's still remaining
if(buffercount > 0)
@ -1421,10 +1410,7 @@ namespace CodeImp.DoomBuilder.Rendering
if(buffercount == locksize)
{
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw!
graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2);
@ -1437,10 +1423,7 @@ namespace CodeImp.DoomBuilder.Rendering
}
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
if(buffercount > 0) stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw what's still remaining
if(buffercount > 0) graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2);
@ -1474,10 +1457,7 @@ namespace CodeImp.DoomBuilder.Rendering
if(buffercount == locksize)
{
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw!
graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2);
@ -1489,10 +1469,7 @@ namespace CodeImp.DoomBuilder.Rendering
}
// Write to buffer
stream = thingsvertices.Lock(0, locksize * 6 * FlatVertex.Stride, LockFlags.Discard);
if(buffercount > 0) stream.WriteRange(verts, 0, buffercount * 6);
thingsvertices.Unlock();
stream.Dispose();
if(buffercount > 0) thingsvertices.SetBufferSubdata(0, verts, 0, buffercount * 6);
// Draw what's still remaining
if(buffercount > 0)
@ -1997,10 +1974,7 @@ namespace CodeImp.DoomBuilder.Rendering
// Write to buffer
VertexBuffer vb = new VertexBuffer(FlatVertex.Stride * verts.Length);
DataStream s = vb.Lock(LockFlags.Discard);
s.WriteRange(verts);
vb.Unlock();
s.Dispose();
vb.SetBufferData(verts);
// Set renderstates for rendering
graphics.SetRenderState(RenderState.CullMode, Cull.None);

View file

@ -720,10 +720,7 @@ namespace CodeImp.DoomBuilder.Rendering
}
VertexBuffer vb = new VertexBuffer(WorldVertex.Stride * verts.Length);
DataStream s = vb.Lock(LockFlags.Discard);
s.WriteRange(verts);
vb.Unlock();
s.Dispose();
vb.SetBufferData(verts);
//begin rendering
graphics.SetRenderState(RenderState.AlphaBlendEnable, true);

View file

@ -142,22 +142,15 @@ namespace CodeImp.DoomBuilder.Rendering
VertexBuffer b = new VertexBuffer(FlatVertex.Stride * set.Value.buffersizes[i]);
// Start refilling the buffer with sector geometry
DataStream bstream = b.Lock(LockFlags.Discard);
foreach(SurfaceEntry e in set.Value.entries)
{
if(e.bufferindex == i)
{
// Fill buffer
bstream.Seek(e.vertexoffset * FlatVertex.Stride, SeekOrigin.Begin);
bstream.WriteRange(e.floorvertices);
bstream.WriteRange(e.ceilvertices);
b.SetBufferSubdata(e.vertexoffset * FlatVertex.Stride, e.floorvertices);
b.SetBufferSubdata((e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
}
}
// Unlock buffer
b.Unlock();
bstream.Dispose();
// Add to list
set.Value.buffers[i] = b;
}
@ -246,7 +239,6 @@ namespace CodeImp.DoomBuilder.Rendering
// This ensures there is enough space for a given number of free entries (also adds new bufers if needed)
private void EnsureFreeBufferSpace(SurfaceBufferSet set, int freeentries)
{
DataStream bstream = null;
VertexBuffer vb = null;
// Check if we have to add entries
@ -301,15 +293,6 @@ namespace CodeImp.DoomBuilder.Rendering
// Reallocate a buffer
else
{
// Trash the old buffer
if(set.buffers[bufferindex].Tag != null)
{
bstream = (DataStream)set.buffers[bufferindex].Tag;
set.buffers[bufferindex].Unlock();
bstream.Dispose();
set.buffers[bufferindex].Tag = null;
}
if((set.buffers[bufferindex] != null) && !resourcesunloaded)
set.buffers[bufferindex].Dispose();
@ -331,7 +314,6 @@ namespace CodeImp.DoomBuilder.Rendering
{
// Make the new buffer and lock it
vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices);
bstream = vb.Lock(LockFlags.Discard);
}
// Start refilling the buffer with sector geometry
@ -340,9 +322,9 @@ namespace CodeImp.DoomBuilder.Rendering
{
if(!resourcesunloaded)
{
// Fill buffer
bstream.WriteRange(e.floorvertices);
bstream.WriteRange(e.ceilvertices);
// Fill buffer
set.buffers[bufferindex].SetBufferSubdata(vertexoffset * FlatVertex.Stride, e.floorvertices);
set.buffers[bufferindex].SetBufferSubdata((vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
}
// Set the new location in the buffer
@ -354,9 +336,6 @@ namespace CodeImp.DoomBuilder.Rendering
if(!resourcesunloaded)
{
// Unlock buffer
vb.Unlock();
bstream.Dispose();
set.buffers[bufferindex] = vb;
}
else
@ -465,26 +444,9 @@ namespace CodeImp.DoomBuilder.Rendering
if(!resourcesunloaded)
{
// Lock the buffer
DataStream bstream;
VertexBuffer vb = set.buffers[e.bufferindex];
if(vb.Tag == null)
{
// Note: DirectX warns me that I am not using LockFlags.Discard or LockFlags.NoOverwrite here,
// but we don't have much of a choice since we want to update our data and not destroy other data
bstream = vb.Lock(0, set.buffersizes[e.bufferindex] * FlatVertex.Stride, LockFlags.None);
vb.Tag = bstream;
lockedbuffers.Add(vb);
}
else
{
bstream = (DataStream)vb.Tag;
}
// Write the vertices to buffer
bstream.Seek(e.vertexoffset * FlatVertex.Stride, SeekOrigin.Begin);
bstream.WriteRange(e.floorvertices);
bstream.WriteRange(e.ceilvertices);
vb.SetBufferSubdata(e.vertexoffset * FlatVertex.Stride, e.floorvertices);
vb.SetBufferSubdata((e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
}
}
}
@ -511,17 +473,6 @@ namespace CodeImp.DoomBuilder.Rendering
{
if(!resourcesunloaded)
{
foreach(VertexBuffer vb in lockedbuffers)
{
if(vb.Tag != null)
{
DataStream bstream = (DataStream)vb.Tag;
vb.Unlock();
bstream.Dispose();
vb.Tag = null;
}
}
// Clear list
lockedbuffers = new List<VertexBuffer>();
}

View file

@ -344,15 +344,8 @@ namespace CodeImp.DoomBuilder.Rendering
textbuffer = new VertexBuffer(4 * FlatVertex.Stride);
}
//mxd. Lock the buffer
using(DataStream stream = textbuffer.Lock(LockFlags.Discard))
{
FlatQuad quad = new FlatQuad(PrimitiveType.TriangleStrip, beginx, beginy, beginx + texturesize.Width, beginy + texturesize.Height);
stream.WriteRange(quad.Vertices);
}
// Done filling the vertex buffer
textbuffer.Unlock();
FlatQuad quad = new FlatQuad(PrimitiveType.TriangleStrip, beginx, beginy, beginx + texturesize.Width, beginy + texturesize.Height);
textbuffer.SetBufferData(quad.Vertices);
}
else
{

View file

@ -85,8 +85,7 @@ namespace CodeImp.DoomBuilder.Rendering
v3, v0 };
upper = new VertexBuffer(WorldVertex.Stride * vu.Length);
upper.Lock(LockFlags.None).WriteRange(vu);
upper.Unlock();
upper.SetBufferData(vu);
WorldVertex[] vl = new[]{ c, v4,
c, v5,
@ -99,8 +98,7 @@ namespace CodeImp.DoomBuilder.Rendering
v7, v4 };
lower = new VertexBuffer(WorldVertex.Stride * vl.Length);
lower.Lock(LockFlags.None).WriteRange(vl);
lower.Unlock();
lower.SetBufferData(vl);
}
// This is called before a device is reset

View file

@ -140,18 +140,15 @@ namespace CodeImp.DoomBuilder.VisualModes
geobuffer = new VertexBuffer(WorldVertex.Stride * numverts);
// Fill the buffer
DataStream bufferstream = geobuffer.Lock(LockFlags.Discard);
foreach(VisualGeometry g in allgeometry)
{
if((g.Vertices != null) && (g.Vertices.Length > 0))
{
bufferstream.WriteRange(g.Vertices);
geobuffer.SetBufferSubdata(v * WorldVertex.Stride, g.Vertices);
g.VertexOffset = v;
v += g.Vertices.Length;
}
}
geobuffer.Unlock();
bufferstream.Dispose();
}
this.sector.UpdateFogColor(); //mxd

View file

@ -527,11 +527,8 @@ namespace CodeImp.DoomBuilder.VisualModes
// Make a new buffer
geobuffers[i] = new VertexBuffer(WorldVertex.Stride * vertices[i].Length);
// Fill the buffer
DataStream bufferstream = geobuffers[i].Lock(LockFlags.Discard);
bufferstream.WriteRange(vertices[i]);
geobuffers[i].Unlock();
bufferstream.Dispose();
// Fill the buffer
geobuffers[i].SetBufferData(vertices[i]);
}
}
@ -616,8 +613,7 @@ namespace CodeImp.DoomBuilder.VisualModes
WorldVertex[] cv = cageverts.ToArray();
cagelength = cv.Length / 2;
cagebuffer = new VertexBuffer(WorldVertex.Stride * cv.Length);
cagebuffer.Lock(LockFlags.None).WriteRange(cv);
cagebuffer.Unlock();
cagebuffer.SetBufferData(cv);
// Done
updatecage = false;