From 1be047d316a43b73fcfb5ed7b5ec30bb6d7e21f7 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl <dpjudas@users.noreply.github.com> Date: Thu, 8 Aug 2019 03:19:11 +0200 Subject: [PATCH] - Simplify D3DDevice --- Source/Core/Controls/RenderTargetControl.cs | 8 - Source/Core/Data/DataManager.cs | 108 ++-- Source/Core/Data/ImageData.cs | 10 +- Source/Core/GZBuilder/md3/ModelReader.cs | 60 +- Source/Core/General/General.cs | 62 --- Source/Core/General/Launcher.cs | 1 - Source/Core/General/MapManager.cs | 2 - Source/Core/Rendering/D3DDevice.cs | 577 +++----------------- Source/Core/Rendering/D3DShader.cs | 8 +- Source/Core/Rendering/Display2DShader.cs | 6 +- Source/Core/Rendering/FlatQuad.cs | 2 +- Source/Core/Rendering/Renderer2D.cs | 558 +++++++++---------- Source/Core/Rendering/Renderer3D.cs | 341 ++++++------ Source/Core/Rendering/SurfaceManager.cs | 13 +- Source/Core/Rendering/TextLabel.cs | 9 +- Source/Core/Rendering/Things2DShader.cs | 8 +- Source/Core/Rendering/VisualVertexHandle.cs | 4 +- Source/Core/Rendering/World3DShader.cs | 2 +- Source/Core/SlimDX.cs | 260 +-------- Source/Core/VisualModes/VisualSector.cs | 3 +- Source/Core/VisualModes/VisualThing.cs | 5 +- Source/Core/Windows/MainForm.cs | 3 - 22 files changed, 603 insertions(+), 1447 deletions(-) diff --git a/Source/Core/Controls/RenderTargetControl.cs b/Source/Core/Controls/RenderTargetControl.cs index 20c13af93..5442b74b4 100755 --- a/Source/Core/Controls/RenderTargetControl.cs +++ b/Source/Core/Controls/RenderTargetControl.cs @@ -71,14 +71,6 @@ namespace CodeImp.DoomBuilder.Controls #region ================== Overrides - // Paint method - protected override void OnPaint(PaintEventArgs pe) - { - // Pass on to base - // Do we really want this? - if(!D3DDevice.IsRendering) base.RaisePaintEvent(this, pe); //mxd. Dont raise event when in the middle of rendering - } - //mxd protected override void OnKeyUp(KeyEventArgs e) { diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs index d3d921e66..2949f6091 100755 --- a/Source/Core/Data/DataManager.cs +++ b/Source/Core/Data/DataManager.cs @@ -920,7 +920,7 @@ namespace CodeImp.DoomBuilder.Data if(modeldefentries[type].LoadState != ModelLoadState.None) return true; //create models - ModelReader.Load(modeldefentries[type], containers, General.Map.Graphics.Device); + ModelReader.Load(modeldefentries[type], containers); if(modeldefentries[type].Model != null) { @@ -3310,24 +3310,17 @@ namespace CodeImp.DoomBuilder.Data General.ErrorLogger.Add(ErrorType.Warning, "Skybox creation failed: unable to load texture \"" + skytex + "\""); // Use the built-in texture - if(General.Map.Graphics.CheckAvailability()) - { - ImageData tex = LoadInternalTexture("MissingSky3D.png"); - tex.CreateTexture(); - Bitmap bmp = tex.GetBitmap(); - Bitmap sky; - lock (bmp) - { - sky = new Bitmap(bmp); - } - sky.RotateFlip(RotateFlipType.RotateNoneFlipX); // We don't want our built-in image mirrored... - skybox = MakeClassicSkyBox(sky); - tex.Dispose(); - } - else - { - General.ErrorLogger.Add(ErrorType.Warning, "Skybox creation failed: Direct3D device is not available"); - } + ImageData tex = LoadInternalTexture("MissingSky3D.png"); + tex.CreateTexture(); + Bitmap bmp = tex.GetBitmap(); + Bitmap sky; + lock (bmp) + { + sky = new Bitmap(bmp); + } + sky.RotateFlip(RotateFlipType.RotateNoneFlipX); // We don't want our built-in image mirrored... + skybox = MakeClassicSkyBox(sky); + tex.Dispose(); } } @@ -3426,38 +3419,26 @@ namespace CodeImp.DoomBuilder.Data } // Get Device and shader... - Device device = General.Map.Graphics.Device; World3DShader effect = General.Map.Graphics.Shaders.World3D; // Make custom rendertarget const int cubemaptexsize = 1024; - Surface rendertarget = Surface.CreateRenderTarget(device, cubemaptexsize, cubemaptexsize, Format.A8R8G8B8, MultisampleType.None, 0, false); - Surface depthbuffer = Surface.CreateDepthStencil(device, cubemaptexsize, cubemaptexsize, General.Map.Graphics.DepthBuffer.Description.Format, MultisampleType.None, 0, false); + Texture rendertarget = new Texture(cubemaptexsize, cubemaptexsize, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); - // Start rendering - if(!General.Map.Graphics.StartRendering(true, new Color4(), rendertarget, depthbuffer)) - { - General.ErrorLogger.Add(ErrorType.Error, "Skybox creation failed: unable to start rendering..."); - - // Get rid of unmanaged stuff... - rendertarget.Dispose(); - depthbuffer.Dispose(); - - // No dice... - return null; - } + // Start rendering + General.Map.Graphics.StartRendering(true, new Color4(), rendertarget, true); // Load the skysphere model... BoundingBoxSizes bbs = new BoundingBoxSizes(); Stream modeldata = General.ThisAssembly.GetManifestResourceStream("CodeImp.DoomBuilder.Resources.SkySphere.md3"); - ModelReader.MD3LoadResult meshes = ModelReader.ReadMD3Model(ref bbs, new Dictionary<int, string>(), modeldata, device, 0); + ModelReader.MD3LoadResult meshes = ModelReader.ReadMD3Model(ref bbs, new Dictionary<int, string>(), modeldata, 0); if(meshes.Meshes.Count != 3) throw new Exception("Skybox creation failed: " + (string.IsNullOrEmpty(meshes.Errors) ? "skybox model must contain 3 surfaces" : meshes.Errors)); // Make skysphere textures... - Texture texside = TextureFromBitmap(device, skyimage); - Texture textop = TextureFromBitmap(device, topimg); - Texture texbottom = TextureFromBitmap(device, bottomimg); + Texture texside = TextureFromBitmap(skyimage); + Texture textop = TextureFromBitmap(topimg); + Texture texbottom = TextureFromBitmap(bottomimg); // Calculate model scaling (gl.skydone.cpp:RenderDome() in GZDoom) float yscale; @@ -3470,14 +3451,13 @@ namespace CodeImp.DoomBuilder.Data yscale *= 1.65f; // Make cubemap texture - CubeTexture cubemap = new CubeTexture(device, cubemaptexsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); - Surface sysmemsurf = Surface.CreateOffscreenPlain(device, cubemaptexsize, cubemaptexsize, Format.A8R8G8B8, Pool.SystemMemory); - - // Set render settings... - device.SetRenderState(RenderState.ZEnable, false); - device.SetRenderState(RenderState.CullMode, Cull.None); - device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); - device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); + CubeTexture cubemap = new CubeTexture(cubemaptexsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + + // Set render settings... + General.Map.Graphics.SetRenderState(RenderState.ZEnable, false); + General.Map.Graphics.SetRenderState(RenderState.CullMode, Cull.None); + General.Map.Graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); + General.Map.Graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); // Setup matrices Vector3 offset = new Vector3(0f, 0f, -1.8f); // Sphere size is 10 mu @@ -3516,29 +3496,7 @@ namespace CodeImp.DoomBuilder.Data meshes.Meshes[j].DrawSubset(0); } - // Get rendered data from video memory... - device.GetRenderTargetData(rendertarget, sysmemsurf); - - // ...Then copy it to destination texture - Surface targetsurf = cubemap.GetCubeMapSurface((CubeMapFace)i, 0); - DataRectangle sourcerect = sysmemsurf.LockRectangle(LockFlags.NoSystemLock); - DataRectangle targetrect = targetsurf.LockRectangle(LockFlags.NoSystemLock); - - if(sourcerect.Data.CanRead && targetrect.Data.CanWrite) - { - byte[] data = new byte[sourcerect.Data.Length]; - sourcerect.Data.ReadRange(data, 0, (int)sourcerect.Data.Length); - targetrect.Data.Write(data, 0, data.Length); - } - else - { - General.ErrorLogger.Add(ErrorType.Error, "Skybox creation failed: unable to copy to CubeTexture surface..."); - } - - // Unlock and dispose - sysmemsurf.UnlockRectangle(); - targetsurf.UnlockRectangle(); - targetsurf.Dispose(); + General.Map.Graphics.CopyTexture(rendertarget, cubemap, (CubeMapFace)i); } // End rendering @@ -3548,8 +3506,6 @@ namespace CodeImp.DoomBuilder.Data // Dispose unneeded stuff rendertarget.Dispose(); - depthbuffer.Dispose(); - sysmemsurf.Dispose(); textop.Dispose(); texside.Dispose(); texbottom.Dispose(); @@ -3695,7 +3651,7 @@ namespace CodeImp.DoomBuilder.Data // 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) { - CubeTexture cubemap = new CubeTexture(General.Map.Graphics.Device, targetsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + CubeTexture cubemap = new CubeTexture(targetsize, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); // Draw faces sides[3].RotateFlip(RotateFlipType.Rotate90FlipNone); @@ -3721,7 +3677,7 @@ namespace CodeImp.DoomBuilder.Data private static void DrawCubemapFace(CubeTexture texture, CubeMapFace face, Bitmap image) { - DataRectangle rect = texture.LockRectangle(face, 0, LockFlags.NoSystemLock); + DataRectangle rect = texture.LockRectangle(face, 0, LockFlags.None); if(rect.Data.CanWrite) { @@ -3807,7 +3763,7 @@ namespace CodeImp.DoomBuilder.Data return Matrix.LookAtLH(eye, lookdir, updir); } - private static Texture TextureFromBitmap(Device device, Image image) + private static Texture TextureFromBitmap(Image image) { using(MemoryStream ms = new MemoryStream()) { @@ -3816,9 +3772,7 @@ namespace CodeImp.DoomBuilder.Data // Classic skies textures can be NPo2 (and D3D Texture is resized to Po2 by default), // so we need to explicitly specify the size - return Texture.FromStream(device, ms, (int) ms.Length, - image.Size.Width, image.Size.Height, 0, Usage.None, Format.Unknown, - Pool.Managed, Filter.None, Filter.None, 0); + return Texture.FromStream(ms, (int) ms.Length, image.Size.Width, image.Size.Height, 0, Usage.None, Format.Unknown, Pool.Managed); } } diff --git a/Source/Core/Data/ImageData.cs b/Source/Core/Data/ImageData.cs index 4dea7b137..134261d53 100755 --- a/Source/Core/Data/ImageData.cs +++ b/Source/Core/Data/ImageData.cs @@ -475,21 +475,17 @@ namespace CodeImp.DoomBuilder.Data memstream.Seek(0, SeekOrigin.Begin); if(dynamictexture) { - texture = Texture.FromStream(General.Map.Graphics.Device, memstream, (int)memstream.Length, - img.Size.Width, img.Size.Height, mipmaplevels, Usage.Dynamic, Format.A8R8G8B8, - Pool.Default, General.Map.Graphics.PostFilter, General.Map.Graphics.MipGenerateFilter, 0); + texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Usage.Dynamic, Format.A8R8G8B8, Pool.Default); } else { - texture = Texture.FromStream(General.Map.Graphics.Device, memstream, (int)memstream.Length, - img.Size.Width, img.Size.Height, mipmaplevels, Usage.None, Format.Unknown, - Pool.Managed, General.Map.Graphics.PostFilter, General.Map.Graphics.MipGenerateFilter, 0); + texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, mipmaplevels, Usage.None, Format.Unknown, Pool.Managed); } memstream.Dispose(); if(dynamictexture) { - if((width != texture.GetLevelDescription(0).Width) || (height != texture.GetLevelDescription(0).Height)) + if((width != texture.Width) || (height != texture.Height)) throw new Exception("Could not create a texture with the same size as the image."); } diff --git a/Source/Core/GZBuilder/md3/ModelReader.cs b/Source/Core/GZBuilder/md3/ModelReader.cs index 90d374b6c..a1382803f 100755 --- a/Source/Core/GZBuilder/md3/ModelReader.cs +++ b/Source/Core/GZBuilder/md3/ModelReader.cs @@ -49,13 +49,13 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 #region ================== Load - public static void Load(ModelData mde, List<DataReader> containers, Device device) + public static void Load(ModelData mde, List<DataReader> containers) { - if(mde.IsVoxel) LoadKVX(mde, containers, device); - else LoadModel(mde, containers, device); + if(mde.IsVoxel) LoadKVX(mde, containers); + else LoadModel(mde, containers); } - private static void LoadKVX(ModelData mde, List<DataReader> containers, Device device) + private static void LoadKVX(ModelData mde, List<DataReader> containers) { mde.Model = new GZModel(); string unused = string.Empty; @@ -68,7 +68,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 if(ms == null) continue; //load kvx - ReadKVX(mde, ms, device); + ReadKVX(mde, ms); //done ms.Close(); @@ -86,7 +86,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } } - private static void LoadModel(ModelData mde, List<DataReader> containers, Device device) + private static void LoadModel(ModelData mde, List<DataReader> containers) { mde.Model = new GZModel(); BoundingBoxSizes bbs = new BoundingBoxSizes(); @@ -120,13 +120,13 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 General.ErrorLogger.Add(ErrorType.Error, "Error while loading \"" + mde.ModelNames[i] + "\": frame names are not supported for MD3 models!"); continue; } - result = ReadMD3Model(ref bbs, skins, ms, device, mde.FrameIndices[i]); + result = ReadMD3Model(ref bbs, skins, ms, mde.FrameIndices[i]); break; case ".md2": - result = ReadMD2Model(ref bbs, ms, device, mde.FrameIndices[i], mde.FrameNames[i]); + result = ReadMD2Model(ref bbs, ms, mde.FrameIndices[i], mde.FrameNames[i]); break; case ".3d": - result = Read3DModel(ref bbs, skins, ms, device, mde.FrameIndices[i], mde.ModelNames[i], containers); + result = Read3DModel(ref bbs, skins, ms, mde.FrameIndices[i], mde.ModelNames[i], containers); break; default: result.Errors = "model format is not supported"; @@ -181,7 +181,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 if(path.IndexOf(Path.DirectorySeparatorChar) == -1) path = Path.Combine(Path.GetDirectoryName(mde.ModelNames[i]), path); - Texture t = LoadTexture(containers, path, device); + Texture t = LoadTexture(containers, path); if(t == null) { @@ -196,7 +196,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 //Try to use texture loaded from MODELDEFS else { - Texture t = LoadTexture(containers, mde.SkinNames[i], device); + Texture t = LoadTexture(containers, mde.SkinNames[i]); if(t == null) { mde.Model.Textures.Add(General.Map.Data.UnknownTexture3D.Texture); @@ -273,7 +273,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 public Vector3D Normal; } - internal static MD3LoadResult Read3DModel(ref BoundingBoxSizes bbs, Dictionary<int, string> skins, Stream s, Device device, int frame, string filename, List<DataReader> containers) + internal static MD3LoadResult Read3DModel(ref BoundingBoxSizes bbs, Dictionary<int, string> skins, Stream s, int frame, string filename, List<DataReader> containers) { Stream stream_d; Stream stream_a; @@ -473,7 +473,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } } - CreateMesh(device, ref result, out_verts, out_polys); + CreateMesh(ref result, out_verts, out_polys); result.Skins.Add(""); } else @@ -507,7 +507,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } } - CreateMesh(device, ref result, out_verts, out_polys); + CreateMesh(ref result, out_verts, out_polys); result.Skins.Add(skins.ContainsKey(k)?skins[k].ToLowerInvariant():string.Empty); } } @@ -519,7 +519,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 #region ================== MD3 - internal static MD3LoadResult ReadMD3Model(ref BoundingBoxSizes bbs, Dictionary<int, string> skins, Stream s, Device device, int frame) + internal static MD3LoadResult ReadMD3Model(ref BoundingBoxSizes bbs, Dictionary<int, string> skins, Stream s, int frame) { long start = s.Position; MD3LoadResult result = new MD3LoadResult(); @@ -604,7 +604,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 if(!useskins) { //create mesh - CreateMesh(device, ref result, vertList, polyIndecesList); + CreateMesh(ref result, vertList, polyIndecesList); result.Skins.Add(""); } else @@ -628,7 +628,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 polyIndecesList.AddRange(group.Value[i].ToArray()); } - CreateMesh(device, ref result, vertListsPerTexture[group.Key], polyIndecesList); + CreateMesh(ref result, vertListsPerTexture[group.Key], polyIndecesList); result.Skins.Add(group.Key.ToLowerInvariant()); } } @@ -725,7 +725,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 #region ================== MD2 - private static MD3LoadResult ReadMD2Model(ref BoundingBoxSizes bbs, Stream s, Device device, int frame, string framename) + private static MD3LoadResult ReadMD2Model(ref BoundingBoxSizes bbs, Stream s, int frame, string framename) { long start = s.Position; MD3LoadResult result = new MD3LoadResult(); @@ -885,7 +885,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } //mesh - Mesh mesh = new Mesh(device, 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)) { @@ -899,8 +899,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } mesh.UnlockIndexBuffer(); - mesh.OptimizeInPlace(MeshOptimizeFlags.AttributeSort); - //store in result result.Meshes.Add(mesh); result.Skins.Add(""); //no skin support for MD2 @@ -913,7 +911,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 #region ================== KVX - private static void ReadKVX(ModelData mde, Stream stream, Device device) + private static void ReadKVX(ModelData mde, Stream stream) { PixelColor[] palette = new PixelColor[256]; List<WorldVertex> verts = new List<WorldVertex>(); @@ -1075,7 +1073,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 using(Bitmap bmp = CreateVoxelTexture(palette)) bmp.Save(memstream, ImageFormat.Bmp); memstream.Seek(0, SeekOrigin.Begin); - Texture texture = Texture.FromStream(device, memstream, (int)memstream.Length, 64, 64, 0, Usage.None, Format.Unknown, Pool.Managed, Filter.Point, Filter.Box, 0); + Texture texture = Texture.FromStream(memstream, (int)memstream.Length, 64, 64, 0, Usage.None, Format.Unknown, Pool.Managed); memstream.Dispose(); // Add texture @@ -1085,7 +1083,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 MeshFlags meshflags = MeshFlags.Managed; if(indices.Count > ushort.MaxValue - 1) meshflags |= MeshFlags.Use32Bit; - Mesh mesh = new Mesh(device, facescount, verts.Count, meshflags, vertexElements); + Mesh mesh = new Mesh(facescount, verts.Count, meshflags, vertexElements); DataStream mstream = mesh.VertexBuffer.Lock(0, 0, LockFlags.None); mstream.WriteRange(verts.ToArray()); @@ -1100,8 +1098,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 mesh.IndexBuffer.Unlock(); - mesh.OptimizeInPlace(MeshOptimizeFlags.AttributeSort); - // Add mesh mde.Model.Meshes.Add(mesh); } @@ -1239,7 +1235,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 return null; } - private static Texture LoadTexture(List<DataReader> containers, string path, Device device) + private static Texture LoadTexture(List<DataReader> containers, string path) { if(string.IsNullOrEmpty(path)) return null; @@ -1259,7 +1255,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 if(bitmap != null) { BitmapData bmlock = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat); - texture = new Texture(device, bitmap.Width, bitmap.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + 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); @@ -1270,7 +1266,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } else { - texture = Texture.FromStream(device, ms); + texture = Texture.FromStream(ms); ms.Close(); } @@ -1278,10 +1274,10 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 return texture; } - private static void CreateMesh(Device device, ref MD3LoadResult result, List<WorldVertex> verts, List<int> indices) + private static void CreateMesh(ref MD3LoadResult result, List<WorldVertex> verts, List<int> indices) { //create mesh - Mesh mesh = new Mesh(device, 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)) { @@ -1295,8 +1291,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3 } mesh.UnlockIndexBuffer(); - mesh.OptimizeInPlace(MeshOptimizeFlags.AttributeSort); - //store in result result.Meshes.Add(mesh); } diff --git a/Source/Core/General/General.cs b/Source/Core/General/General.cs index 0a2f1c310..1a306f3b1 100755 --- a/Source/Core/General/General.cs +++ b/Source/Core/General/General.cs @@ -544,9 +544,6 @@ namespace CodeImp.DoomBuilder //mxd. Set CultureInfo Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; - // Hook to DLL loading failure event - AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - // Set current thread name Thread.CurrentThread.Name = "Main Application"; @@ -638,12 +635,6 @@ namespace CodeImp.DoomBuilder mainwindow.Update(); } - // Start Direct3D - General.WriteLogLine("Starting Direct3D graphics driver..."); - try { D3DDevice.Startup(); } - catch(Direct3D9NotFoundException e) { AskDownloadDirectX(e.Message); return; } - catch(Direct3DX9NotFoundException e) { AskDownloadDirectX(e.Message); return; } - // Load plugin manager General.WriteLogLine("Loading plugins..."); plugins = new PluginManager(); @@ -741,58 +732,6 @@ namespace CodeImp.DoomBuilder } } - // This handles DLL linking errors - private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) - { - // Check if SlimDX failed loading - if(args.Name.Contains("SlimDX")) AskDownloadSlimDX(); - - // Return null - return null; - } - - // This asks the user to download DirectX - private static void AskDownloadDirectX(string message) - { - // Cancel loading map from command-line parameters, if any. - // This causes problems, because when the window is shown, the map will - // be loaded and DirectX is initialized (which we seem to be missing) - CancelAutoMapLoad(); - - // Ask the user to download DirectX - if(MessageBox.Show("Unable to initialize DirectX: " + message + Environment.NewLine + Environment.NewLine + - "Do you want to install and/or update Microsoft DirectX 9.0 now?", "DirectX 9.0 Error", MessageBoxButtons.YesNo, - MessageBoxIcon.Exclamation) == DialogResult.Yes) - { - // Go to DirectX End-User Runtime Web Installer page (mxd) - OpenWebsite("https://www.microsoft.com/en-us/download/details.aspx?id=35&44F86079-8679-400C-BFF2-9CA5F2BCBDFC=1"); - } - - // End program here - Terminate(false); - } - - // This asks the user to download SlimDX (mxd) - private static void AskDownloadSlimDX() - { - // Cancel loading map from command-line parameters, if any. - // This causes problems, because when the window is shown, the map will - // be loaded and SlimDX is initialized (which we seem to be missing) - CancelAutoMapLoad(); - - // Ask the user to download SlimDX - if(MessageBox.Show("This application requires the latest version of SlimDX for .NET 2.0 installed on your computer." + Environment.NewLine + - "Do you want to install SlimDX now?", "SlimDX Error", MessageBoxButtons.YesNo, - MessageBoxIcon.Exclamation) == DialogResult.Yes) - { - // Go to SlimDX download page - OpenWebsite("http://slimdx.org/download.php"); - } - - // End program here - Terminate(false); - } - // This parses the command line arguments private static void ParseCommandLineArgs(string[] args) { @@ -1034,7 +973,6 @@ namespace CodeImp.DoomBuilder if(mainwindow != null) { mainwindow.Dispose(); mainwindow = null; } if(actions != null) { actions.Dispose(); actions = null; } if(types != null) { types.Dispose(); types = null; } - try { D3DDevice.Terminate(); } catch { } // Application ends here and now General.WriteLogLine("Termination done"); diff --git a/Source/Core/General/Launcher.cs b/Source/Core/General/Launcher.cs index 387446506..048080a47 100755 --- a/Source/Core/General/Launcher.cs +++ b/Source/Core/General/Launcher.cs @@ -395,7 +395,6 @@ namespace CodeImp.DoomBuilder // Device reset may be needed... if(General.Editing.Mode is ClassicMode) { - General.Map.Graphics.Reset(); General.MainWindow.RedrawDisplay(); } } diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index 0a8a69ed3..fd495ccae 100755 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -262,7 +262,6 @@ namespace CodeImp.DoomBuilder // Initiate graphics General.WriteLogLine("Initializing graphics device..."); graphics = new D3DDevice(General.MainWindow.Display); - if(!graphics.Initialize()) return false; // Create renderers renderer2d = new Renderer2D(graphics); @@ -370,7 +369,6 @@ namespace CodeImp.DoomBuilder // Initiate graphics General.WriteLogLine("Initializing graphics device..."); graphics = new D3DDevice(General.MainWindow.Display); - if(!graphics.Initialize()) return false; // Create renderers renderer2d = new Renderer2D(graphics); diff --git a/Source/Core/Rendering/D3DDevice.cs b/Source/Core/Rendering/D3DDevice.cs index 80a4d923d..f6f2c098c 100755 --- a/Source/Core/Rendering/D3DDevice.cs +++ b/Source/Core/Rendering/D3DDevice.cs @@ -29,529 +29,94 @@ using SlimDX.Direct3D9; namespace CodeImp.DoomBuilder.Rendering { - internal class D3DDevice : IDisposable - { - #region ================== Constants - - // NVPerfHUD device name - private const string NVPERFHUD_ADAPTER = "NVPerfHUD"; - - //mxd. Anisotropic filtering steps - public static readonly List<float> AF_STEPS = new List<float> { 1.0f, 2.0f, 4.0f, 8.0f, 16.0f }; + internal class D3DDevice : IDisposable + { + internal D3DDevice(RenderTargetControl rendertarget) + { + RenderTarget = rendertarget; + Shaders = new ShaderManager(this); + SetupSettings(); + } + + public void SetStreamSource(int index, VertexBuffer buffer, long offset, long stride) { } + public void SetRenderState(RenderState state, float v) { } + public void SetRenderState(RenderState state, bool v) { } + public void SetRenderState(RenderState state, int v) { } + public void SetRenderState(RenderState state, Compare v) { } + public void SetRenderState(RenderState state, Cull v) { } + public void SetRenderState(RenderState state, Blend v) { } + public void SetRenderState(RenderState state, BlendOperation v) { } + public void SetRenderState(RenderState state, FillMode v) { } + public Matrix GetTransform(TransformState state) { return Matrix.Identity; } + public void SetTransform(TransformState state, Matrix matrix) { } + public void SetSamplerState(int unit, SamplerState state, TextureAddress address) { } + public void DrawPrimitives(PrimitiveType type, int startIndex, int primitiveCount) { } + public void DrawUserPrimitives<T>(PrimitiveType type, int startIndex, int primitiveCount, T[] data) where T : struct { } + public void SetVertexDeclaration(VertexDeclaration decl) { } + + public void Dispose() { } + + internal void RegisterResource(ID3DResource res) { } + internal void UnregisterResource(ID3DResource res) { } + + public void StartRendering(bool clear, Color4 backcolor) + { + //if (clear) + // Clear(ClearFlags.Target | ClearFlags.ZBuffer, backcolor, 1f, 0); + } + public void StartRendering(bool clear, Color4 backcolor, Texture target, bool usedepthbuffer) + { + //if (clear) + // Clear(ClearFlags.Target, backcolor, 1f, 0); + } + public void FinishRendering() { } + public void Present() { } + public void ClearTexture(Color4 backcolor, Texture texture) { } + public void CopyTexture(Texture src, CubeTexture dst, CubeMapFace face) { } + + //mxd. Anisotropic filtering steps + public static readonly List<float> AF_STEPS = new List<float> { 1.0f, 2.0f, 4.0f, 8.0f, 16.0f }; //mxd. Antialiasing steps public static readonly List<int> AA_STEPS = new List<int> { 0, 2, 4, 8 }; - #endregion - - #region ================== Variables - - // Settings - private int adapter; - private Filter postfilter; - private Filter mipgeneratefilter; - private static bool isrendering; //mxd - - // Main objects - private static Direct3D d3d; - private RenderTargetControl rendertarget; - private Capabilities devicecaps; - private Device device; - private Viewport viewport; - private readonly HashSet<ID3DResource> resources; - private ShaderManager shaders; - private Surface backbuffer; - private Surface depthbuffer; - - // Disposing - private bool isdisposed; - - #endregion - - #region ================== Properties - - internal Device Device { get { return device; } } - public bool IsDisposed { get { return isdisposed; } } - public static bool IsRendering { get { return isrendering; } } //mxd - internal RenderTargetControl RenderTarget { get { return rendertarget; } } - internal Viewport Viewport { get { return viewport; } } - internal ShaderManager Shaders { get { return shaders; } } - internal Surface BackBuffer { get { return backbuffer; } } - internal Surface DepthBuffer { get { return depthbuffer; } } - internal Filter PostFilter { get { return postfilter; } } - internal Filter MipGenerateFilter { get { return mipgeneratefilter; } } - - #endregion - - #region ================== Constructor / Disposer - - // Constructor - internal D3DDevice(RenderTargetControl rendertarget) - { - // Set render target - this.rendertarget = rendertarget; - - // Create resources list - resources = new HashSet<ID3DResource>(); - - // We have no destructor - GC.SuppressFinalize(this); - } - - // Disposer - public void Dispose() - { - // Not already disposed? - if(!isdisposed) - { - // Clean up - foreach(ID3DResource res in resources) res.UnloadResource(); - if(shaders != null) shaders.Dispose(); - rendertarget = null; - if(backbuffer != null) backbuffer.Dispose(); - if(depthbuffer != null) depthbuffer.Dispose(); - if(device != null) device.Dispose(); - - if(ObjectTable.Objects.Count > 1) //mxd. Direct3D itself is not disposed while the editor is running - { - //mxd. Get rid of any remaining D3D objects... - foreach(ComObject o in ObjectTable.Objects) - { - if(o is Direct3D) continue; // Don't dispose the device itself... - General.WriteLogLine("WARNING: D3D resource " + o - + (o.Tag != null ? " (" + o.Tag + ")" : string.Empty) + " was not disposed properly!" - + (o.CreationSource != null ? " Stack trace: " + o.CreationSource : string.Empty)); - o.Dispose(); - } - -#if DEBUG - General.ShowWarningMessage("Some D3D resources were not disposed properly! See the event log for more details.", - MessageBoxButtons.OK); -#endif - } - - // Done - isrendering = false; //mxd - isdisposed = true; - } - } - - #endregion - - #region ================== Renderstates + internal RenderTargetControl RenderTarget { get; private set; } + internal ShaderManager Shaders { get; private set; } - // This completes initialization after the device has started or has been reset public void SetupSettings() { // Setup renderstates - device.SetRenderState(RenderState.AlphaBlendEnable, false); - device.SetRenderState(RenderState.AlphaBlendEnable, false); - device.SetRenderState(RenderState.AlphaFunc, Compare.GreaterEqual); - device.SetRenderState(RenderState.AlphaRef, 0x0000007E); - device.SetRenderState(RenderState.AlphaTestEnable, false); - device.SetRenderState(RenderState.Ambient, Color.White.ToArgb()); - device.SetRenderState(RenderState.AmbientMaterialSource, ColorSource.Material); - device.SetRenderState(RenderState.AntialiasedLineEnable, false); - device.SetRenderState(RenderState.Clipping, true); - device.SetRenderState(RenderState.ColorVertex, false); - device.SetRenderState(RenderState.ColorWriteEnable, ColorWriteEnable.Red | ColorWriteEnable.Green | ColorWriteEnable.Blue | ColorWriteEnable.Alpha); - device.SetRenderState(RenderState.CullMode, Cull.None); - device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); - device.SetRenderState(RenderState.DiffuseMaterialSource, ColorSource.Color1); - //device.SetRenderState(RenderState.DitherEnable, true); - device.SetRenderState(RenderState.FillMode, FillMode.Solid); - device.SetRenderState(RenderState.FogEnable, false); - device.SetRenderState(RenderState.FogTableMode, FogMode.Linear); - device.SetRenderState(RenderState.Lighting, false); - device.SetRenderState(RenderState.LocalViewer, false); - device.SetRenderState(RenderState.MultisampleAntialias, (General.Settings.AntiAliasingSamples > 0)); //mxd - device.SetRenderState(RenderState.NormalizeNormals, false); - device.SetRenderState(RenderState.PointSpriteEnable, false); - device.SetRenderState(RenderState.RangeFogEnable, false); - device.SetRenderState(RenderState.ShadeMode, ShadeMode.Gouraud); - device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - device.SetRenderState(RenderState.SpecularEnable, false); - device.SetRenderState(RenderState.StencilEnable, false); - device.SetRenderState(RenderState.TextureFactor, -1); - device.SetRenderState(RenderState.ZEnable, false); - device.SetRenderState(RenderState.ZWriteEnable, false); - device.PixelShader = null; - device.VertexShader = null; + SetRenderState(RenderState.AlphaBlendEnable, false); + SetRenderState(RenderState.AlphaFunc, Compare.GreaterEqual); + SetRenderState(RenderState.AlphaRef, 0x0000007E); + SetRenderState(RenderState.AlphaTestEnable, false); + SetRenderState(RenderState.CullMode, Cull.None); + SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + SetRenderState(RenderState.FillMode, FillMode.Solid); + SetRenderState(RenderState.FogEnable, false); + SetRenderState(RenderState.MultisampleAntialias, (General.Settings.AntiAliasingSamples > 0)); + SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + SetRenderState(RenderState.TextureFactor, -1); + SetRenderState(RenderState.ZEnable, false); + SetRenderState(RenderState.ZWriteEnable, false); // Matrices - device.SetTransform(TransformState.World, Matrix.Identity); - device.SetTransform(TransformState.View, Matrix.Identity); - device.SetTransform(TransformState.Projection, Matrix.Identity); + SetTransform(TransformState.World, Matrix.Identity); + SetTransform(TransformState.View, Matrix.Identity); + SetTransform(TransformState.Projection, Matrix.Identity); // Texture addressing - device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); - device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); - device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); - - // Setup material - device.Material = new Material { - Ambient = new Color4(Color.White), - Diffuse = new Color4(Color.White), - Specular = new Color4(Color.White) - }; + SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); + SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); + SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); // Shader settings - shaders.World3D.SetConstants(General.Settings.VisualBilinear, Math.Min(devicecaps.MaxAnisotropy, General.Settings.FilterAnisotropy)); - - // Texture filters - postfilter = Filter.Point; - mipgeneratefilter = Filter.Box; + Shaders.World3D.SetConstants(General.Settings.VisualBilinear, General.Settings.FilterAnisotropy); // Initialize presentations Presentation.Initialize(); } - #endregion - - #region ================== Initialization - - // This starts up Direct3D - public static void Startup() - { - d3d = new Direct3D(); - } - - // This terminates Direct3D - public static void Terminate() - { - if(d3d != null) - { - d3d.Dispose(); - d3d = null; - } - } - - // This initializes the graphics - public bool Initialize() - { - // Use default adapter - this.adapter = 0; // Manager.Adapters.Default.Adapter; - - try - { - // Make present parameters - PresentParameters displaypp = CreatePresentParameters(adapter); - - // Determine device type for compatability with NVPerfHUD - DeviceType devtype; - if(d3d.Adapters[adapter].Details.Description.EndsWith(NVPERFHUD_ADAPTER)) - devtype = DeviceType.Reference; - else - devtype = DeviceType.Hardware; - - //mxd. Check maximum supported AA level... - for(int i = AA_STEPS.Count - 1; i > 0; i--) - { - if(General.Settings.AntiAliasingSamples < AA_STEPS[i]) continue; - if(d3d.CheckDeviceMultisampleType(this.adapter, devtype, d3d.Adapters[adapter].CurrentDisplayMode.Format, displaypp.Windowed, (MultisampleType)AA_STEPS[i])) - break; - - if(General.Settings.AntiAliasingSamples > AA_STEPS[i - 1]) - { - General.Settings.AntiAliasingSamples = AA_STEPS[i - 1]; - - // TODO: looks like setting Multisample here just resets it to MultisampleType.None, - // regardless of value in displaypp.Multisample. Why?.. - displaypp.Multisample = (MultisampleType)General.Settings.AntiAliasingSamples; - } - } - - // Get the device capabilities - devicecaps = d3d.GetDeviceCaps(adapter, devtype); - - // Check if this adapter supports TnL - if((devicecaps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0) - { - // Initialize with hardware TnL - device = new Device(d3d, adapter, devtype, rendertarget.Handle, - CreateFlags.HardwareVertexProcessing, displaypp); - } - else - { - // Initialize with software TnL - device = new Device(d3d, adapter, devtype, rendertarget.Handle, - CreateFlags.SoftwareVertexProcessing, displaypp); - } - } - catch(Exception) - { - // Failed - MessageBox.Show(General.MainWindow, "Unable to initialize the Direct3D video device. Another application may have taken exclusive mode on this video device or the device does not support Direct3D at all.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; - } - - //mxd. Check if we can use shaders - if(device.Capabilities.PixelShaderVersion.Major < 2) - { - // Failed - MessageBox.Show(General.MainWindow, "Unable to initialize the Direct3D video device. Video device with Shader Model 2.0 support is required.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; - } - - // Add event to cancel resize event - //device.DeviceResizing += new CancelEventHandler(CancelResize); - - // Keep a reference to the original buffers - backbuffer = device.GetBackBuffer(0, 0); - depthbuffer = device.DepthStencilSurface; - - // Get the viewport - viewport = device.Viewport; - - // Create shader manager - shaders = new ShaderManager(this); - - // Initialize settings - SetupSettings(); - - // Done - return true; - } - - // This is to disable the automatic resize reset - /*private static void CancelResize(object sender, CancelEventArgs e) - { - // Cancel resize event - e.Cancel = true; - }*/ - - // This creates present parameters - private PresentParameters CreatePresentParameters(int adapter) - { - PresentParameters displaypp = new PresentParameters(); - - // Get current display mode - DisplayMode currentmode = d3d.Adapters[adapter].CurrentDisplayMode; - - // Make present parameters - displaypp.Windowed = true; - displaypp.SwapEffect = SwapEffect.Discard; - displaypp.BackBufferCount = 1; - displaypp.BackBufferFormat = currentmode.Format; - displaypp.BackBufferWidth = rendertarget.ClientSize.Width; - displaypp.BackBufferHeight = rendertarget.ClientSize.Height; - displaypp.EnableAutoDepthStencil = true; - displaypp.AutoDepthStencilFormat = Format.D24X8; //Format.D16; - displaypp.Multisample = (MultisampleType)General.Settings.AntiAliasingSamples; - displaypp.PresentationInterval = PresentInterval.Immediate; - - // Return result - return displaypp; - } - - #endregion - - #region ================== Resetting - - // This registers a resource - internal void RegisterResource(ID3DResource res) - { - // Add resource - resources.Add(res); - } - - // This unregisters a resource - internal void UnregisterResource(ID3DResource res) - { - // Remove resource - resources.Remove(res); - } - - // This resets the device and returns true on success - internal bool Reset() - { - // Unload all Direct3D resources - foreach(ID3DResource res in resources) res.UnloadResource(); - - // Lose backbuffers - if(backbuffer != null) backbuffer.Dispose(); - if(depthbuffer != null) depthbuffer.Dispose(); - backbuffer = null; - depthbuffer = null; - - try - { - // Make present parameters - PresentParameters displaypp = CreatePresentParameters(adapter); - - // Reset the device - device.Reset(displaypp); - } -#if DEBUG - catch(Exception e) - { - // Failed to re-initialize - Console.WriteLine("Device reset failed: " + e.Message); - return false; - } -#else - catch(Exception) - { - // Failed to re-initialize - return false; - } -#endif - - // Keep a reference to the original buffers - backbuffer = device.GetBackBuffer(0, 0); - depthbuffer = device.DepthStencilSurface; - - // Get the viewport - viewport = device.Viewport; - - // Reload all Direct3D resources - foreach(ID3DResource res in resources) res.ReloadResource(); - - // Re-apply settings - SetupSettings(); - - // Success - return true; - } - - #endregion - - #region ================== Rendering - - // This begins a drawing session - public bool StartRendering(bool clear, Color4 backcolor, Surface target, Surface depthbuffer) - { - // Check if we can render - if(CheckAvailability() && !isrendering) //mxd. Added isrendering check - { - // Set rendertarget - device.DepthStencilSurface = depthbuffer; - device.SetRenderTarget(0, target); - - // Clear the screen - if(clear) - { - if(depthbuffer != null) - device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, backcolor, 1f, 0); - else - device.Clear(ClearFlags.Target, backcolor, 1f, 0); - } - - // Ready to render - // [ZZ] Sometimes (apparently during massive lag) this may cause invalid call exception. - // Let's put this code here until proper fix is available. - // For now, eat the initial exception and try to recover. - for (int i = 0; i < 2; i++) - { - try - { - device.BeginScene(); - break; - } - catch (SlimDXException e) - { - if (i != 0) throw e; - else - { - if (!CheckAvailability()) - { - isrendering = false; - return false; - } - - Reset(); - } - } - } - - isrendering = true; //mxd - return true; - } - else - { - // Minimized, you cannot see anything - isrendering = false; //mxd - return false; - } - } - - // This clears a target - public void ClearRendertarget(Color4 backcolor, Surface target, Surface depthbuffer) - { - // Set rendertarget - device.DepthStencilSurface = depthbuffer; - device.SetRenderTarget(0, target); - - if(depthbuffer != null) - device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, backcolor, 1f, 0); - else - device.Clear(ClearFlags.Target, backcolor, 1f, 0); - } - - // This ends a drawing session - public void FinishRendering() - { - try - { - // Done - device.EndScene(); - isrendering = false; //mxd - } - // Errors are not a problem here - catch(Exception) { } - } - - // This presents what has been drawn - public void Present() - { - try - { - device.Present(); - isrendering = false; //mxd - } - // Errors are not a problem here - catch(Exception) { } - } - - // This checks if we can use the hardware at this moment - public bool CheckAvailability() - { - // When minimized, the hardware is not available - if(General.MainWindow.WindowState != FormWindowState.Minimized) - { - // Test the cooperative level - Result coopresult = device.TestCooperativeLevel(); - - // Check if device must be reset - if(!coopresult.IsSuccess) - { - // Should we reset? - if(coopresult.Name == "D3DERR_DEVICENOTRESET") - { - // Device is lost and must be reset now - Reset(); - } - - // Impossible to render at this point - return false; - } - else - { - // Ready to go! - return true; - } - } - else - { - // Minimized - return false; - } - } - - #endregion - - #region ================== Tools - // Make a color from ARGB public static int ARGB(float a, float r, float g, float b) { @@ -587,7 +152,5 @@ namespace CodeImp.DoomBuilder.Rendering { return new Vector2D(v2.X, v2.Y); } - - #endregion - } + } } diff --git a/Source/Core/Rendering/D3DShader.cs b/Source/Core/Rendering/D3DShader.cs index b68aebe76..a1f035d31 100755 --- a/Source/Core/Rendering/D3DShader.cs +++ b/Source/Core/Rendering/D3DShader.cs @@ -101,7 +101,7 @@ namespace CodeImp.DoomBuilder.Rendering try { // Compile effect - fx = Effect.FromStream(General.Map.Graphics.Device, fxdata, null, null, null, ShaderFlags.None, null, out errors); + fx = Effect.FromStream(fxdata, ShaderFlags.None, out errors); if(!string.IsNullOrEmpty(errors)) { throw new Exception("Errors in effect file " + fxfile + ": " + errors); @@ -118,7 +118,7 @@ namespace CodeImp.DoomBuilder.Rendering fxdata.Seek(0, SeekOrigin.Begin); // Compile effect - fx = Effect.FromStream(General.Map.Graphics.Device, fxdata, null, null, null, ShaderFlags.Debug, null, out debugerrors); + fx = Effect.FromStream(fxdata, ShaderFlags.Debug, out debugerrors); if(!string.IsNullOrEmpty(debugerrors)) { throw new Exception("Errors in effect file " + fxfile + ": " + debugerrors); @@ -155,10 +155,10 @@ namespace CodeImp.DoomBuilder.Rendering public void Begin() { // Set vertex declaration - General.Map.Graphics.Device.VertexDeclaration = vertexdecl; + General.Map.Graphics.SetVertexDeclaration(vertexdecl); // Set effect - effect.Begin(FX.DoNotSaveState); + effect.Begin(); } // This begins a pass diff --git a/Source/Core/Rendering/Display2DShader.cs b/Source/Core/Rendering/Display2DShader.cs index b2c1e3382..63481acb8 100755 --- a/Source/Core/Rendering/Display2DShader.cs +++ b/Source/Core/Rendering/Display2DShader.cs @@ -84,7 +84,7 @@ namespace CodeImp.DoomBuilder.Rendering new VertexElement(0, 16, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0), VertexElement.VertexDeclarationEnd }; - vertexdecl = new VertexDeclaration(General.Map.Graphics.Device, elements); + vertexdecl = new VertexDeclaration(elements); // We have no destructor GC.SuppressFinalize(this); @@ -117,8 +117,8 @@ namespace CodeImp.DoomBuilder.Rendering { Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha); effect.SetValue(rendersettings, values); - Matrix world = manager.D3DDevice.Device.GetTransform(TransformState.World); - Matrix view = manager.D3DDevice.Device.GetTransform(TransformState.View); + Matrix world = manager.D3DDevice.GetTransform(TransformState.World); + Matrix view = manager.D3DDevice.GetTransform(TransformState.View); effect.SetValue(transformsettings, world * view); TextureFilter filter = (bilinear ? TextureFilter.Linear : TextureFilter.Point); effect.SetValue(filtersettings, (int)filter); diff --git a/Source/Core/Rendering/FlatQuad.cs b/Source/Core/Rendering/FlatQuad.cs index 59ea7da57..7c493a8f5 100755 --- a/Source/Core/Rendering/FlatQuad.cs +++ b/Source/Core/Rendering/FlatQuad.cs @@ -259,7 +259,7 @@ namespace CodeImp.DoomBuilder.Rendering public void Render(D3DDevice device) { // Render the quad - device.Device.DrawUserPrimitives(type, 0, 2, vertices); + device.DrawUserPrimitives(type, 0, 2, vertices); } #endregion diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index c7ec6966a..d0c61a7cb 100755 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -29,7 +29,6 @@ using CodeImp.DoomBuilder.Editing; using CodeImp.DoomBuilder.GZBuilder.Data; //mxd using CodeImp.DoomBuilder.Config; //mxd using CodeImp.DoomBuilder.GZBuilder; -using SlimDX.Direct3D10_1; #endregion @@ -71,7 +70,6 @@ namespace CodeImp.DoomBuilder.Rendering // Locking data private DataRectangle plotlocked; - private Surface targetsurface; // Rendertarget sizes private Size windowsize; @@ -183,133 +181,127 @@ namespace CodeImp.DoomBuilder.Rendering public unsafe void Present() { General.Plugins.OnPresentDisplayBegin(); - - // Start drawing - if(graphics.StartRendering(true, General.Colors.Background.ToColorValue(), graphics.BackBuffer, graphics.DepthBuffer)) - { - // Renderstates that count for this whole sequence - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.FogEnable, false); - graphics.Device.SetStreamSource(0, screenverts, 0, sizeof(FlatVertex)); - graphics.Device.SetTransform(TransformState.World, Matrix.Identity); - graphics.Shaders.Display2D.Begin(); - // Go for all layers - foreach(PresentLayer layer in present.layers) - { - int aapass; + // Start drawing + graphics.StartRendering(true, General.Colors.Background.ToColorValue()); - // Set blending mode - switch(layer.blending) - { - case BlendingMode.None: - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - break; - - case BlendingMode.Mask: - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - break; - - case BlendingMode.Alpha: - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); - graphics.Device.SetRenderState(RenderState.TextureFactor, (new Color4(layer.alpha, 1f, 1f, 1f)).ToArgb()); - break; - - case BlendingMode.Additive: - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); - graphics.Device.SetRenderState(RenderState.TextureFactor, (new Color4(layer.alpha, 1f, 1f, 1f)).ToArgb()); - break; - } + // Renderstates that count for this whole sequence + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.FogEnable, false); + graphics.SetStreamSource(0, screenverts, 0, sizeof(FlatVertex)); + graphics.SetTransform(TransformState.World, Matrix.Identity); + graphics.Shaders.Display2D.Begin(); - // Check which pass to use - if(layer.antialiasing && General.Settings.QualityDisplay) aapass = 0; else aapass = 1; + // Go for all layers + foreach(PresentLayer layer in present.layers) + { + int aapass; - // Render layer - switch(layer.layer) - { - // BACKGROUND - case RendererLayer.Background: - if((backimageverts == null) || (General.Map.Grid.Background.Texture == null)) break; - graphics.Shaders.Display2D.Texture1 = General.Map.Grid.Background.Texture; - graphics.Shaders.Display2D.SetSettings(1f / windowsize.Width, 1f / windowsize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, backimageverts); - graphics.Shaders.Display2D.EndPass(); - graphics.Device.SetStreamSource(0, screenverts, 0, sizeof(FlatVertex)); - break; - - // GRID - case RendererLayer.Grid: - graphics.Shaders.Display2D.Texture1 = backtex; - graphics.Shaders.Display2D.SetSettings(1f / backsize.Width, 1f / backsize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); - graphics.Shaders.Display2D.EndPass(); - break; - - // GEOMETRY - case RendererLayer.Geometry: - graphics.Shaders.Display2D.Texture1 = plottertex; - graphics.Shaders.Display2D.SetSettings(1f / structsize.Width, 1f / structsize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); - graphics.Shaders.Display2D.EndPass(); - break; - - // THINGS - case RendererLayer.Things: - graphics.Shaders.Display2D.Texture1 = thingstex; - graphics.Shaders.Display2D.SetSettings(1f / thingssize.Width, 1f / thingssize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); - graphics.Shaders.Display2D.EndPass(); - break; - - // OVERLAY - case RendererLayer.Overlay: - graphics.Shaders.Display2D.Texture1 = overlaytex; - graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); - graphics.Shaders.Display2D.EndPass(); - break; - - // SURFACE - case RendererLayer.Surface: - graphics.Shaders.Display2D.Texture1 = surfacetex; - graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); - graphics.Shaders.Display2D.BeginPass(aapass); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); - graphics.Shaders.Display2D.EndPass(); - break; - } + // Set blending mode + switch(layer.blending) + { + case BlendingMode.None: + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + break; + + case BlendingMode.Mask: + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, true); + graphics.SetRenderState(RenderState.TextureFactor, -1); + break; + + case BlendingMode.Alpha: + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.TextureFactor, (new Color4(layer.alpha, 1f, 1f, 1f)).ToArgb()); + break; + + case BlendingMode.Additive: + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.TextureFactor, (new Color4(layer.alpha, 1f, 1f, 1f)).ToArgb()); + break; } - // Done - graphics.Shaders.Display2D.End(); - graphics.FinishRendering(); - graphics.Present(); + // Check which pass to use + if(layer.antialiasing && General.Settings.QualityDisplay) aapass = 0; else aapass = 1; - // Release binds - graphics.Shaders.Display2D.Texture1 = null; - graphics.Device.SetStreamSource(0, null, 0, 0); - } - else - { - // Request delayed redraw - General.MainWindow.DelayedRedraw(); + // Render layer + switch(layer.layer) + { + // BACKGROUND + case RendererLayer.Background: + if((backimageverts == null) || (General.Map.Grid.Background.Texture == null)) break; + graphics.Shaders.Display2D.Texture1 = General.Map.Grid.Background.Texture; + graphics.Shaders.Display2D.SetSettings(1f / windowsize.Width, 1f / windowsize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, backimageverts); + graphics.Shaders.Display2D.EndPass(); + graphics.SetStreamSource(0, screenverts, 0, sizeof(FlatVertex)); + break; + + // GRID + case RendererLayer.Grid: + graphics.Shaders.Display2D.Texture1 = backtex; + graphics.Shaders.Display2D.SetSettings(1f / backsize.Width, 1f / backsize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.Shaders.Display2D.EndPass(); + break; + + // GEOMETRY + case RendererLayer.Geometry: + graphics.Shaders.Display2D.Texture1 = plottertex; + graphics.Shaders.Display2D.SetSettings(1f / structsize.Width, 1f / structsize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.Shaders.Display2D.EndPass(); + break; + + // THINGS + case RendererLayer.Things: + graphics.Shaders.Display2D.Texture1 = thingstex; + graphics.Shaders.Display2D.SetSettings(1f / thingssize.Width, 1f / thingssize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.Shaders.Display2D.EndPass(); + break; + + // OVERLAY + case RendererLayer.Overlay: + graphics.Shaders.Display2D.Texture1 = overlaytex; + graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.Shaders.Display2D.EndPass(); + break; + + // SURFACE + case RendererLayer.Surface: + graphics.Shaders.Display2D.Texture1 = surfacetex; + graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); + graphics.Shaders.Display2D.BeginPass(aapass); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.Shaders.Display2D.EndPass(); + break; + } } + + // Done + graphics.Shaders.Display2D.End(); + graphics.FinishRendering(); + graphics.Present(); + + // Release binds + graphics.Shaders.Display2D.Texture1 = null; + graphics.SetStreamSource(0, null, 0, 0); } #endregion @@ -374,25 +366,21 @@ namespace CodeImp.DoomBuilder.Rendering windowsize.Height = graphics.RenderTarget.ClientSize.Height; // Create rendertargets textures - plottertex = new Texture(graphics.Device, windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); - thingstex = new Texture(graphics.Device, windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); - backtex = new Texture(graphics.Device, windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); - overlaytex = new Texture(graphics.Device, windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); - surfacetex = new Texture(graphics.Device, windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + plottertex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + thingstex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + backtex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + overlaytex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + surfacetex = new Texture(windowsize.Width, windowsize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); // Get the real surface sizes - SurfaceDescription sd = plottertex.GetLevelDescription(0); - structsize.Width = sd.Width; - structsize.Height = sd.Height; - sd = thingstex.GetLevelDescription(0); - thingssize.Width = sd.Width; - thingssize.Height = sd.Height; - sd = backtex.GetLevelDescription(0); - backsize.Width = sd.Width; - backsize.Height = sd.Height; - sd = overlaytex.GetLevelDescription(0); - overlaysize.Width = sd.Width; - overlaysize.Height = sd.Height; + structsize.Width = plottertex.Width; + structsize.Height = plottertex.Height; + thingssize.Width = thingstex.Width; + thingssize.Height = thingstex.Height; + backsize.Width = backtex.Width; + backsize.Height = backtex.Height; + overlaysize.Width = overlaytex.Width; + overlaysize.Height = overlaytex.Height; // Clear rendertargets // This may cause a crash when resetting because it recursively @@ -400,15 +388,15 @@ namespace CodeImp.DoomBuilder.Rendering //StartPlotter(true); Finish(); //StartThings(true); Finish(); //StartOverlay(true); Finish(); - graphics.ClearRendertarget(General.Colors.Background.WithAlpha(0).ToColorValue(), thingstex.GetSurfaceLevel(0), null); - graphics.ClearRendertarget(General.Colors.Background.WithAlpha(0).ToColorValue(), overlaytex.GetSurfaceLevel(0), null); + graphics.ClearTexture(General.Colors.Background.WithAlpha(0).ToColorValue(), thingstex); + graphics.ClearTexture(General.Colors.Background.WithAlpha(0).ToColorValue(), overlaytex); // Create vertex buffers - screenverts = new VertexBuffer(graphics.Device, 4 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); - thingsvertices = new VertexBuffer(graphics.Device, THING_BUFFER_SIZE * 12 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); + screenverts = new VertexBuffer(4 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); + thingsvertices = new VertexBuffer(THING_BUFFER_SIZE * 12 * sizeof(FlatVertex), Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); // Make screen vertices - DataStream stream = screenverts.Lock(0, 4 * sizeof(FlatVertex), LockFlags.Discard | LockFlags.NoSystemLock); + DataStream stream = screenverts.Lock(0, 4 * sizeof(FlatVertex), LockFlags.Discard); FlatVertex[] verts = CreateScreenVerts(structsize); stream.WriteRange(verts); screenverts.Unlock(); @@ -495,8 +483,8 @@ namespace CodeImp.DoomBuilder.Rendering Matrix scaling = Matrix.Scaling((1f / windowsize.Width) * 2f, (1f / windowsize.Height) * -2f, 1f); Matrix translate = Matrix.Translation(-(float)windowsize.Width * 0.5f, -(float)windowsize.Height * 0.5f, 0f); - graphics.Device.SetTransform(TransformState.View, translate * scaling); - graphics.Device.SetTransform(TransformState.Projection, Matrix.Identity); + graphics.SetTransform(TransformState.View, translate * scaling); + graphics.SetTransform(TransformState.Projection, Matrix.Identity); Vector2D lt = DisplayToMap(new Vector2D(0.0f, 0.0f)); Vector2D rb = DisplayToMap(new Vector2D(windowsize.Width, windowsize.Height)); viewport = new RectangleF(lt.x, lt.y, rb.x - lt.x, rb.y - lt.y); @@ -510,11 +498,11 @@ namespace CodeImp.DoomBuilder.Rendering { Matrix translate = Matrix.Translation(translatex, translatey, 0f); Matrix scaling = Matrix.Scaling(scale, -scale, 1f); - graphics.Device.SetTransform(TransformState.World, translate * scaling); + graphics.SetTransform(TransformState.World, translate * scaling); } else { - graphics.Device.SetTransform(TransformState.World, Matrix.Identity); + graphics.SetTransform(TransformState.World, Matrix.Identity); } } @@ -650,7 +638,7 @@ namespace CodeImp.DoomBuilder.Rendering if(plottertex != null) { // Lock structures rendertarget memory - plotlocked = plottertex.LockRectangle(0, LockFlags.NoSystemLock); + plotlocked = plottertex.LockRectangle(0, LockFlags.None); // Create structures plotter plotter = new Plotter((PixelColor*)plotlocked.Data.DataPointer.ToPointer(), plotlocked.Pitch / sizeof(PixelColor), structsize.Height, structsize.Width, structsize.Height); @@ -691,17 +679,11 @@ namespace CodeImp.DoomBuilder.Rendering if(thingstex != null) { // Set the rendertarget to the things texture - targetsurface = thingstex.GetSurfaceLevel(0); - if(graphics.StartRendering(clear, General.Colors.Background.WithAlpha(0).ToColorValue(), targetsurface, null)) - { - // Ready for rendering - UpdateTransformations(); - return true; - } + graphics.StartRendering(clear, General.Colors.Background.WithAlpha(0).ToColorValue(), thingstex, false); - // Can't render! - Finish(); - return false; + // Ready for rendering + UpdateTransformations(); + return true; } // Can't render! @@ -727,17 +709,11 @@ namespace CodeImp.DoomBuilder.Rendering if(overlaytex != null) { // Set the rendertarget to the things texture - targetsurface = overlaytex.GetSurfaceLevel(0); - if(graphics.StartRendering(clear, General.Colors.Background.WithAlpha(0).ToColorValue(), targetsurface, null)) - { - // Ready for rendering - UpdateTransformations(); - return true; - } + graphics.StartRendering(clear, General.Colors.Background.WithAlpha(0).ToColorValue(), overlaytex, false); - // Can't render! - Finish(); - return false; + // Ready for rendering + UpdateTransformations(); + return true; } // Can't render! @@ -761,16 +737,6 @@ namespace CodeImp.DoomBuilder.Rendering { // Stop rendering graphics.FinishRendering(); - - // Release rendertarget - try - { - graphics.Device.DepthStencilSurface = graphics.DepthBuffer; - graphics.Device.SetRenderTarget(0, graphics.BackBuffer); - } - catch(Exception) { } - if(targetsurface != null) targetsurface.Dispose(); - targetsurface = null; } // Done @@ -831,7 +797,7 @@ namespace CodeImp.DoomBuilder.Rendering lastgridx != offsetx || lastgridy != offsety || drawmapcenter != lastdrawmapcenter) { // Lock background rendertarget memory - DataRectangle lockedrect = backtex.LockRectangle(0, LockFlags.NoSystemLock); + DataRectangle lockedrect = backtex.LockRectangle(0, LockFlags.None); // Create a plotter Plotter gridplotter = new Plotter((PixelColor*)lockedrect.Data.DataPointer.ToPointer(), lockedrect.Pitch / sizeof(PixelColor), backsize.Height, backsize.Width, backsize.Height); @@ -1257,15 +1223,15 @@ namespace CodeImp.DoomBuilder.Rendering bool isthingsmode = (General.Editing.Mode.GetType().Name == "ThingsMode"); // Set renderstates for things rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.FogEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, alphacolor.ToArgb()); - graphics.Device.SetStreamSource(0, thingsvertices, 0, FlatVertex.Stride); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, alphacolor.ToArgb()); + graphics.SetStreamSource(0, thingsvertices, 0, FlatVertex.Stride); // Set things texture graphics.Shaders.Things2D.Texture1 = General.Map.Data.ThingTexture.Texture; //mxd @@ -1325,7 +1291,7 @@ namespace CodeImp.DoomBuilder.Rendering stream.Dispose(); // Draw! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); buffercount = 0; // Determine next lock size @@ -1341,7 +1307,7 @@ namespace CodeImp.DoomBuilder.Rendering // Draw what's still remaining if(buffercount > 0) - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); // Done graphics.Shaders.Things2D.EndPass(); @@ -1474,7 +1440,7 @@ namespace CodeImp.DoomBuilder.Rendering stream.Dispose(); // Draw! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); buffercount = 0; @@ -1490,7 +1456,7 @@ namespace CodeImp.DoomBuilder.Rendering stream.Dispose(); // Draw what's still remaining - if(buffercount > 0) graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + if(buffercount > 0) graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); } } @@ -1527,7 +1493,7 @@ namespace CodeImp.DoomBuilder.Rendering stream.Dispose(); // Draw! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); buffercount = 0; // Determine next lock size @@ -1543,7 +1509,7 @@ namespace CodeImp.DoomBuilder.Rendering // Draw what's still remaining if(buffercount > 0) - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, buffercount * 2); //Done with this pass graphics.Shaders.Things2D.EndPass(); @@ -1552,9 +1518,9 @@ namespace CodeImp.DoomBuilder.Rendering if(General.Settings.GZDrawModelsMode != ModelRenderMode.NONE) { // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FillMode, FillMode.Wireframe); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FillMode, FillMode.Wireframe); graphics.Shaders.Things2D.BeginPass(2); @@ -1601,7 +1567,7 @@ namespace CodeImp.DoomBuilder.Rendering //Done with this pass graphics.Shaders.Things2D.EndPass(); - graphics.Device.SetRenderState(RenderState.FillMode, FillMode.Solid); + graphics.SetRenderState(RenderState.FillMode, FillMode.Solid); } graphics.Shaders.Things2D.End(); @@ -1639,44 +1605,42 @@ namespace CodeImp.DoomBuilder.Rendering if(surfacetex != null) { // Set the rendertarget to the surface texture - targetsurface = surfacetex.GetSurfaceLevel(0); - if(graphics.StartRendering(true, General.Colors.Background.WithAlpha(0).ToColorValue(), targetsurface, null)) - { - // Make sure anything we need is loaded - General.Map.Data.UnknownTexture3D.CreateTexture(); - General.Map.Data.MissingTexture3D.CreateTexture(); //mxd - - // Set transformations - UpdateTransformations(); - - // Set states - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); - SetWorldTransformation(true); - graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); + graphics.StartRendering(true, General.Colors.Background.WithAlpha(0).ToColorValue(), surfacetex, false); + + // Make sure anything we need is loaded + General.Map.Data.UnknownTexture3D.CreateTexture(); + General.Map.Data.MissingTexture3D.CreateTexture(); //mxd + + // Set transformations + UpdateTransformations(); + + // Set states + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); + SetWorldTransformation(true); + graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); - // Prepare for rendering - switch(viewmode) - { - case ViewMode.Brightness: - surfaces.RenderSectorBrightness(yviewport); - surfaces.RenderSectorSurfaces(graphics); - break; + // Prepare for rendering + switch(viewmode) + { + case ViewMode.Brightness: + surfaces.RenderSectorBrightness(yviewport); + surfaces.RenderSectorSurfaces(graphics); + break; - case ViewMode.FloorTextures: - surfaces.RenderSectorFloors(yviewport); - surfaces.RenderSectorSurfaces(graphics); - break; + case ViewMode.FloorTextures: + surfaces.RenderSectorFloors(yviewport); + surfaces.RenderSectorSurfaces(graphics); + break; - case ViewMode.CeilingTextures: - surfaces.RenderSectorCeilings(yviewport); - surfaces.RenderSectorSurfaces(graphics); - break; - } + case ViewMode.CeilingTextures: + surfaces.RenderSectorCeilings(yviewport); + surfaces.RenderSectorSurfaces(graphics); + break; } } @@ -1709,12 +1673,12 @@ namespace CodeImp.DoomBuilder.Rendering } // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); graphics.Shaders.Display2D.Texture1 = t; SetWorldTransformation(transformcoords); graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1722,7 +1686,7 @@ namespace CodeImp.DoomBuilder.Rendering // Draw graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.BeginPass(1); - graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleList, 0, vertices.Length / 3, vertices); + graphics.DrawUserPrimitives(PrimitiveType.TriangleList, 0, vertices.Length / 3, vertices); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); } @@ -1734,12 +1698,12 @@ namespace CodeImp.DoomBuilder.Rendering if(vertices.Length < 3) return; // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(true); graphics.Shaders.Things2D.FillColor = new Color4(color); @@ -1748,7 +1712,7 @@ namespace CodeImp.DoomBuilder.Rendering // Draw graphics.Shaders.Things2D.Begin(); graphics.Shaders.Things2D.BeginPass(2); - graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleList, 0, vertices.Length / 3, vertices); + graphics.DrawUserPrimitives(PrimitiveType.TriangleList, 0, vertices.Length / 3, vertices); graphics.Shaders.Things2D.EndPass(); graphics.Shaders.Things2D.End(); } @@ -1765,21 +1729,21 @@ namespace CodeImp.DoomBuilder.Rendering if(label.SkipRendering) return; // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); graphics.Shaders.Display2D.Texture1 = label.Texture; SetWorldTransformation(false); graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, false); - graphics.Device.SetStreamSource(0, label.VertexBuffer, 0, FlatVertex.Stride); + graphics.SetStreamSource(0, label.VertexBuffer, 0, FlatVertex.Stride); // Draw graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.BeginPass(1); //mxd - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); } @@ -1799,12 +1763,12 @@ namespace CodeImp.DoomBuilder.Rendering if(labels.Count == skipped) return; // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, false); @@ -1819,10 +1783,10 @@ namespace CodeImp.DoomBuilder.Rendering { graphics.Shaders.Display2D.Texture1 = label.Texture; graphics.Shaders.Display2D.ApplySettings(); - graphics.Device.SetStreamSource(0, label.VertexBuffer, 0, FlatVertex.Stride); + graphics.SetStreamSource(0, label.VertexBuffer, 0, FlatVertex.Stride); // Draw - graphics.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); + graphics.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); } } @@ -1874,12 +1838,12 @@ namespace CodeImp.DoomBuilder.Rendering quads[3].SetColors(c.ToInt()); // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1912,12 +1876,12 @@ namespace CodeImp.DoomBuilder.Rendering quad.SetColors(c.ToInt()); // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1947,12 +1911,12 @@ namespace CodeImp.DoomBuilder.Rendering quad.SetColors(c.ToInt()); // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.Texture1 = texture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -2045,19 +2009,19 @@ namespace CodeImp.DoomBuilder.Rendering } // Write to buffer - VertexBuffer vb = new VertexBuffer(General.Map.Graphics.Device, FlatVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + VertexBuffer vb = new VertexBuffer(FlatVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); DataStream s = vb.Lock(0, FlatVertex.Stride * verts.Length, LockFlags.Discard); s.WriteRange(verts); vb.Unlock(); s.Dispose(); // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -2065,8 +2029,8 @@ namespace CodeImp.DoomBuilder.Rendering // Draw graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.BeginPass(1); - graphics.Device.SetStreamSource(0, vb, 0, FlatVertex.Stride); - graphics.Device.DrawPrimitives(PrimitiveType.LineList, 0, pointscount / 2); + graphics.SetStreamSource(0, vb, 0, FlatVertex.Stride); + graphics.DrawPrimitives(PrimitiveType.LineList, 0, pointscount / 2); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); vb.Dispose(); @@ -2107,12 +2071,12 @@ namespace CodeImp.DoomBuilder.Rendering verts[3].c = c.ToInt(); // Set renderstates for rendering - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -2120,7 +2084,7 @@ namespace CodeImp.DoomBuilder.Rendering // Draw graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.BeginPass(0); - graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, verts); + graphics.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, verts); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); } diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs index 46a412dc2..119411597 100755 --- a/Source/Core/Rendering/Renderer3D.cs +++ b/Source/Core/Rendering/Renderer3D.cs @@ -292,9 +292,9 @@ namespace CodeImp.DoomBuilder.Rendering // This sets the appropriate view matrix public void ApplyMatrices2D() { - graphics.Device.SetTransform(TransformState.World, world); - graphics.Device.SetTransform(TransformState.Projection, Matrix.Identity); - graphics.Device.SetTransform(TransformState.View, view2d); + graphics.SetTransform(TransformState.World, world); + graphics.SetTransform(TransformState.Projection, Matrix.Identity); + graphics.SetTransform(TransformState.View, view2d); } #endregion @@ -304,65 +304,56 @@ namespace CodeImp.DoomBuilder.Rendering // This starts rendering public bool Start() { - // Start drawing - if(graphics.StartRendering(true, General.Colors.Background.ToColorValue(), graphics.BackBuffer, graphics.DepthBuffer)) - { - // Beginning renderstates - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); - graphics.Device.SetRenderState(RenderState.FogEnable, false); - graphics.Device.SetRenderState(RenderState.FogDensity, 1.0f); - graphics.Device.SetRenderState(RenderState.FogColor, General.Colors.Background.ToInt()); - graphics.Device.SetRenderState(RenderState.FogStart, General.Settings.ViewDistance * FOG_RANGE); - graphics.Device.SetRenderState(RenderState.FogEnd, General.Settings.ViewDistance); - graphics.Device.SetRenderState(RenderState.FogTableMode, FogMode.Linear); - graphics.Device.SetRenderState(RenderState.RangeFogEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Shaders.World3D.HighlightColor = new Color4(); //mxd - - // Texture addressing - graphics.Device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); - - // Matrices - world = Matrix.Identity; - ApplyMatrices3D(); - - // Highlight - if(General.Settings.AnimateVisualSelection) - { - highlightglow = (float)Math.Sin(Clock.CurrentTime / 100.0f) * 0.1f + 0.4f; - highlightglowinv = -highlightglow + 0.8f; - } - else - { - highlightglow = 0.4f; - highlightglowinv = 0.3f; - } - - // Determine shader pass to use - shaderpass = (fullbrightness ? 1 : 0); - - // Create crosshair vertices - if(crosshairverts == null) - CreateCrosshairVerts(new Size(General.Map.Data.Crosshair3D.Width, General.Map.Data.Crosshair3D.Height)); + // Start drawing + graphics.StartRendering(true, General.Colors.Background.ToColorValue()); + + // Beginning renderstates + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.FogEnable, false); + graphics.SetRenderState(RenderState.FogColor, General.Colors.Background.ToInt()); + graphics.SetRenderState(RenderState.FogStart, General.Settings.ViewDistance * FOG_RANGE); + graphics.SetRenderState(RenderState.FogEnd, General.Settings.ViewDistance); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.Shaders.World3D.HighlightColor = new Color4(); //mxd + + // Texture addressing + graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); + + // Matrices + world = Matrix.Identity; + ApplyMatrices3D(); - //mxd. Crate vertex handle - if(vertexhandle == null) vertexhandle = new VisualVertexHandle(); - - // Ready - return true; + // Highlight + if(General.Settings.AnimateVisualSelection) + { + highlightglow = (float)Math.Sin(Clock.CurrentTime / 100.0f) * 0.1f + 0.4f; + highlightglowinv = -highlightglow + 0.8f; } else { - // Can't render now - return false; + highlightglow = 0.4f; + highlightglowinv = 0.3f; } + + // Determine shader pass to use + shaderpass = (fullbrightness ? 1 : 0); + + // Create crosshair vertices + if(crosshairverts == null) + CreateCrosshairVerts(new Size(General.Map.Data.Crosshair3D.Width, General.Map.Data.Crosshair3D.Height)); + + //mxd. Crate vertex handle + if(vertexhandle == null) vertexhandle = new VisualVertexHandle(); + + // Ready + return true; } // This begins rendering world geometry @@ -392,12 +383,12 @@ namespace CodeImp.DoomBuilder.Rendering UpdateLights(); // Initial renderstates - graphics.Device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); - graphics.Device.SetRenderState(RenderState.ZEnable, true); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); + graphics.SetRenderState(RenderState.ZEnable, true); + graphics.SetRenderState(RenderState.ZWriteEnable, true); + graphics.SetRenderState(RenderState.AlphaBlendEnable, false); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.TextureFactor, -1); graphics.Shaders.World3D.Begin(); //mxd. SKY PASS @@ -416,10 +407,10 @@ namespace CodeImp.DoomBuilder.Rendering //mxd. Render models, without backface culling if(maskedmodelthings.Count > 0) { - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.AlphaTestEnable, true); + graphics.SetRenderState(RenderState.CullMode, Cull.None); RenderModels(false, false); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); + graphics.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); } // MASK PASS @@ -427,7 +418,7 @@ namespace CodeImp.DoomBuilder.Rendering { world = Matrix.Identity; ApplyMatrices3D(); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, true); RenderSinglePass(maskedgeo, maskedthings); } @@ -436,22 +427,22 @@ namespace CodeImp.DoomBuilder.Rendering { world = Matrix.Identity; ApplyMatrices3D(); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); RenderLights(solidgeo, lightthings); RenderLights(maskedgeo, lightthings); if (maskedmodelthings.Count > 0) { - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.AlphaTestEnable, true); + graphics.SetRenderState(RenderState.CullMode, Cull.None); graphics.Shaders.World3D.IgnoreNormals = true; RenderModels(true, false); graphics.Shaders.World3D.IgnoreNormals = false; - graphics.Device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); + graphics.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); } } @@ -460,10 +451,10 @@ namespace CodeImp.DoomBuilder.Rendering { world = Matrix.Identity; ApplyMatrices3D(); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); RenderTranslucentPass(translucentgeo, translucentthings); } @@ -472,27 +463,27 @@ namespace CodeImp.DoomBuilder.Rendering { world = Matrix.Identity; ApplyMatrices3D(); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); RenderTranslucentLights(translucentgeo, lightthings); } //mxd. Render translucent models, with backface culling if(translucentmodelthings.Count > 0) { - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); RenderModels(false, true); } // [ZZ] light pass on alpha models if (General.Settings.GZDrawLightsMode != LightRenderMode.NONE && !fullbrightness && lightthings.Count > 0 && translucentmodelthings.Count > 0) { - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, true); graphics.Shaders.World3D.IgnoreNormals = true; RenderModels(true, true); graphics.Shaders.World3D.IgnoreNormals = false; @@ -599,11 +590,11 @@ namespace CodeImp.DoomBuilder.Rendering //It should render faster and it has fancy arrow! :) private void RenderThingCages() { - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); graphics.Shaders.World3D.BeginPass(16); @@ -624,13 +615,13 @@ namespace CodeImp.DoomBuilder.Rendering //Render cage graphics.Shaders.World3D.ApplySettings(); - graphics.Device.SetStreamSource(0, t.CageBuffer, 0, WorldVertex.Stride); - graphics.Device.DrawPrimitives(PrimitiveType.LineList, 0, t.CageLength); + graphics.SetStreamSource(0, t.CageBuffer, 0, WorldVertex.Stride); + graphics.DrawPrimitives(PrimitiveType.LineList, 0, t.CageLength); } // Done graphics.Shaders.World3D.EndPass(); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.TextureFactor, -1); } //mxd @@ -638,11 +629,11 @@ namespace CodeImp.DoomBuilder.Rendering { if(visualvertices == null) return; - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); graphics.Shaders.World3D.BeginPass(16); @@ -666,13 +657,13 @@ namespace CodeImp.DoomBuilder.Rendering //Commence drawing!!11 graphics.Shaders.World3D.ApplySettings(); - graphics.Device.SetStreamSource(0, v.CeilingVertex ? vertexhandle.Upper : vertexhandle.Lower, 0, WorldVertex.Stride); - graphics.Device.DrawPrimitives(PrimitiveType.LineList, 0, 8); + graphics.SetStreamSource(0, v.CeilingVertex ? vertexhandle.Upper : vertexhandle.Lower, 0, WorldVertex.Stride); + graphics.DrawPrimitives(PrimitiveType.LineList, 0, 8); } // Done graphics.Shaders.World3D.EndPass(); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.TextureFactor, -1); } //mxd @@ -730,18 +721,18 @@ namespace CodeImp.DoomBuilder.Rendering } } - VertexBuffer vb = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + VertexBuffer vb = new VertexBuffer(WorldVertex.Stride * verts.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); DataStream s = vb.Lock(0, WorldVertex.Stride * verts.Length, LockFlags.Discard); s.WriteRange(verts); vb.Unlock(); s.Dispose(); //begin rendering - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.ZWriteEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.ZWriteEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.SourceAlpha); graphics.Shaders.World3D.BeginPass(15); @@ -750,12 +741,12 @@ namespace CodeImp.DoomBuilder.Rendering //render graphics.Shaders.World3D.ApplySettings(); - graphics.Device.SetStreamSource(0, vb, 0, WorldVertex.Stride); - graphics.Device.DrawPrimitives(PrimitiveType.LineList, 0, pointscount / 2); + graphics.SetStreamSource(0, vb, 0, WorldVertex.Stride); + graphics.DrawPrimitives(PrimitiveType.LineList, 0, pointscount / 2); // Done graphics.Shaders.World3D.EndPass(); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetRenderState(RenderState.TextureFactor, -1); vb.Dispose(); } @@ -809,7 +800,7 @@ namespace CodeImp.DoomBuilder.Rendering sector = g.Sector; // Set stream source - graphics.Device.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); } else { @@ -859,7 +850,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.ApplySettings(); // Render! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } } @@ -868,10 +859,10 @@ namespace CodeImp.DoomBuilder.Rendering if(thingspass.Count > 0) { // Texture addressing - graphics.Device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); - graphics.Device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); - graphics.Device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Clamp); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera... + graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); + graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); + graphics.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Clamp); + graphics.SetRenderState(RenderState.CullMode, Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera... Color4 vertexcolor = new Color4(); //mxd @@ -971,10 +962,10 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.ApplySettings(); // Apply buffer - graphics.Device.SetStreamSource(0, t.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, t.GeometryBuffer, 0, WorldVertex.Stride); // Render! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, t.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, t.Triangles); } } @@ -983,10 +974,10 @@ namespace CodeImp.DoomBuilder.Rendering } // Texture addressing - graphics.Device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); //mxd + graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); + graphics.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); //mxd } // Done rendering with this shader @@ -1051,11 +1042,11 @@ namespace CodeImp.DoomBuilder.Rendering switch(g.RenderPass) { case RenderPass.Additive: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); break; case RenderPass.Alpha: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); break; } @@ -1096,7 +1087,7 @@ namespace CodeImp.DoomBuilder.Rendering sector = g.Sector; // Set stream source - graphics.Device.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); } else { @@ -1146,7 +1137,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.ApplySettings(); // Render! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } else graphics.Shaders.World3D.Desaturation = 0f; } @@ -1155,10 +1146,10 @@ namespace CodeImp.DoomBuilder.Rendering if(thingspass.Count > 0) { // Texture addressing - graphics.Device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); - graphics.Device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); - graphics.Device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Clamp); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera... + graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); + graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); + graphics.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Clamp); + graphics.SetRenderState(RenderState.CullMode, Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera... // Sort geometry by camera distance. First vertex of the BoundingBox is it's center thingspass.Sort(delegate(VisualThing vt1, VisualThing vt2) @@ -1193,11 +1184,11 @@ namespace CodeImp.DoomBuilder.Rendering switch(t.RenderPass) { case RenderPass.Additive: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); break; case RenderPass.Alpha: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); break; } @@ -1292,10 +1283,10 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.ApplySettings(); // Apply buffer - graphics.Device.SetStreamSource(0, t.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, t.GeometryBuffer, 0, WorldVertex.Stride); // Render! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, t.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, t.Triangles); } } @@ -1303,10 +1294,10 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.StencilColor = new Color4(0f, 1f, 1f, 1f); // Texture addressing - graphics.Device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); - graphics.Device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); - graphics.Device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); //mxd + graphics.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap); + graphics.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap); + graphics.SetRenderState(RenderState.CullMode, Cull.Counterclockwise); //mxd } // Done rendering with this shader @@ -1370,7 +1361,7 @@ namespace CodeImp.DoomBuilder.Rendering sector = g.Sector; // Set stream source - graphics.Device.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); } else { @@ -1394,7 +1385,7 @@ namespace CodeImp.DoomBuilder.Rendering Vector4 lpr; if (lightOffsets[0] > 0) { - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = 0; i < count; i++) { @@ -1413,7 +1404,7 @@ namespace CodeImp.DoomBuilder.Rendering } else graphics.Shaders.World3D.SpotLight = false; graphics.Shaders.World3D.ApplySettings(); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } } @@ -1422,7 +1413,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[1] > 0) { count += lightOffsets[1]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = lightOffsets[0]; i < count; i++) { @@ -1441,7 +1432,7 @@ namespace CodeImp.DoomBuilder.Rendering } else graphics.Shaders.World3D.SpotLight = false; graphics.Shaders.World3D.ApplySettings(); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } } @@ -1450,7 +1441,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[2] > 0) { count += lightOffsets[2]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = lightOffsets[0] + lightOffsets[1]; i < count; i++) { @@ -1469,7 +1460,7 @@ namespace CodeImp.DoomBuilder.Rendering } else graphics.Shaders.World3D.SpotLight = false; graphics.Shaders.World3D.ApplySettings(); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } } @@ -1478,7 +1469,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[3] > 0) { count += lightOffsets[3]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.ReverseSubtract); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.ReverseSubtract); for (int i = lightOffsets[0] + lightOffsets[1] + lightOffsets[2]; i < count; i++) { @@ -1498,7 +1489,7 @@ namespace CodeImp.DoomBuilder.Rendering } else graphics.Shaders.World3D.SpotLight = false; graphics.Shaders.World3D.ApplySettings(); - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } } @@ -1518,15 +1509,15 @@ namespace CodeImp.DoomBuilder.Rendering VisualSector sector = null; - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.One); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.BlendFactor); + graphics.SetRenderState(RenderState.SourceBlend, Blend.One); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.BlendFactor); // RenderLightsFromGeometryList(geometrytolit, lights, sector, true); // graphics.Shaders.World3D.EndPass(); - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); } // @@ -1541,8 +1532,8 @@ namespace CodeImp.DoomBuilder.Rendering VisualSector sector = null; - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.One); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.BlendFactor); + graphics.SetRenderState(RenderState.SourceBlend, Blend.One); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.BlendFactor); foreach (KeyValuePair<ImageData, List<VisualGeometry>> group in geometrytolit) { @@ -1553,7 +1544,7 @@ namespace CodeImp.DoomBuilder.Rendering } graphics.Shaders.World3D.EndPass(); - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); } //mxd. Render models @@ -1601,11 +1592,11 @@ namespace CodeImp.DoomBuilder.Rendering switch (t.RenderPass) { case RenderPass.Additive: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.One); break; case RenderPass.Alpha: - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); break; } @@ -1688,7 +1679,7 @@ namespace CodeImp.DoomBuilder.Rendering // normal lights if (lightOffsets[0] > 0) { - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = 0; i < count; i++) { @@ -1716,7 +1707,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[1] > 0) { count += lightOffsets[1]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = lightOffsets[0]; i < count; i++) { @@ -1744,7 +1735,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[2] > 0) { count += lightOffsets[2]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); for (int i = lightOffsets[0] + lightOffsets[1]; i < count; i++) { @@ -1772,7 +1763,7 @@ namespace CodeImp.DoomBuilder.Rendering if (lightOffsets[3] > 0) { count += lightOffsets[3]; - graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.ReverseSubtract); + graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.ReverseSubtract); for (int i = lightOffsets[0] + lightOffsets[1] + lightOffsets[2]; i < count; i++) { @@ -1801,7 +1792,7 @@ namespace CodeImp.DoomBuilder.Rendering } graphics.Shaders.World3D.EndPass(); - if (lightpass) graphics.Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + if (lightpass) graphics.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); } //mxd @@ -1831,7 +1822,7 @@ namespace CodeImp.DoomBuilder.Rendering sector = g.Sector; // Set stream source - graphics.Device.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); + graphics.SetStreamSource(0, sector.GeometryBuffer, 0, WorldVertex.Stride); } else { @@ -1848,7 +1839,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.World3D.ApplySettings(); // Render! - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); + graphics.DrawPrimitives(PrimitiveType.TriangleList, g.VertexOffset, g.Triangles); } } @@ -2071,15 +2062,15 @@ namespace CodeImp.DoomBuilder.Rendering ApplyMatrices3D(); // Set renderstates - graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); - graphics.Device.SetRenderState(RenderState.ZEnable, false); - graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true); - graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false); - graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); - graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); - graphics.Device.SetRenderState(RenderState.TextureFactor, -1); - graphics.Device.SetTransform(TransformState.World, Matrix.Identity); - graphics.Device.SetTransform(TransformState.Projection, Matrix.Identity); + graphics.SetRenderState(RenderState.CullMode, Cull.None); + graphics.SetRenderState(RenderState.ZEnable, false); + graphics.SetRenderState(RenderState.AlphaBlendEnable, true); + graphics.SetRenderState(RenderState.AlphaTestEnable, false); + graphics.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + graphics.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); + graphics.SetRenderState(RenderState.TextureFactor, -1); + graphics.SetTransform(TransformState.World, Matrix.Identity); + graphics.SetTransform(TransformState.Projection, Matrix.Identity); ApplyMatrices2D(); // Texture @@ -2098,7 +2089,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.SetSettings(1.0f, 1.0f, 0.0f, 1.0f, true); graphics.Shaders.Display2D.BeginPass(1); - graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, crosshairverts); + graphics.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, crosshairverts); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); } @@ -2106,7 +2097,7 @@ namespace CodeImp.DoomBuilder.Rendering // This switches fog on and off public void SetFogMode(bool usefog) { - graphics.Device.SetRenderState(RenderState.FogEnable, usefog); + graphics.SetRenderState(RenderState.FogEnable, usefog); } // This siwtches crosshair busy icon on and off diff --git a/Source/Core/Rendering/SurfaceManager.cs b/Source/Core/Rendering/SurfaceManager.cs index 7dc8211c4..18617b212 100755 --- a/Source/Core/Rendering/SurfaceManager.cs +++ b/Source/Core/Rendering/SurfaceManager.cs @@ -141,8 +141,7 @@ namespace CodeImp.DoomBuilder.Rendering for(int i = 0; i < set.Value.buffersizes.Count; i++) { // Make the new buffer! - VertexBuffer b = new VertexBuffer(General.Map.Graphics.Device, FlatVertex.Stride * set.Value.buffersizes[i], - Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + VertexBuffer b = new VertexBuffer(FlatVertex.Stride * set.Value.buffersizes[i], Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); // Start refilling the buffer with sector geometry DataStream bstream = b.Lock(0, FlatVertex.Stride * set.Value.buffersizes[i], LockFlags.Discard); @@ -282,8 +281,7 @@ namespace CodeImp.DoomBuilder.Rendering if(!resourcesunloaded) { // Make the new buffer! - vb = new VertexBuffer(General.Map.Graphics.Device, FlatVertex.Stride * buffernumvertices, - Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); // Add it. set.buffers.Add(vb); @@ -334,8 +332,7 @@ namespace CodeImp.DoomBuilder.Rendering if(!resourcesunloaded) { // Make the new buffer and lock it - vb = new VertexBuffer(General.Map.Graphics.Device, FlatVertex.Stride * buffernumvertices, - Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + vb = new VertexBuffer(FlatVertex.Stride * buffernumvertices, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); bstream = vb.Lock(0, FlatVertex.Stride * theseentries.Count * verticesperentry, LockFlags.Discard); } @@ -682,11 +679,11 @@ namespace CodeImp.DoomBuilder.Rendering if(set.buffers[entry.bufferindex] != lastbuffer) { lastbuffer = set.buffers[entry.bufferindex]; - graphics.Device.SetStreamSource(0, lastbuffer, 0, FlatVertex.Stride); + graphics.SetStreamSource(0, lastbuffer, 0, FlatVertex.Stride); } // Draw - graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, entry.vertexoffset + (entry.numvertices * surfacevertexoffsetmul), entry.numvertices / 3); + graphics.DrawPrimitives(PrimitiveType.TriangleList, entry.vertexoffset + (entry.numvertices * surfacevertexoffsetmul), entry.numvertices / 3); } graphics.Shaders.Display2D.EndPass(); diff --git a/Source/Core/Rendering/TextLabel.cs b/Source/Core/Rendering/TextLabel.cs index a72af7330..d3ec9eca7 100755 --- a/Source/Core/Rendering/TextLabel.cs +++ b/Source/Core/Rendering/TextLabel.cs @@ -337,20 +337,17 @@ namespace CodeImp.DoomBuilder.Rendering img.Save(memstream, ImageFormat.Bmp); memstream.Seek(0, SeekOrigin.Begin); - texture = Texture.FromStream(General.Map.Graphics.Device, memstream, (int)memstream.Length, - img.Size.Width, img.Size.Height, 1, Usage.None, Format.Unknown, - Pool.Managed, General.Map.Graphics.PostFilter, General.Map.Graphics.MipGenerateFilter, 0); + texture = Texture.FromStream(memstream, (int)memstream.Length, img.Size.Width, img.Size.Height, 1, Usage.None, Format.Unknown, Pool.Managed); } //mxd. Create the buffer if(textbuffer == null || textbuffer.Disposed) { - textbuffer = new VertexBuffer(General.Map.Graphics.Device, 4 * FlatVertex.Stride, - Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); + textbuffer = new VertexBuffer(4 * FlatVertex.Stride, Usage.Dynamic | Usage.WriteOnly, VertexFormat.None, Pool.Default); } //mxd. Lock the buffer - using(DataStream stream = textbuffer.Lock(0, 4 * FlatVertex.Stride, LockFlags.Discard | LockFlags.NoSystemLock)) + using(DataStream stream = textbuffer.Lock(0, 4 * FlatVertex.Stride, LockFlags.Discard)) { FlatQuad quad = new FlatQuad(PrimitiveType.TriangleStrip, beginx, beginy, beginx + texturesize.Width, beginy + texturesize.Height); stream.WriteRange(quad.Vertices); diff --git a/Source/Core/Rendering/Things2DShader.cs b/Source/Core/Rendering/Things2DShader.cs index 115c227f3..b7304f75f 100755 --- a/Source/Core/Rendering/Things2DShader.cs +++ b/Source/Core/Rendering/Things2DShader.cs @@ -99,7 +99,7 @@ namespace CodeImp.DoomBuilder.Rendering new VertexElement(0, 16, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0), VertexElement.VertexDeclarationEnd }; - vertexdecl = new VertexDeclaration(General.Map.Graphics.Device, elements); + vertexdecl = new VertexDeclaration(elements); // We have no destructor GC.SuppressFinalize(this); @@ -132,8 +132,8 @@ namespace CodeImp.DoomBuilder.Rendering { Vector4 values = new Vector4(0.0f, 0.0f, 1.0f, alpha); effect.SetValue(rendersettings, values); - Matrix world = manager.D3DDevice.Device.GetTransform(TransformState.World); - Matrix view = manager.D3DDevice.Device.GetTransform(TransformState.View); + Matrix world = manager.D3DDevice.GetTransform(TransformState.World); + Matrix view = manager.D3DDevice.GetTransform(TransformState.View); effect.SetValue(transformsettings, world * view); settingschanged = true; //mxd } @@ -141,7 +141,7 @@ namespace CodeImp.DoomBuilder.Rendering //mxd. Used to render models public void SetTransformSettings(Matrix world) { - Matrix view = manager.D3DDevice.Device.GetTransform(TransformState.View); + Matrix view = manager.D3DDevice.GetTransform(TransformState.View); effect.SetValue(transformsettings, world * view); settingschanged = true; } diff --git a/Source/Core/Rendering/VisualVertexHandle.cs b/Source/Core/Rendering/VisualVertexHandle.cs index ae10280ac..68cd81b7f 100755 --- a/Source/Core/Rendering/VisualVertexHandle.cs +++ b/Source/Core/Rendering/VisualVertexHandle.cs @@ -85,7 +85,7 @@ namespace CodeImp.DoomBuilder.Rendering v2, v3, v3, v0 }; - upper = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * vu.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + upper = new VertexBuffer(WorldVertex.Stride * vu.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); upper.Lock(0, WorldVertex.Stride * vu.Length, LockFlags.None).WriteRange(vu); upper.Unlock(); @@ -99,7 +99,7 @@ namespace CodeImp.DoomBuilder.Rendering v6, v7, v7, v4 }; - lower = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * vl.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + lower = new VertexBuffer(WorldVertex.Stride * vl.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); lower.Lock(0, WorldVertex.Stride * vl.Length, LockFlags.None).WriteRange(vl); lower.Unlock(); } diff --git a/Source/Core/Rendering/World3DShader.cs b/Source/Core/Rendering/World3DShader.cs index ed6fc8e8a..c860ca5da 100755 --- a/Source/Core/Rendering/World3DShader.cs +++ b/Source/Core/Rendering/World3DShader.cs @@ -312,7 +312,7 @@ namespace CodeImp.DoomBuilder.Rendering VertexElement.VertexDeclarationEnd }; - vertexdecl = new VertexDeclaration(General.Map.Graphics.Device, ve); + vertexdecl = new VertexDeclaration(ve); // We have no destructor GC.SuppressFinalize(this); diff --git a/Source/Core/SlimDX.cs b/Source/Core/SlimDX.cs index eff32fd25..fc5c68009 100644 --- a/Source/Core/SlimDX.cs +++ b/Source/Core/SlimDX.cs @@ -2,78 +2,12 @@ namespace SlimDX { - #region Device context - namespace Direct3D9 - { - public class Device - { - public Device(Direct3D d3d, int adapter, DeviceType type, IntPtr windowHandle, CreateFlags createFlags, PresentParameters pp) { } - - public void Reset(PresentParameters pp) { } - - public void SetStreamSource(int index, VertexBuffer buffer, long offset, long stride) { } - public void SetRenderState(RenderState state, float v) { } - public void SetRenderState(RenderState state, bool v) { } - public void SetRenderState(RenderState state, int v) { } - public void SetRenderState(RenderState state, Compare v) { } - public void SetRenderState(RenderState state, ColorWriteEnable v) { } - public void SetRenderState(RenderState state, ColorSource v) { } - public void SetRenderState(RenderState state, Cull v) { } - public void SetRenderState(RenderState state, Blend v) { } - public void SetRenderState(RenderState state, BlendOperation v) { } - public void SetRenderState(RenderState state, FillMode v) { } - public void SetRenderState(RenderState state, FogMode v) { } - public void SetRenderState(RenderState state, ShadeMode v) { } - - public Matrix GetTransform(TransformState state) { return Matrix.Identity; } - public void SetTransform(TransformState state, Matrix matrix) { } - - public void SetSamplerState(int unit, SamplerState state, TextureAddress address) { } - - public void BeginScene() { } - public void EndScene() { } - public void Present() { } - - public void Clear(ClearFlags flags, Color4 color, float depth, int stencil) { } - public void DrawPrimitives(PrimitiveType type, int startIndex, int primitiveCount) { } - public void DrawUserPrimitives<T>(PrimitiveType type, int startIndex, int primitiveCount, T[] data) where T : struct { } - - public void GetRenderTargetData(Surface renderTarget, Surface destinationSurface) { } // Copies the render-target data from device memory to system memory - - public void SetRenderTarget(int i, Surface surface) { } - - public Surface GetBackBuffer(int i, int j) { return null; } - - public Capabilities Capabilities { get; } - public Material Material { private get; set; } - public VertexDeclaration VertexDeclaration { private get; set; } - public object PixelShader { private get; set; } - public object VertexShader { private get; set; } - public Surface DepthStencilSurface { get; set; } - public Viewport Viewport { get; private set; } - - public Result TestCooperativeLevel() { return new Result { IsSuccess = true }; } - - public void Dispose() { } - } - - public class Material - { - public Color4 Ambient; - public Color4 Diffuse; - public Color4 Specular; - } - - public struct Viewport { } - } - #endregion - #region High level mesh rendering namespace Direct3D9 { public class Mesh { - public Mesh(Device device, int indexCount, int vertexCount, MeshFlags flags, VertexElement[] elements) { } + public Mesh(int indexCount, int vertexCount, MeshFlags flags, VertexElement[] elements) { } public VertexBuffer VertexBuffer { get; private set; } public IndexBuffer IndexBuffer { get; private set; } @@ -83,20 +17,14 @@ namespace SlimDX public void UnlockVertexBuffer() { } public void UnlockIndexBuffer() { } - public void OptimizeInPlace(MeshOptimizeFlags flags) { } - public void DrawSubset(int index) { } public void Dispose() { } } - public class Macro { } - public class Include { } - public class EffectPool { } - public class Effect { - public static Effect FromStream(Device device, System.IO.Stream stream, Macro[] macro, Include include, string skipConstants, ShaderFlags flags, EffectPool pool, out string errors) { errors = ""; return null; } + public static Effect FromStream(System.IO.Stream stream, ShaderFlags flags, out string errors) { errors = ""; return null; } public void SetTexture(EffectHandle handle, BaseTexture texture) { } public void SetValue<T>(EffectHandle handle, T value) where T : struct { } @@ -104,7 +32,7 @@ namespace SlimDX public string Technique { set; private get; } public void CommitChanges() { } - public void Begin(FX fx) { } + public void Begin() { } public void BeginPass(int index) { } public void EndPass() { } public void End() { } @@ -124,7 +52,7 @@ namespace SlimDX { public class VertexDeclaration { - public VertexDeclaration(Device device, VertexElement[] elements) { } + public VertexDeclaration(VertexElement[] elements) { } public void Dispose() { } } @@ -141,15 +69,15 @@ namespace SlimDX { public class VertexBuffer { - public VertexBuffer(Device device, int sizeInBytes, Usage usage, VertexFormat format, Pool pool) { } + public VertexBuffer(int sizeInBytes, Usage usage, VertexFormat format, Pool pool) { } public DataStream Lock(int offset, int size, LockFlags flags) { return null; } public void Unlock() { } public object Tag { get; set; } - public bool Disposed { get; } - public void Dispose() { } + public bool Disposed { get; private set; } + public void Dispose() { Disposed = true; } } public class IndexBuffer @@ -159,8 +87,8 @@ namespace SlimDX public object Tag { get; set; } - public bool Disposed { get; } - public void Dispose() { } + public bool Disposed { get; private set; } + public void Dispose() { Disposed = true; } } } #endregion @@ -168,27 +96,6 @@ namespace SlimDX #region Images (textures and surfaces) namespace Direct3D9 { - public class Surface - { - public static Surface CreateRenderTarget(Device device, int width, int height, Format format, MultisampleType multisample, int multisampleQuality, bool lockable) { return null; } - public static Surface CreateDepthStencil(Device device, int width, int height, Format format, MultisampleType multisample, int multisampleQuality, bool discard) { return null; } - public static Surface CreateOffscreenPlain(Device device, int width, int height, Format format, Pool pool) { return null; } - - public SurfaceDescription Description { get; private set; } - - public DataRectangle LockRectangle(LockFlags flags) { return null; } - public void UnlockRectangle() { } - - public void Dispose() { } - } - - public class SurfaceDescription - { - public int Width { get; set; } - public int Height { get; set; } - public Format Format { get; set; } - } - public class BaseTexture { public bool Disposed { get; } @@ -197,25 +104,23 @@ namespace SlimDX public class Texture : BaseTexture { - public Texture(Device device, int width, int height, int levels, Usage usage, Format format, Pool pool) { } + 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 SurfaceDescription GetLevelDescription(int level) { return null; } - public Surface GetSurfaceLevel(int level) { return null; } - - public static Texture FromStream(Device device, System.IO.Stream stream) { return null; } - public static Texture FromStream(Device device, System.IO.Stream stream, int length, int width, int height, int levels, Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorkey) { return null; } + 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(Device device, int size, int levels, Usage usage, Format format, Pool pool) { } - - public Surface GetCubeMapSurface(CubeMapFace face, int level) { return null; } + 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) { } @@ -259,65 +164,38 @@ namespace SlimDX AlphaFunc, AlphaRef, AlphaTestEnable, - Ambient, - AmbientMaterialSource, - AntialiasedLineEnable, - Clipping, - ColorVertex, - ColorWriteEnable, CullMode, BlendOperation, SourceBlend, DestinationBlend, - DiffuseMaterialSource, FillMode, FogEnable, - FogTableMode, - FogDensity, FogColor, FogStart, FogEnd, - Lighting, - LocalViewer, MultisampleAntialias, - NormalizeNormals, - PointSpriteEnable, - RangeFogEnable, - ShadeMode, - SpecularEnable, - StencilEnable, TextureFactor, ZEnable, ZWriteEnable } public enum Compare { GreaterEqual } - public enum ColorWriteEnable { Red, Green, Blue, Alpha } - public enum ColorSource { Material, Color1 } public enum Cull { None, Counterclockwise } public enum Blend { InverseSourceAlpha, SourceAlpha, One, BlendFactor } public enum BlendOperation { Add, ReverseSubtract } public enum FillMode { Solid, Wireframe } - public enum FogMode { Linear } - public enum ShadeMode { Gouraud } public enum TransformState { World, View, Projection } public enum SamplerState { AddressU, AddressV, AddressW } public enum TextureAddress { Wrap, Clamp } public enum ClearFlags { Target, ZBuffer } - public enum Format { Unknown, A8R8G8B8, D24X8 } + public enum Format { Unknown, A8R8G8B8 } public enum Usage { None, WriteOnly, Dynamic, RenderTarget } public enum VertexFormat { None } public enum Pool { Default, Managed, SystemMemory } - public enum LockFlags { None, Discard, NoSystemLock } + public enum LockFlags { None, Discard } public enum MeshFlags { Use32Bit, IndexBufferManaged, VertexBufferManaged, Managed } - public enum MeshOptimizeFlags { AttributeSort } public enum ShaderFlags { None, Debug } - public enum FX { DoNotSaveState } - public enum SwapEffect { Discard } - public enum MultisampleType { None } - public enum PresentInterval { Immediate } public enum PrimitiveType { LineList, TriangleList, TriangleStrip } - public enum Filter { None, Point, Box } public enum CubeMapFace { PositiveX, PositiveY, PositiveZ, NegativeX, NegativeY, NegativeZ } public enum TextureFilter { None, Point, Linear, Anisotropic } public enum DeclarationType { Float2, Float3, Color } @@ -586,71 +464,6 @@ namespace SlimDX } #endregion - #region Direct3D init - namespace Direct3D9 - { - public enum DeviceType { Reference, Hardware } - public enum CreateFlags { SoftwareVertexProcessing, HardwareVertexProcessing } - public enum DeviceCaps { HWTransformAndLight } - - public class Direct3D : ComObject - { - public Capabilities GetDeviceCaps(int adapter, DeviceType type) { return null; } - public bool CheckDeviceMultisampleType(int adapter, DeviceType type, Format format, bool windowed, MultisampleType multisample) { return true; } - - public Adapter[] Adapters = new Adapter[1]; - } - - public class AdapterDetails - { - public string Description { get; private set; } - } - - public class DisplayMode - { - public Format Format { get; private set; } - } - - public class Adapter - { - public AdapterDetails Details { get; private set; } - public DisplayMode CurrentDisplayMode { get; private set; } - } - - public class ShaderVersion - { - public int Major; - } - - public class Capabilities - { - public float MaxAnisotropy { get; } - public DeviceCaps DeviceCaps { get; } - public ShaderVersion PixelShaderVersion { get; } - } - - public class Result - { - public bool IsSuccess { get; set; } - public string Name { get; set; } - } - - public class PresentParameters - { - public bool Windowed { get; set; } - public SwapEffect SwapEffect { private get; set; } - public int BackBufferCount { private get; set; } - public Format BackBufferFormat { private get; set; } - public int BackBufferWidth { private get; set; } - public int BackBufferHeight { private get; set; } - public bool EnableAutoDepthStencil { private get; set; } - public Format AutoDepthStencilFormat { private get; set; } - public MultisampleType Multisample { private get; set; } - public PresentInterval PresentationInterval { private get; set; } - } - } - #endregion - #region DirectInput mouse handling namespace DirectInput { @@ -707,47 +520,12 @@ namespace SlimDX } #endregion - #region COM infrastructure - public class ComObject - { - public object Tag { get; set; } - public string CreationSource { get; set; } - public void Dispose() { } - } - - public class ObjectTable - { - public static System.Collections.Generic.List<ComObject> Objects = new System.Collections.Generic.List<ComObject>(); - } - #endregion - #region Exceptions - public class SlimDXException : ApplicationException - { - } - - namespace Direct3D9 - { - public class Direct3D9NotFoundException : SlimDXException - { - } - - public class Direct3DX9NotFoundException : SlimDXException - { - } - } - namespace DirectInput { - public class DirectInputException : SlimDXException + public class DirectInputException : ApplicationException { } } #endregion - - #region Junk - namespace Direct3D10_1 - { - } - #endregion } diff --git a/Source/Core/VisualModes/VisualSector.cs b/Source/Core/VisualModes/VisualSector.cs index 307aca7bb..dc29185a6 100755 --- a/Source/Core/VisualModes/VisualSector.cs +++ b/Source/Core/VisualModes/VisualSector.cs @@ -139,8 +139,7 @@ namespace CodeImp.DoomBuilder.VisualModes if(numverts > 0) { // Make a new buffer - geobuffer = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * numverts, - Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + geobuffer = new VertexBuffer(WorldVertex.Stride * numverts, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); // Fill the buffer DataStream bufferstream = geobuffer.Lock(0, WorldVertex.Stride * numverts, LockFlags.Discard); diff --git a/Source/Core/VisualModes/VisualThing.cs b/Source/Core/VisualModes/VisualThing.cs index 782cef556..26601e7ca 100755 --- a/Source/Core/VisualModes/VisualThing.cs +++ b/Source/Core/VisualModes/VisualThing.cs @@ -527,8 +527,7 @@ namespace CodeImp.DoomBuilder.VisualModes for(int i = 0; i < vertices.Length; i++) { // Make a new buffer - geobuffers[i] = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * vertices[i].Length, - Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + geobuffers[i] = new VertexBuffer(WorldVertex.Stride * vertices[i].Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); // Fill the buffer DataStream bufferstream = geobuffers[i].Lock(0, WorldVertex.Stride * vertices[i].Length, LockFlags.Discard); @@ -618,7 +617,7 @@ namespace CodeImp.DoomBuilder.VisualModes // Create buffer WorldVertex[] cv = cageverts.ToArray(); cagelength = cv.Length / 2; - cagebuffer = new VertexBuffer(General.Map.Graphics.Device, WorldVertex.Stride * cv.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); + cagebuffer = new VertexBuffer(WorldVertex.Stride * cv.Length, Usage.WriteOnly | Usage.Dynamic, VertexFormat.None, Pool.Default); cagebuffer.Lock(0, WorldVertex.Stride * cv.Length, LockFlags.None).WriteRange(cv); cagebuffer.Unlock(); diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index 290c2366a..63d23ecba 100755 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -1060,9 +1060,6 @@ namespace CodeImp.DoomBuilder.Windows // Display was resized? if(displayresized) { - // Reset graphics to match changes - General.Map.Graphics.Reset(); - //mxd. Aspect ratio may've been changed General.Map.CRenderer3D.CreateProjection(); } -- GitLab