- Simplify code

This commit is contained in:
Magnus Norddahl 2019-08-08 07:10:35 +02:00
parent e4b257a89a
commit 8f15e8d5e7
13 changed files with 104 additions and 177 deletions

View file

@ -3425,7 +3425,7 @@ namespace CodeImp.DoomBuilder.Data
// Make custom rendertarget // Make custom rendertarget
const int cubemaptexsize = 1024; const int cubemaptexsize = 1024;
Texture rendertarget = new Texture(cubemaptexsize, cubemaptexsize, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); Texture rendertarget = new Texture(cubemaptexsize, cubemaptexsize, 1, Format.A8R8G8B8);
// Start rendering // Start rendering
General.Map.Graphics.StartRendering(true, new Color4(), rendertarget, true); General.Map.Graphics.StartRendering(true, new Color4(), rendertarget, true);
@ -3453,7 +3453,7 @@ namespace CodeImp.DoomBuilder.Data
yscale *= 1.65f; yscale *= 1.65f;
// Make cubemap texture // Make cubemap texture
CubeTexture cubemap = new CubeTexture(cubemaptexsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); CubeTexture cubemap = new CubeTexture(cubemaptexsize, 1, Format.A8R8G8B8);
// Set render settings... // Set render settings...
General.Map.Graphics.SetRenderState(RenderState.ZEnable, false); General.Map.Graphics.SetRenderState(RenderState.ZEnable, false);
@ -3653,7 +3653,7 @@ namespace CodeImp.DoomBuilder.Data
// sides[] must contain 6 square Po2 images in this order: North, East, South, West, Top, Bottom // sides[] must contain 6 square Po2 images in this order: North, East, South, West, Top, Bottom
private static CubeTexture MakeSkyBox(Bitmap[] sides, int targetsize, bool fliptop) private static CubeTexture MakeSkyBox(Bitmap[] sides, int targetsize, bool fliptop)
{ {
CubeTexture cubemap = new CubeTexture(targetsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); CubeTexture cubemap = new CubeTexture(targetsize, 1, Format.A8R8G8B8);
// Draw faces // Draw faces
sides[3].RotateFlip(RotateFlipType.Rotate90FlipNone); sides[3].RotateFlip(RotateFlipType.Rotate90FlipNone);
@ -3679,21 +3679,7 @@ namespace CodeImp.DoomBuilder.Data
private static void DrawCubemapFace(CubeTexture texture, CubeMapFace face, Bitmap image) private static void DrawCubemapFace(CubeTexture texture, CubeMapFace face, Bitmap image)
{ {
DataRectangle rect = texture.LockRectangle(face, 0, LockFlags.None); texture.SetPixels(face, image);
if(rect.Data.CanWrite)
{
BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
int len = Math.Abs(data.Stride) * image.Height;
rect.Data.WriteRange(data.Scan0, len);
image.UnlockBits(data);
}
else
{
General.ErrorLogger.Add(ErrorType.Error, "Skybox creation failed: CubeTexture is unwritable...");
}
texture.UnlockRectangle(face, 0);
} }
private static Bitmap ResizeImage(Image image, int width, int height) private static Bitmap ResizeImage(Image image, int width, int height)
@ -3774,7 +3760,7 @@ namespace CodeImp.DoomBuilder.Data
// Classic skies textures can be NPo2 (and D3D Texture is resized to Po2 by default), // Classic skies textures can be NPo2 (and D3D Texture is resized to Po2 by default),
// so we need to explicitly specify the size // so we need to explicitly specify the size
return Texture.FromStream(ms, (int) ms.Length, image.Size.Width, image.Size.Height, 0, Usage.None, Format.Unknown, Pool.Managed); return Texture.FromStream(ms, (int) ms.Length, image.Size.Width, image.Size.Height, 0, Format.Unknown);
} }
} }

View file

@ -474,11 +474,11 @@ namespace CodeImp.DoomBuilder.Data
memstream.Seek(0, SeekOrigin.Begin); memstream.Seek(0, SeekOrigin.Begin);
if(dynamictexture) if(dynamictexture)
{ {
texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Usage.Dynamic, Format.A8R8G8B8, Pool.Default); texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Format.A8R8G8B8);
} }
else else
{ {
texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Usage.None, Format.Unknown, Pool.Managed); texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Format.Unknown);
} }
memstream.Dispose(); memstream.Dispose();
@ -505,30 +505,7 @@ namespace CodeImp.DoomBuilder.Data
{ {
if((texture != null) && !texture.Disposed) if((texture != null) && !texture.Disposed)
{ {
// Lock the bitmap and texture texture.SetPixels(bitmap);
BitmapData bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Size.Width, bitmap.Size.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
DataRectangle texdata = texture.LockRectangle(0, LockFlags.Discard);
// Copy data
int* bp = (int*)bmpdata.Scan0.ToPointer();
int* tp = (int*)texdata.Data.DataPointer.ToPointer();
for(int y = 0; y < bmpdata.Height; y++)
{
for(int x = 0; x < bmpdata.Width; x++)
{
*tp = *bp;
bp++;
tp++;
}
// Skip extra data in texture
int extrapitch = (texdata.Pitch >> 2) - bmpdata.Width;
tp += extrapitch;
}
// Unlock
texture.UnlockRectangle(0);
bitmap.UnlockBits(bmpdata);
} }
} }
} }

View file

@ -991,17 +991,17 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
//mesh //mesh
Mesh mesh = new Mesh(polyIndecesList.Count / 3, vertList.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements); Mesh mesh = new Mesh(polyIndecesList.Count / 3, vertList.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements);
using(DataStream stream = mesh.LockVertexBuffer(LockFlags.None)) using(DataStream stream = mesh.VertexBuffer.Lock(LockFlags.None))
{ {
stream.WriteRange(vertList.ToArray()); stream.WriteRange(vertList.ToArray());
} }
mesh.UnlockVertexBuffer(); mesh.VertexBuffer.Unlock();
using(DataStream stream = mesh.LockIndexBuffer(LockFlags.None)) using(DataStream stream = mesh.IndexBuffer.Lock(LockFlags.None))
{ {
stream.WriteRange(polyIndecesList.ToArray()); stream.WriteRange(polyIndecesList.ToArray());
} }
mesh.UnlockIndexBuffer(); mesh.IndexBuffer.Unlock();
//store in result //store in result
result.Meshes.Add(mesh); result.Meshes.Add(mesh);
@ -1177,7 +1177,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
using(Bitmap bmp = CreateVoxelTexture(palette)) bmp.Save(memstream, ImageFormat.Bmp); using(Bitmap bmp = CreateVoxelTexture(palette)) bmp.Save(memstream, ImageFormat.Bmp);
memstream.Seek(0, SeekOrigin.Begin); memstream.Seek(0, SeekOrigin.Begin);
Texture texture = Texture.FromStream(memstream, (int)memstream.Length, 64, 64, 0, Usage.None, Format.Unknown, Pool.Managed); Texture texture = Texture.FromStream(memstream, (int)memstream.Length, 64, 64, 0, Format.Unknown);
memstream.Dispose(); memstream.Dispose();
// Add texture // Add texture
@ -1189,11 +1189,11 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
Mesh mesh = new Mesh(facescount, verts.Count, meshflags, vertexElements); Mesh mesh = new Mesh(facescount, verts.Count, meshflags, vertexElements);
DataStream mstream = mesh.VertexBuffer.Lock(0, 0, LockFlags.None); DataStream mstream = mesh.VertexBuffer.Lock(LockFlags.None);
mstream.WriteRange(verts.ToArray()); mstream.WriteRange(verts.ToArray());
mesh.VertexBuffer.Unlock(); mesh.VertexBuffer.Unlock();
mstream = mesh.IndexBuffer.Lock(0, 0, LockFlags.None); mstream = mesh.IndexBuffer.Lock(LockFlags.None);
if(indices.Count > ushort.MaxValue - 1) if(indices.Count > ushort.MaxValue - 1)
mstream.WriteRange(indices.ToArray()); mstream.WriteRange(indices.ToArray());
@ -1703,14 +1703,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
if(bitmap != null) if(bitmap != null)
{ {
BitmapData bmlock = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat); texture.SetPixels(bitmap);
texture = new Texture(bitmap.Width, bitmap.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
DataRectangle textureLock = texture.LockRectangle(0, LockFlags.None);
textureLock.Data.WriteRange(bmlock.Scan0, bmlock.Height * bmlock.Stride);
bitmap.UnlockBits(bmlock);
texture.UnlockRectangle(0);
} }
} }
else else
@ -1728,17 +1721,17 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
//create mesh //create mesh
Mesh mesh = new Mesh(indices.Count / 3, verts.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements); Mesh mesh = new Mesh(indices.Count / 3, verts.Count, MeshFlags.Use32Bit | MeshFlags.IndexBufferManaged | MeshFlags.VertexBufferManaged, vertexElements);
using (DataStream stream = mesh.LockVertexBuffer(LockFlags.None)) using (DataStream stream = mesh.VertexBuffer.Lock(LockFlags.None))
{ {
stream.WriteRange(verts.ToArray()); stream.WriteRange(verts.ToArray());
} }
mesh.UnlockVertexBuffer(); mesh.VertexBuffer.Unlock();
using(DataStream stream = mesh.LockIndexBuffer(LockFlags.None)) using(DataStream stream = mesh.IndexBuffer.Lock(LockFlags.None))
{ {
stream.WriteRange(indices.ToArray()); stream.WriteRange(indices.ToArray());
} }
mesh.UnlockIndexBuffer(); mesh.IndexBuffer.Unlock();
//store in result //store in result
result.Meshes.Add(mesh); result.Meshes.Add(mesh);

View file

@ -36,11 +36,6 @@ namespace CodeImp.DoomBuilder.Rendering
public VertexBuffer VertexBuffer { get; private set; } public VertexBuffer VertexBuffer { get; private set; }
public IndexBuffer IndexBuffer { get; private set; } public IndexBuffer IndexBuffer { get; private set; }
public DataStream LockVertexBuffer(LockFlags flags) { return null; }
public DataStream LockIndexBuffer(LockFlags flags) { return null; }
public void UnlockVertexBuffer() { }
public void UnlockIndexBuffer() { }
public void DrawSubset(int index) { } public void DrawSubset(int index) { }
public void Dispose() { } public void Dispose() { }
@ -53,7 +48,6 @@ namespace CodeImp.DoomBuilder.Rendering
public void SetTexture(EffectHandle handle, BaseTexture texture) { } public void SetTexture(EffectHandle handle, BaseTexture texture) { }
public void SetValue<T>(EffectHandle handle, T value) where T : struct { } public void SetValue<T>(EffectHandle handle, T value) where T : struct { }
public EffectHandle GetParameter(EffectHandle parameter, string name) { return null; } public EffectHandle GetParameter(EffectHandle parameter, string name) { return null; }
public string Technique { set; private get; }
public void CommitChanges() { } public void CommitChanges() { }
public void Begin() { } public void Begin() { }
@ -86,8 +80,9 @@ namespace CodeImp.DoomBuilder.Rendering
#region Buffer objects #region Buffer objects
public class VertexBuffer public class VertexBuffer
{ {
public VertexBuffer(int sizeInBytes, Usage usage, Pool pool) { } public VertexBuffer(int sizeInBytes) { }
public DataStream Lock(LockFlags flags) { return null; }
public DataStream Lock(int offset, int size, LockFlags flags) { return null; } public DataStream Lock(int offset, int size, LockFlags flags) { return null; }
public void Unlock() { } public void Unlock() { }
@ -99,72 +94,69 @@ namespace CodeImp.DoomBuilder.Rendering
public class IndexBuffer public class IndexBuffer
{ {
public DataStream Lock(int offset, int size, LockFlags flags) { return null; } public DataStream Lock(LockFlags flags) { return null; }
public void Unlock() { } public void Unlock() { }
public object Tag { get; set; }
public bool Disposed { get; private set; } public bool Disposed { get; private set; }
public void Dispose() { Disposed = true; } public void Dispose() { Disposed = true; }
} }
#endregion
#region Textures
public class BaseTexture
{
public bool Disposed { get; }
public void Dispose() { }
}
public class Texture : BaseTexture
{
public Texture(int width, int height, int levels, Usage usage, Format format, Pool pool) { }
public int Width { get; private set; }
public int Height { get; private set; }
public object Tag { get; set; }
public DataRectangle LockRectangle(int level, LockFlags flags) { return null; }
public void UnlockRectangle(int level) { }
public static Texture FromStream(System.IO.Stream stream) { return null; }
public static Texture FromStream(System.IO.Stream stream, int length, int width, int height, int levels, Usage usage, Format format, Pool pool) { return null; }
}
public class CubeTexture : BaseTexture
{
public CubeTexture(int size, int levels, Usage usage, Format format, Pool pool) { }
public DataRectangle LockRectangle(CubeMapFace face, int level, LockFlags flags) { return null; }
public void UnlockRectangle(CubeMapFace face, int level) { }
}
#endregion
#region Locked buffer writing and reading
public class DataRectangle
{
public DataRectangle(int pitch, DataStream s) { Data = s; Pitch = pitch; }
public DataStream Data { get; private set; }
public int Pitch { get; private set; }
}
public class DataStream : IDisposable public class DataStream : IDisposable
{ {
public void Seek(long offset, System.IO.SeekOrigin origin) { } public void Seek(long offset, System.IO.SeekOrigin origin) { }
public void Write(ushort v) { } public void Write(ushort v) { }
public void Write(Array data, long offset, long size) { }
public void WriteRange(Array data) { } public void WriteRange(Array data) { }
public void WriteRange(Array data, long offset, long size) { } public void WriteRange(Array data, long offset, long size) { }
public void WriteRange(IntPtr data, long size) { }
public void Dispose() { } public void Dispose() { }
}
#endregion
public void ReadRange(Array data, long offset, long size) { } #region Textures
public class BaseTexture
{
public bool Disposed { get; private set; }
public void Dispose() { Disposed = true; }
}
public bool CanRead { get; private set; } public class Texture : BaseTexture
public bool CanWrite { get; private set; } {
public long Length { get; private set; } public Texture(int width, int height, int levels, Format format) { }
public IntPtr DataPointer { get; private set; }
public int Width { get; private set; }
public int Height { get; private set; }
public object Tag { get; set; }
public void SetPixels(System.Drawing.Bitmap bitmap)
{
/*
BitmapData bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Size.Width, bitmap.Size.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
DataRectangle textureLock = texture.LockRectangle(0, LockFlags.None);
textureLock.Data.WriteRange(bmlock.Scan0, bmlock.Height * bmlock.Stride);
texture.UnlockRectangle(0);
bitmap.UnlockBits(bmpdata);
*/
}
internal Plotter LockPlotter(int visibleWidth, int visibleHeight)
{
//return new Plotter((PixelColor*)plotlocked.Data.DataPointer.ToPointer(), plotlocked.Pitch / sizeof(PixelColor), Height, visibleWidth, visibleHeight);
return null;
}
public void UnlockPlotter() { }
public static Texture FromStream(System.IO.Stream stream) { return null; }
public static Texture FromStream(System.IO.Stream stream, int length, int width, int height, int levels, Format format) { return null; }
}
public class CubeTexture : BaseTexture
{
public CubeTexture(int size, int levels, Format format) { }
public void SetPixels(CubeMapFace face, System.Drawing.Bitmap bitmap) { }
} }
#endregion #endregion
@ -197,8 +189,6 @@ namespace CodeImp.DoomBuilder.Rendering
public enum SamplerState { AddressU, AddressV, AddressW } public enum SamplerState { AddressU, AddressV, AddressW }
public enum TextureAddress { Wrap, Clamp } public enum TextureAddress { Wrap, Clamp }
public enum Format { Unknown, A8R8G8B8 } public enum Format { Unknown, A8R8G8B8 }
public enum Usage { None, WriteOnly, Dynamic, RenderTarget }
public enum Pool { Default, Managed, SystemMemory }
public enum LockFlags { None, Discard } public enum LockFlags { None, Discard }
public enum MeshFlags { Use32Bit, IndexBufferManaged, VertexBufferManaged, Managed } public enum MeshFlags { Use32Bit, IndexBufferManaged, VertexBufferManaged, Managed }
public enum ShaderFlags { None, Debug } public enum ShaderFlags { None, Debug }

View file

@ -143,9 +143,6 @@ namespace CodeImp.DoomBuilder.Rendering
fxdata.Dispose(); fxdata.Dispose();
// Set the technique to use
fx.Technique = manager.ShaderTechnique;
// Return result // Return result
return fx; return fx;
} }

View file

@ -67,9 +67,6 @@ namespace CodeImp.DoomBuilder.Rendering
private Texture overlaytex; private Texture overlaytex;
private Texture surfacetex; private Texture surfacetex;
// Locking data
private DataRectangle plotlocked;
// Rendertarget sizes // Rendertarget sizes
private Size windowsize; private Size windowsize;
private Size structsize; private Size structsize;
@ -365,11 +362,11 @@ namespace CodeImp.DoomBuilder.Rendering
windowsize.Height = graphics.RenderTarget.ClientSize.Height; windowsize.Height = graphics.RenderTarget.ClientSize.Height;
// Create rendertargets textures // Create rendertargets textures
plottertex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); plottertex = new Texture(windowsize.Width, windowsize.Height, 1, Format.A8R8G8B8);
thingstex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); thingstex = new Texture(windowsize.Width, windowsize.Height, 1, Format.A8R8G8B8);
backtex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); backtex = new Texture(windowsize.Width, windowsize.Height, 1, Format.A8R8G8B8);
overlaytex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); overlaytex = new Texture(windowsize.Width, windowsize.Height, 1, Format.A8R8G8B8);
surfacetex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); surfacetex = new Texture(windowsize.Width, windowsize.Height, 1, Format.A8R8G8B8);
// Get the real surface sizes // Get the real surface sizes
structsize.Width = plottertex.Width; structsize.Width = plottertex.Width;
@ -391,11 +388,11 @@ namespace CodeImp.DoomBuilder.Rendering
graphics.ClearTexture(General.Colors.Background.WithAlpha(0).ToColorValue(), overlaytex); graphics.ClearTexture(General.Colors.Background.WithAlpha(0).ToColorValue(), overlaytex);
// Create vertex buffers // Create vertex buffers
screenverts = new VertexBuffer(4 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, Pool.Default); screenverts = new VertexBuffer(4 * sizeof(FlatVertex));
thingsvertices = new VertexBuffer(THING_BUFFER_SIZE * 12 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, Pool.Default); thingsvertices = new VertexBuffer(THING_BUFFER_SIZE * 12 * sizeof(FlatVertex));
// Make screen vertices // Make screen vertices
DataStream stream = screenverts.Lock(0, 4 * sizeof(FlatVertex), LockFlags.Discard); DataStream stream = screenverts.Lock(LockFlags.Discard);
FlatVertex[] verts = CreateScreenVerts(structsize); FlatVertex[] verts = CreateScreenVerts(structsize);
stream.WriteRange(verts); stream.WriteRange(verts);
screenverts.Unlock(); screenverts.Unlock();
@ -636,11 +633,8 @@ namespace CodeImp.DoomBuilder.Rendering
// Rendertargets available? // Rendertargets available?
if(plottertex != null) if(plottertex != null)
{ {
// Lock structures rendertarget memory
plotlocked = plottertex.LockRectangle(0, LockFlags.None);
// Create structures plotter // Create structures plotter
plotter = new Plotter((PixelColor*)plotlocked.Data.DataPointer.ToPointer(), plotlocked.Pitch / sizeof(PixelColor), structsize.Height, structsize.Width, structsize.Height); plotter = plottertex.LockPlotter(structsize.Width, structsize.Height);
// Redraw grid when structures image was cleared // Redraw grid when structures image was cleared
if(clear) if(clear)
@ -726,8 +720,7 @@ namespace CodeImp.DoomBuilder.Rendering
// Clean up plotter // Clean up plotter
if(renderlayer == RenderLayers.Plotter) if(renderlayer == RenderLayers.Plotter)
{ {
if(plottertex != null) plottertex.UnlockRectangle(0); if(plottertex != null) plottertex.UnlockPlotter();
if(plotlocked.Data != null) plotlocked.Data.Dispose();
plotter = null; plotter = null;
} }
@ -795,11 +788,8 @@ namespace CodeImp.DoomBuilder.Rendering
if(lastgridsize != General.Map.Grid.GridSizeF || lastgridscale != scale || if(lastgridsize != General.Map.Grid.GridSizeF || lastgridscale != scale ||
lastgridx != offsetx || lastgridy != offsety || drawmapcenter != lastdrawmapcenter) lastgridx != offsetx || lastgridy != offsety || drawmapcenter != lastdrawmapcenter)
{ {
// Lock background rendertarget memory
DataRectangle lockedrect = backtex.LockRectangle(0, LockFlags.None);
// Create a plotter // Create a plotter
Plotter gridplotter = new Plotter((PixelColor*)lockedrect.Data.DataPointer.ToPointer(), lockedrect.Pitch / sizeof(PixelColor), backsize.Height, backsize.Width, backsize.Height); Plotter gridplotter = backtex.LockPlotter(backsize.Width, backsize.Height);
gridplotter.Clear(); gridplotter.Clear();
if(General.Settings.RenderGrid) //mxd if(General.Settings.RenderGrid) //mxd
@ -853,8 +843,7 @@ namespace CodeImp.DoomBuilder.Rendering
} }
// Done // Done
backtex.UnlockRectangle(0); backtex.UnlockPlotter();
lockedrect.Data.Dispose();
lastgridscale = scale; lastgridscale = scale;
lastgridsize = General.Map.Grid.GridSizeF; lastgridsize = General.Map.Grid.GridSizeF;
lastgridx = offsetx; lastgridx = offsetx;
@ -2008,8 +1997,8 @@ namespace CodeImp.DoomBuilder.Rendering
} }
// Write to buffer // Write to buffer
VertexBuffer vb = new VertexBuffer(FlatVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); VertexBuffer vb = new VertexBuffer(FlatVertex.Stride * verts.Length);
DataStream s = vb.Lock(0, FlatVertex.Stride * verts.Length, LockFlags.Discard); DataStream s = vb.Lock(LockFlags.Discard);
s.WriteRange(verts); s.WriteRange(verts);
vb.Unlock(); vb.Unlock();
s.Dispose(); s.Dispose();

View file

@ -720,8 +720,8 @@ namespace CodeImp.DoomBuilder.Rendering
} }
} }
VertexBuffer vb = new VertexBuffer(WorldVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); VertexBuffer vb = new VertexBuffer(WorldVertex.Stride * verts.Length);
DataStream s = vb.Lock(0, WorldVertex.Stride * verts.Length, LockFlags.Discard); DataStream s = vb.Lock(LockFlags.Discard);
s.WriteRange(verts); s.WriteRange(verts);
vb.Unlock(); vb.Unlock();
s.Dispose(); s.Dispose();

View file

@ -30,9 +30,6 @@ namespace CodeImp.DoomBuilder.Rendering
#region ================== Variables #region ================== Variables
// Settings
private readonly string shadertechnique;
// Shaders // Shaders
private Display2DShader display2dshader; private Display2DShader display2dshader;
private Things2DShader things2dshader; private Things2DShader things2dshader;
@ -48,7 +45,6 @@ namespace CodeImp.DoomBuilder.Rendering
#region ================== Properties #region ================== Properties
public string ShaderTechnique { get { return shadertechnique; } }
public Display2DShader Display2D { get { return display2dshader; } } public Display2DShader Display2D { get { return display2dshader; } }
public Things2DShader Things2D { get { return things2dshader; } } public Things2DShader Things2D { get { return things2dshader; } }
public World3DShader World3D { get { return world3dshader; } } public World3DShader World3D { get { return world3dshader; } }
@ -64,7 +60,6 @@ namespace CodeImp.DoomBuilder.Rendering
{ {
// Initialize // Initialize
this.device = device; this.device = device;
shadertechnique = "SM20"; //mxd
// Load // Load
ReloadResource(); ReloadResource();

View file

@ -140,10 +140,10 @@ namespace CodeImp.DoomBuilder.Rendering
for(int i = 0; i < set.Value.buffersizes.Count; i++) for(int i = 0; i < set.Value.buffersizes.Count; i++)
{ {
// Make the new buffer! // Make the new buffer!
VertexBuffer b = new VertexBuffer(FlatVertex.Stride * set.Value.buffersizes[i], Usage.WriteOnly | Usage.Dynamic, Pool.Default); VertexBuffer b = new VertexBuffer(FlatVertex.Stride * set.Value.buffersizes[i]);
// Start refilling the buffer with sector geometry // Start refilling the buffer with sector geometry
DataStream bstream = b.Lock(0, FlatVertex.Stride * set.Value.buffersizes[i], LockFlags.Discard); DataStream bstream = b.Lock(LockFlags.Discard);
foreach(SurfaceEntry e in set.Value.entries) foreach(SurfaceEntry e in set.Value.entries)
{ {
if(e.bufferindex == i) if(e.bufferindex == i)
@ -280,7 +280,7 @@ namespace CodeImp.DoomBuilder.Rendering
if(!resourcesunloaded) if(!resourcesunloaded)
{ {
// Make the new buffer! // Make the new buffer!
vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices, Usage.WriteOnly | Usage.Dynamic, Pool.Default); vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices);
// Add it. // Add it.
set.buffers.Add(vb); set.buffers.Add(vb);
@ -331,8 +331,8 @@ namespace CodeImp.DoomBuilder.Rendering
if(!resourcesunloaded) if(!resourcesunloaded)
{ {
// Make the new buffer and lock it // Make the new buffer and lock it
vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices, Usage.WriteOnly | Usage.Dynamic, Pool.Default); vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices);
bstream = vb.Lock(0, FlatVertex.Stride * theseentries.Count * verticesperentry, LockFlags.Discard); bstream = vb.Lock(LockFlags.Discard);
} }
// Start refilling the buffer with sector geometry // Start refilling the buffer with sector geometry

View file

@ -336,17 +336,17 @@ namespace CodeImp.DoomBuilder.Rendering
img.Save(memstream, ImageFormat.Bmp); img.Save(memstream, ImageFormat.Bmp);
memstream.Seek(0, SeekOrigin.Begin); memstream.Seek(0, SeekOrigin.Begin);
texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, 1, Usage.None, Format.Unknown, Pool.Managed); texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, 1, Format.Unknown);
} }
//mxd. Create the buffer //mxd. Create the buffer
if(textbuffer == null || textbuffer.Disposed) if(textbuffer == null || textbuffer.Disposed)
{ {
textbuffer = new VertexBuffer(4 * FlatVertex.Stride, Usage.Dynamic | Usage.WriteOnly, Pool.Default); textbuffer = new VertexBuffer(4 * FlatVertex.Stride);
} }
//mxd. Lock the buffer //mxd. Lock the buffer
using(DataStream stream = textbuffer.Lock(0, 4 * FlatVertex.Stride, LockFlags.Discard)) using(DataStream stream = textbuffer.Lock(LockFlags.Discard))
{ {
FlatQuad quad = new FlatQuad(PrimitiveType.TriangleStrip, beginx, beginy, beginx + texturesize.Width, beginy + texturesize.Height); FlatQuad quad = new FlatQuad(PrimitiveType.TriangleStrip, beginx, beginy, beginx + texturesize.Width, beginy + texturesize.Height);
stream.WriteRange(quad.Vertices); stream.WriteRange(quad.Vertices);

View file

@ -84,8 +84,8 @@ namespace CodeImp.DoomBuilder.Rendering
v2, v3, v2, v3,
v3, v0 }; v3, v0 };
upper = new VertexBuffer(WorldVertex.Stride * vu.Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); upper = new VertexBuffer(WorldVertex.Stride * vu.Length);
upper.Lock(0, WorldVertex.Stride * vu.Length, LockFlags.None).WriteRange(vu); upper.Lock(LockFlags.None).WriteRange(vu);
upper.Unlock(); upper.Unlock();
WorldVertex[] vl = new[]{ c, v4, WorldVertex[] vl = new[]{ c, v4,
@ -98,8 +98,8 @@ namespace CodeImp.DoomBuilder.Rendering
v6, v7, v6, v7,
v7, v4 }; v7, v4 };
lower = new VertexBuffer(WorldVertex.Stride * vl.Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); lower = new VertexBuffer(WorldVertex.Stride * vl.Length);
lower.Lock(0, WorldVertex.Stride * vl.Length, LockFlags.None).WriteRange(vl); lower.Lock(LockFlags.None).WriteRange(vl);
lower.Unlock(); lower.Unlock();
} }

View file

@ -138,10 +138,10 @@ namespace CodeImp.DoomBuilder.VisualModes
if(numverts > 0) if(numverts > 0)
{ {
// Make a new buffer // Make a new buffer
geobuffer = new VertexBuffer(WorldVertex.Stride * numverts, Usage.WriteOnly | Usage.Dynamic, Pool.Default); geobuffer = new VertexBuffer(WorldVertex.Stride * numverts);
// Fill the buffer // Fill the buffer
DataStream bufferstream = geobuffer.Lock(0, WorldVertex.Stride * numverts, LockFlags.Discard); DataStream bufferstream = geobuffer.Lock(LockFlags.Discard);
foreach(VisualGeometry g in allgeometry) foreach(VisualGeometry g in allgeometry)
{ {
if((g.Vertices != null) && (g.Vertices.Length > 0)) if((g.Vertices != null) && (g.Vertices.Length > 0))

View file

@ -526,10 +526,10 @@ namespace CodeImp.DoomBuilder.VisualModes
for(int i = 0; i < vertices.Length; i++) for(int i = 0; i < vertices.Length; i++)
{ {
// Make a new buffer // Make a new buffer
geobuffers[i] = new VertexBuffer(WorldVertex.Stride * vertices[i].Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); geobuffers[i] = new VertexBuffer(WorldVertex.Stride * vertices[i].Length);
// Fill the buffer // Fill the buffer
DataStream bufferstream = geobuffers[i].Lock(0, WorldVertex.Stride * vertices[i].Length, LockFlags.Discard); DataStream bufferstream = geobuffers[i].Lock(LockFlags.Discard);
bufferstream.WriteRange(vertices[i]); bufferstream.WriteRange(vertices[i]);
geobuffers[i].Unlock(); geobuffers[i].Unlock();
bufferstream.Dispose(); bufferstream.Dispose();
@ -616,8 +616,8 @@ namespace CodeImp.DoomBuilder.VisualModes
// Create buffer // Create buffer
WorldVertex[] cv = cageverts.ToArray(); WorldVertex[] cv = cageverts.ToArray();
cagelength = cv.Length / 2; cagelength = cv.Length / 2;
cagebuffer = new VertexBuffer(WorldVertex.Stride * cv.Length, Usage.WriteOnly | Usage.Dynamic, Pool.Default); cagebuffer = new VertexBuffer(WorldVertex.Stride * cv.Length);
cagebuffer.Lock(0, WorldVertex.Stride * cv.Length, LockFlags.None).WriteRange(cv); cagebuffer.Lock(LockFlags.None).WriteRange(cv);
cagebuffer.Unlock(); cagebuffer.Unlock();
// Done // Done