mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-17 01:22:18 +00:00
Fixed, Visual mode: fixed D3DERR_INVALIDCALL error caused by a bug in classic skybox texture creation.
Fixed, Visual mode: aspect ratio was not updated when render area was resized. Fixed, Visual mode: vertex handles were disappearing after using Reload Resources (F8) action. Changed, internal: removed most of the fixed pipeline rendering code. The editor can no longer be used on a video card without Shader Model 2.0 support.
This commit is contained in:
parent
f0643cbd04
commit
ada38c4454
15 changed files with 159 additions and 485 deletions
|
@ -13,7 +13,7 @@
|
|||
*/
|
||||
|
||||
#endregion
|
||||
|
||||
/*
|
||||
#region ================== Namespaces
|
||||
|
||||
using System;
|
||||
|
@ -97,3 +97,4 @@ namespace CodeImp.DoomBuilder.Data
|
|||
#endregion
|
||||
}
|
||||
}
|
||||
*/
|
|
@ -498,6 +498,9 @@ namespace CodeImp.DoomBuilder.Data
|
|||
// Add to all
|
||||
alltextures.AddFlat(img.Value);
|
||||
}
|
||||
|
||||
//mxd. Create skybox texture(s)
|
||||
SetupSkybox();
|
||||
|
||||
// Start background loading
|
||||
StartBackgroundLoader();
|
||||
|
@ -1875,9 +1878,8 @@ namespace CodeImp.DoomBuilder.Data
|
|||
return;
|
||||
}
|
||||
|
||||
// Reset skybox texture
|
||||
skybox.Dispose();
|
||||
skybox = null;
|
||||
// Rebuild skybox texture
|
||||
SetupSkybox();
|
||||
|
||||
// Rebuild geometry if in Visual mode
|
||||
if(General.Editing.Mode != null && General.Editing.Mode.GetType().Name == "BaseVisualMode")
|
||||
|
@ -2357,11 +2359,6 @@ namespace CodeImp.DoomBuilder.Data
|
|||
|
||||
#region ================== mxd. Skybox Making
|
||||
|
||||
internal void UpdateSkybox()
|
||||
{
|
||||
if(skybox == null) SetupSkybox();
|
||||
}
|
||||
|
||||
private void SetupSkybox()
|
||||
{
|
||||
// Get rid of old texture
|
||||
|
@ -2489,14 +2486,33 @@ namespace CodeImp.DoomBuilder.Data
|
|||
}
|
||||
}
|
||||
|
||||
// Load the skysphere model...
|
||||
// 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);
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Load the skysphere model...
|
||||
BoundingBoxSizes bbs = new BoundingBoxSizes();
|
||||
Stream modeldata = General.ThisAssembly.GetManifestResourceStream("CodeImp.DoomBuilder.Resources.SkySphere.md3");
|
||||
ModelReader.MD3LoadResult result = ModelReader.ReadMD3Model(ref bbs, true, modeldata, device, 0);
|
||||
if(result.Meshes.Count != 3) throw new Exception("Skybox creation failed: " + result.Errors);
|
||||
ModelReader.MD3LoadResult meshes = ModelReader.ReadMD3Model(ref bbs, true, modeldata, device, 0);
|
||||
if(meshes.Meshes.Count != 3) throw new Exception("Skybox creation failed: " + meshes.Errors);
|
||||
|
||||
// Make skysphere textures...
|
||||
Texture texside = TextureFromBitmap(device, skyimage);
|
||||
|
@ -2511,16 +2527,13 @@ namespace CodeImp.DoomBuilder.Data
|
|||
else yscale = 1.2f * 1.17f;
|
||||
|
||||
// Make cubemap texture
|
||||
const int cubemaptexsize = 1024;
|
||||
CubeTexture cubemap = new CubeTexture(device, cubemaptexsize, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
|
||||
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);
|
||||
|
||||
// Make custom rendertarget
|
||||
Surface rendertarget = Surface.CreateRenderTarget(device, cubemaptexsize, cubemaptexsize, Format.A8R8G8B8, MultisampleType.None, 0, false);
|
||||
|
||||
|
||||
// Setup matrices
|
||||
Vector3 offset = new Vector3(0f, 0f, -1.8f); // Sphere size is 10 mu
|
||||
Matrix mworld = Matrix.Multiply(Matrix.Identity, Matrix.Translation(offset) * Matrix.Scaling(1.0f, 1.0f, yscale));
|
||||
|
@ -2529,17 +2542,9 @@ namespace CodeImp.DoomBuilder.Data
|
|||
// Place camera at origin
|
||||
effect.CameraPosition = new Vector4();
|
||||
|
||||
// Set the rendertarget to our own RT surface
|
||||
device.SetRenderTarget(0, rendertarget);
|
||||
|
||||
// Set custom depth stencil
|
||||
device.DepthStencilSurface = Surface.CreateDepthStencil(device, cubemaptexsize, cubemaptexsize, General.Map.Graphics.DepthBuffer.Description.Format, MultisampleType.None, 0, false);
|
||||
|
||||
// Begin rendering
|
||||
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkRed, 1.0f, 0);
|
||||
device.BeginScene();
|
||||
// Begin fullbright shaderpass
|
||||
effect.Begin();
|
||||
effect.BeginPass(1); // Fullbright pass
|
||||
effect.BeginPass(1);
|
||||
|
||||
// Render to the six faces of the cube map
|
||||
for(int i = 0; i < 6; i++)
|
||||
|
@ -2548,10 +2553,10 @@ namespace CodeImp.DoomBuilder.Data
|
|||
effect.WorldViewProj = mworld * faceview * mprojection;
|
||||
|
||||
// Render the skysphere meshes
|
||||
for(int j = 0; j < result.Meshes.Count; j++)
|
||||
for(int j = 0; j < meshes.Meshes.Count; j++)
|
||||
{
|
||||
// Set appropriate texture
|
||||
switch(result.Skins[j])
|
||||
switch(meshes.Skins[j])
|
||||
{
|
||||
case "top.png": effect.Texture1 = textop; break;
|
||||
case "bottom.png": effect.Texture1 = texbottom; break;
|
||||
|
@ -2563,29 +2568,49 @@ namespace CodeImp.DoomBuilder.Data
|
|||
effect.ApplySettings();
|
||||
|
||||
// Render mesh
|
||||
result.Meshes[j].DrawSubset(0);
|
||||
meshes.Meshes[j].DrawSubset(0);
|
||||
}
|
||||
|
||||
// Copy the rendered image from our RT surface to the texture face
|
||||
Surface cubeface = cubemap.GetCubeMapSurface((CubeMapFace)i, 0);
|
||||
device.StretchRectangle(rendertarget, cubeface, TextureFilter.None);
|
||||
// Get rendered data from video memory...
|
||||
device.GetRenderTargetData(rendertarget, sysmemsurf);
|
||||
|
||||
cubeface.Dispose();
|
||||
// ...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();
|
||||
}
|
||||
|
||||
// End rendering
|
||||
effect.EndPass();
|
||||
effect.End();
|
||||
device.EndScene();
|
||||
General.Map.Graphics.FinishRendering();
|
||||
|
||||
// Dispose unneeded stuff
|
||||
rendertarget.Dispose();
|
||||
depthbuffer.Dispose();
|
||||
sysmemsurf.Dispose();
|
||||
textop.Dispose();
|
||||
texside.Dispose();
|
||||
texbottom.Dispose();
|
||||
|
||||
// Dispose skybox meshes
|
||||
foreach(Mesh m in result.Meshes) m.Dispose();
|
||||
foreach(Mesh m in meshes.Meshes) m.Dispose();
|
||||
|
||||
// All done...
|
||||
return cubemap;
|
||||
|
|
|
@ -164,66 +164,20 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
device.SetTransform(TransformState.View, Matrix.Identity);
|
||||
device.SetTransform(TransformState.Projection, Matrix.Identity);
|
||||
|
||||
// Sampler settings
|
||||
if(General.Settings.ClassicBilinear)
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
|
||||
// Texture addressing
|
||||
device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap);
|
||||
|
||||
// First texture stage
|
||||
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg2, TextureArgument.Diffuse);
|
||||
device.SetTextureStageState(0, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(0, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Second texture stage
|
||||
device.SetTextureStageState(1, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg2, TextureArgument.TFactor);
|
||||
device.SetTextureStageState(1, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.ColorOperation, TextureOperation.Disable);
|
||||
|
||||
// First alpha stage
|
||||
device.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg2, TextureArgument.Diffuse);
|
||||
|
||||
// Second alpha stage
|
||||
device.SetTextureStageState(1, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg2, TextureArgument.TFactor);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.AlphaOperation, TextureOperation.Disable);
|
||||
|
||||
// Setup material
|
||||
Material material = new Material();
|
||||
material.Ambient = new Color4(Color.White);
|
||||
material.Diffuse = new Color4(Color.White);
|
||||
material.Specular = new Color4(Color.White);
|
||||
device.Material = material;
|
||||
device.Material = new Material {
|
||||
Ambient = new Color4(Color.White),
|
||||
Diffuse = new Color4(Color.White),
|
||||
Specular = new Color4(Color.White)
|
||||
};
|
||||
|
||||
// Shader settings
|
||||
shaders.World3D.SetConstants(General.Settings.VisualBilinear, true, General.Settings.FilterAnisotropy);
|
||||
shaders.World3D.SetConstants(General.Settings.VisualBilinear, General.Settings.FilterAnisotropy);
|
||||
|
||||
// Texture filters
|
||||
postfilter = Filter.Point;
|
||||
|
@ -295,6 +249,14 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
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);
|
||||
|
||||
|
|
|
@ -91,9 +91,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// This loads an effect
|
||||
protected Effect LoadEffect(string fxfile)
|
||||
{
|
||||
// Return null when not using shaders
|
||||
if(!manager.Enabled) return null;
|
||||
|
||||
Effect fx;
|
||||
string errors = string.Empty;
|
||||
|
||||
|
@ -145,31 +142,31 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
General.Map.Graphics.Device.VertexDeclaration = vertexdecl;
|
||||
|
||||
// Set effect
|
||||
if(manager.Enabled) effect.Begin(FX.DoNotSaveState);
|
||||
effect.Begin(FX.DoNotSaveState);
|
||||
}
|
||||
|
||||
// This begins a pass
|
||||
public virtual void BeginPass(int index)
|
||||
{
|
||||
if(manager.Enabled) effect.BeginPass(index);
|
||||
effect.BeginPass(index);
|
||||
}
|
||||
|
||||
// This ends a pass
|
||||
public void EndPass()
|
||||
{
|
||||
if(manager.Enabled) effect.EndPass();
|
||||
effect.EndPass();
|
||||
}
|
||||
|
||||
// This ends te shader
|
||||
public void End()
|
||||
{
|
||||
if(manager.Enabled) effect.End();
|
||||
effect.End();
|
||||
}
|
||||
|
||||
// This applies properties during a pass
|
||||
public void ApplySettings()
|
||||
{
|
||||
if(manager.Enabled && settingschanged)
|
||||
if(settingschanged)
|
||||
{
|
||||
effect.CommitChanges();
|
||||
settingschanged = false; //mxd
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#region ================== Properties
|
||||
|
||||
public Texture Texture1 { set { if(manager.Enabled) effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
public Texture Texture1 { set { effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -97,79 +97,14 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// This sets the settings
|
||||
public void SetSettings(float texelx, float texely, float fsaafactor, float alpha, bool bilinear)
|
||||
{
|
||||
if(manager.Enabled)
|
||||
{
|
||||
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);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
TextureFilter filter = (bilinear ? TextureFilter.Linear : TextureFilter.Point);
|
||||
effect.SetValue(filtersettings, (int)filter);
|
||||
settingschanged = true; //mxd
|
||||
}
|
||||
}
|
||||
|
||||
// This sets up the render pipeline
|
||||
public override void BeginPass(int index)
|
||||
{
|
||||
if(!manager.Enabled)
|
||||
{
|
||||
Device device = manager.D3DDevice.Device;
|
||||
|
||||
// Sampler settings
|
||||
if(General.Settings.ClassicBilinear)
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
|
||||
// Texture addressing
|
||||
device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap);
|
||||
|
||||
// First texture stage
|
||||
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg2, TextureArgument.Diffuse);
|
||||
device.SetTextureStageState(0, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(0, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Second texture stage
|
||||
device.SetTextureStageState(1, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg2, TextureArgument.TFactor);
|
||||
device.SetTextureStageState(1, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.ColorOperation, TextureOperation.Disable);
|
||||
|
||||
// First alpha stage
|
||||
device.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg2, TextureArgument.Diffuse);
|
||||
|
||||
// Second alpha stage
|
||||
device.SetTextureStageState(1, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg2, TextureArgument.TFactor);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.AlphaOperation, TextureOperation.Disable);
|
||||
}
|
||||
|
||||
base.BeginPass(index);
|
||||
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);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
TextureFilter filter = (bilinear ? TextureFilter.Linear : TextureFilter.Point);
|
||||
effect.SetValue(filtersettings, (int)filter);
|
||||
settingschanged = true; //mxd
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -159,7 +159,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
}
|
||||
|
||||
// This is called when the graphics need to be reset
|
||||
public virtual void Reset() { }
|
||||
//public virtual void Reset() { }
|
||||
|
||||
// For DirectX resources
|
||||
public virtual void UnloadResource() { }
|
||||
|
|
|
@ -350,11 +350,11 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
}
|
||||
|
||||
// This resets the graphics
|
||||
public override void Reset()
|
||||
/*public override void Reset()
|
||||
{
|
||||
UnloadResource();
|
||||
ReloadResource();
|
||||
}
|
||||
}*/
|
||||
|
||||
// This destroys the rendertargets
|
||||
public void DestroyRendertargets()
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// Thing cage
|
||||
private bool renderthingcages;
|
||||
//mxd
|
||||
private VisualVertexHandle vertexHandle;
|
||||
private VisualVertexHandle vertexhandle;
|
||||
private int[] lightOffsets;
|
||||
|
||||
// Crosshair
|
||||
|
@ -81,8 +81,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
private IVisualPickable highlighted;
|
||||
private float highlightglow;
|
||||
private float highlightglowinv;
|
||||
private ColorImage highlightimage;
|
||||
private ColorImage selectionimage;
|
||||
private bool showselection;
|
||||
private bool showhighlight;
|
||||
|
||||
|
@ -144,8 +142,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// Initialize
|
||||
CreateProjection();
|
||||
CreateMatrices2D();
|
||||
SetupHelperObjects(); //mxd
|
||||
SetupTextures();
|
||||
renderthingcages = true;
|
||||
showselection = true;
|
||||
showhighlight = true;
|
||||
|
@ -166,11 +162,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
if(selectionimage != null) selectionimage.Dispose();
|
||||
if(highlightimage != null) highlightimage.Dispose();
|
||||
selectionimage = null;
|
||||
highlightimage = null;
|
||||
vertexHandle.Dispose(); //mxd
|
||||
if(vertexhandle != null) vertexhandle.Dispose(); //mxd
|
||||
|
||||
// Done
|
||||
base.Dispose();
|
||||
|
@ -186,11 +178,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
public override void UnloadResource()
|
||||
{
|
||||
crosshairverts = null;
|
||||
|
||||
if(selectionimage != null) selectionimage.Dispose();
|
||||
if(highlightimage != null) highlightimage.Dispose();
|
||||
selectionimage = null;
|
||||
highlightimage = null;
|
||||
}
|
||||
|
||||
// This is called resets when the device is reset
|
||||
|
@ -198,7 +185,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
public override void ReloadResource()
|
||||
{
|
||||
CreateMatrices2D();
|
||||
SetupTextures();
|
||||
}
|
||||
|
||||
// This makes screen vertices for display
|
||||
|
@ -233,32 +219,14 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#region ================== Resources
|
||||
|
||||
// This loads the textures for highlight and selection if we need them
|
||||
private void SetupTextures()
|
||||
{
|
||||
if(!graphics.Shaders.Enabled)
|
||||
{
|
||||
highlightimage = new ColorImage(General.Colors.Highlight, 32, 32);
|
||||
highlightimage.LoadImage();
|
||||
highlightimage.CreateTexture();
|
||||
|
||||
selectionimage = new ColorImage(General.Colors.Selection, 32, 32);
|
||||
selectionimage.LoadImage();
|
||||
selectionimage.CreateTexture();
|
||||
}
|
||||
}
|
||||
|
||||
//mxd
|
||||
private void SetupHelperObjects()
|
||||
{
|
||||
vertexHandle = new VisualVertexHandle();
|
||||
}
|
||||
|
||||
//mxd
|
||||
internal void UpdateVertexHandle()
|
||||
{
|
||||
vertexHandle.UnloadResource();
|
||||
vertexHandle.ReloadResource();
|
||||
if(vertexhandle != null)
|
||||
{
|
||||
vertexhandle.UnloadResource();
|
||||
vertexhandle.ReloadResource();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -284,9 +252,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
// Make the projection matrix
|
||||
projection = Matrix.PerspectiveFovRH(fovy, aspect, PROJ_NEAR_PLANE, General.Settings.ViewDistance);
|
||||
|
||||
// Apply matrices
|
||||
ApplyMatrices3D();
|
||||
viewproj = view3d * projection; //mxd
|
||||
}
|
||||
|
||||
// This creates matrices for a camera view
|
||||
|
@ -388,6 +354,9 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// 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;
|
||||
|
@ -645,7 +614,7 @@ 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.SetStreamSource(0, v.CeilingVertex ? vertexhandle.Upper : vertexhandle.Lower, 0, WorldVertex.Stride);
|
||||
graphics.Device.DrawPrimitives(PrimitiveType.LineList, 0, 8);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
#region ================== Variables
|
||||
|
||||
// Settings
|
||||
private string shadertechnique;
|
||||
private bool useshaders;
|
||||
private readonly string shadertechnique;
|
||||
|
||||
// Shaders
|
||||
private Display2DShader display2dshader;
|
||||
|
@ -50,7 +49,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#region ================== Properties
|
||||
|
||||
public bool Enabled { get { return useshaders; } }
|
||||
public string ShaderTechnique { get { return shadertechnique; } }
|
||||
public Display2DShader Display2D { get { return display2dshader; } }
|
||||
public Things2DShader Things2D { get { return things2dshader; } }
|
||||
|
@ -67,6 +65,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
// Initialize
|
||||
this.device = device;
|
||||
shadertechnique = "SM20"; //mxd
|
||||
|
||||
// Load
|
||||
ReloadResource();
|
||||
|
@ -111,11 +110,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// Load resources
|
||||
public void ReloadResource()
|
||||
{
|
||||
// Check if we can use shaders
|
||||
Capabilities caps = General.Map.Graphics.Device.Capabilities;
|
||||
useshaders = (caps.PixelShaderVersion.Major >= 2);
|
||||
shadertechnique = "SM20";
|
||||
|
||||
// Initialize effects
|
||||
display2dshader = new Display2DShader(this);
|
||||
things2dshader = new Things2DShader(this);
|
||||
|
|
|
@ -665,7 +665,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
// Set texture
|
||||
graphics.Shaders.Display2D.Texture1 = imgsurfaces.Key.Texture;
|
||||
if(!graphics.Shaders.Enabled) graphics.Device.SetTexture(0, imgsurfaces.Key.Texture);
|
||||
|
||||
graphics.Shaders.Display2D.BeginPass(pass);
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#region ================== Properties
|
||||
|
||||
public Texture Texture1 { set { if(manager.Enabled) effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
public Texture Texture1 { set { effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
|
||||
//mxd
|
||||
private Color4 fc;
|
||||
|
@ -46,7 +46,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && fc != value)
|
||||
if(fc != value)
|
||||
{
|
||||
effect.SetValue(fillcolor, value);
|
||||
fc = value;
|
||||
|
@ -112,88 +112,20 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// This sets the settings
|
||||
public void SetSettings(float alpha)
|
||||
{
|
||||
if(manager.Enabled)
|
||||
{
|
||||
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);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
settingschanged = true; //mxd
|
||||
}
|
||||
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);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
settingschanged = true; //mxd
|
||||
}
|
||||
|
||||
//mxd. Used to render models
|
||||
public void SetTransformSettings(Matrix world)
|
||||
{
|
||||
if(manager.Enabled)
|
||||
{
|
||||
Matrix view = manager.D3DDevice.Device.GetTransform(TransformState.View);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
settingschanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
// This sets up the render pipeline
|
||||
public override void BeginPass(int index)
|
||||
{
|
||||
if(!manager.Enabled)
|
||||
{
|
||||
Device device = manager.D3DDevice.Device;
|
||||
|
||||
// Sampler settings
|
||||
if(General.Settings.ClassicBilinear)
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
|
||||
// Texture addressing
|
||||
device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap);
|
||||
|
||||
// First texture stage
|
||||
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg2, TextureArgument.Diffuse);
|
||||
device.SetTextureStageState(0, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(0, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Second texture stage
|
||||
device.SetTextureStageState(1, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg2, TextureArgument.TFactor);
|
||||
device.SetTextureStageState(1, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.ColorOperation, TextureOperation.Disable);
|
||||
|
||||
// First alpha stage
|
||||
device.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg2, TextureArgument.Diffuse);
|
||||
|
||||
// Second alpha stage
|
||||
device.SetTextureStageState(1, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg2, TextureArgument.TFactor);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.AlphaOperation, TextureOperation.Disable);
|
||||
}
|
||||
|
||||
base.BeginPass(index);
|
||||
Matrix view = manager.D3DDevice.Device.GetTransform(TransformState.View);
|
||||
effect.SetValue(transformsettings, world * view);
|
||||
settingschanged = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && wwp != value)
|
||||
if(wwp != value)
|
||||
{
|
||||
effect.SetValue(worldviewproj, value);
|
||||
wwp = value;
|
||||
|
@ -67,7 +67,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
}
|
||||
}
|
||||
|
||||
public BaseTexture Texture1 { set { if(manager.Enabled) effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
public BaseTexture Texture1 { set { effect.SetTexture(texture1, value); settingschanged = true; } }
|
||||
|
||||
//mxd
|
||||
private Color4 vertexcolor;
|
||||
|
@ -75,7 +75,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && vertexcolor != value)
|
||||
if(vertexcolor != value)
|
||||
{
|
||||
effect.SetValue(vertexColorHadle, value);
|
||||
vertexcolor = value;
|
||||
|
@ -90,7 +90,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && lightcolor != value)
|
||||
if(lightcolor != value)
|
||||
{
|
||||
effect.SetValue(lightColorHandle, value);
|
||||
lightcolor = value;
|
||||
|
@ -104,7 +104,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && value != lightpos)
|
||||
if(lightpos != value)
|
||||
{
|
||||
effect.SetValue(lightPositionAndRadiusHandle, value);
|
||||
lightpos = value;
|
||||
|
@ -119,7 +119,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && campos != value)
|
||||
if(campos != value)
|
||||
{
|
||||
effect.SetValue(camPosHandle, value);
|
||||
campos = value;
|
||||
|
@ -133,7 +133,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && mworld != value)
|
||||
if(mworld != value)
|
||||
{
|
||||
effect.SetValue(world, value);
|
||||
mworld = value;
|
||||
|
@ -148,7 +148,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
set
|
||||
{
|
||||
if(manager.Enabled && hicolor != value)
|
||||
if(hicolor != value)
|
||||
{
|
||||
effect.SetValue(highlightcolor, value);
|
||||
hicolor = value;
|
||||
|
@ -190,27 +190,15 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
}
|
||||
|
||||
// Initialize world vertex declaration
|
||||
if(manager.Enabled) //mxd
|
||||
{
|
||||
vertexElements = new[]
|
||||
{
|
||||
new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
|
||||
new VertexElement(0, 12, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
|
||||
new VertexElement(0, 16, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0),
|
||||
new VertexElement(0, 24, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Normal, 0), //mxd
|
||||
VertexElement.VertexDeclarationEnd
|
||||
};
|
||||
}
|
||||
else
|
||||
vertexElements = new[]
|
||||
{
|
||||
vertexElements = new[]
|
||||
{
|
||||
new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
|
||||
new VertexElement(0, 12, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
|
||||
new VertexElement(0, 16, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0),
|
||||
VertexElement.VertexDeclarationEnd
|
||||
};
|
||||
}
|
||||
new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
|
||||
new VertexElement(0, 12, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
|
||||
new VertexElement(0, 16, DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0),
|
||||
new VertexElement(0, 24, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Normal, 0), //mxd
|
||||
VertexElement.VertexDeclarationEnd
|
||||
};
|
||||
|
||||
vertexdecl = new VertexDeclaration(General.Map.Graphics.Device, vertexElements);
|
||||
|
||||
// We have no destructor
|
||||
|
@ -249,148 +237,24 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
#region ================== Methods
|
||||
|
||||
// This sets the constant settings
|
||||
public void SetConstants(bool bilinear, bool useanisotropic, float maxanisotropy)
|
||||
public void SetConstants(bool bilinear, float maxanisotropy)
|
||||
{
|
||||
if(manager.Enabled)
|
||||
if(bilinear)
|
||||
{
|
||||
if(bilinear)
|
||||
{
|
||||
if(useanisotropic)
|
||||
{
|
||||
effect.SetValue(magfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(minfiltersettings, (int)TextureFilter.Anisotropic);
|
||||
effect.SetValue(mipfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(maxanisotropysetting, maxanisotropy);
|
||||
}
|
||||
else
|
||||
{
|
||||
effect.SetValue(magfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(minfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(mipfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(maxanisotropysetting, 1.0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
effect.SetValue(magfiltersettings, (int)TextureFilter.Point);
|
||||
effect.SetValue(minfiltersettings, (int)TextureFilter.Point);
|
||||
effect.SetValue(mipfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(maxanisotropysetting, 1.0f);
|
||||
}
|
||||
|
||||
settingschanged = true; //mxd
|
||||
effect.SetValue(magfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(minfiltersettings, (int)TextureFilter.Anisotropic);
|
||||
effect.SetValue(mipfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(maxanisotropysetting, maxanisotropy);
|
||||
}
|
||||
}
|
||||
|
||||
// This sets up the render pipeline
|
||||
public override void BeginPass(int index)
|
||||
{
|
||||
if(!manager.Enabled)
|
||||
else
|
||||
{
|
||||
Device device = manager.D3DDevice.Device;
|
||||
|
||||
// Sampler settings
|
||||
if(General.Settings.VisualBilinear)
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
|
||||
device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Linear);
|
||||
device.SetSamplerState(0, SamplerState.MipMapLodBias, 0f);
|
||||
}
|
||||
|
||||
// Texture addressing
|
||||
device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Wrap);
|
||||
device.SetSamplerState(0, SamplerState.AddressW, TextureAddress.Wrap);
|
||||
|
||||
// First texture stage
|
||||
//mxd
|
||||
//if((index == 0) || (index == 2))
|
||||
if((index == 0) || (index == 2) || (index == 4) || (index == 6) || (index == 8) || (index == 10) || (index == 12) || (index == 14) || index > 15)
|
||||
{
|
||||
// Normal
|
||||
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg2, TextureArgument.Diffuse);
|
||||
device.SetTextureStageState(0, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(0, TextureStage.TexCoordIndex, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Full brightness
|
||||
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.SelectArg1);
|
||||
device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(0, TextureStage.TexCoordIndex, 0);
|
||||
}
|
||||
|
||||
// First alpha stage
|
||||
device.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg1, TextureArgument.Texture);
|
||||
device.SetTextureStageState(0, TextureStage.AlphaArg2, TextureArgument.Diffuse);
|
||||
|
||||
// Second texture stage
|
||||
device.SetTextureStageState(1, TextureStage.ColorOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.ColorArg2, TextureArgument.TFactor);
|
||||
device.SetTextureStageState(1, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Second alpha stage
|
||||
device.SetTextureStageState(1, TextureStage.AlphaOperation, TextureOperation.Modulate);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(1, TextureStage.AlphaArg2, TextureArgument.TFactor);
|
||||
|
||||
// Highlight?
|
||||
//mxd
|
||||
//if(index > 1) 2 3 6 10 14
|
||||
//if((index > 1 && index < 4) || (index > 5 && index < 8) || (index > 9 && index < 12) || (index > 13 && index < 16))
|
||||
if(index == 2 || index == 3 || index == 6 || index == 10 || index == 14)
|
||||
{
|
||||
// Third texture stage
|
||||
device.SetTextureStageState(2, TextureStage.ColorOperation, TextureOperation.AddSigned);
|
||||
device.SetTextureStageState(2, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(2, TextureStage.ColorArg2, TextureArgument.Texture);
|
||||
device.SetTextureStageState(2, TextureStage.ColorArg0, TextureArgument.Texture);
|
||||
device.SetTextureStageState(2, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(2, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Third alpha stage
|
||||
device.SetTextureStageState(2, TextureStage.AlphaOperation, TextureOperation.SelectArg1);
|
||||
device.SetTextureStageState(2, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
|
||||
// Fourth texture stage
|
||||
device.SetTextureStageState(3, TextureStage.ColorOperation, TextureOperation.AddSigned);
|
||||
device.SetTextureStageState(3, TextureStage.ColorArg1, TextureArgument.Current);
|
||||
device.SetTextureStageState(3, TextureStage.ColorArg2, TextureArgument.Texture);
|
||||
device.SetTextureStageState(3, TextureStage.ColorArg0, TextureArgument.Texture);
|
||||
device.SetTextureStageState(3, TextureStage.ResultArg, TextureArgument.Current);
|
||||
device.SetTextureStageState(3, TextureStage.TexCoordIndex, 0);
|
||||
|
||||
// Fourth alpha stage
|
||||
device.SetTextureStageState(3, TextureStage.AlphaOperation, TextureOperation.SelectArg1);
|
||||
device.SetTextureStageState(3, TextureStage.AlphaArg1, TextureArgument.Current);
|
||||
|
||||
// No more further stages
|
||||
device.SetTextureStageState(4, TextureStage.ColorOperation, TextureOperation.Disable);
|
||||
device.SetTextureStageState(4, TextureStage.AlphaOperation, TextureOperation.Disable);
|
||||
}
|
||||
else
|
||||
{
|
||||
// No more further stages
|
||||
device.SetTextureStageState(2, TextureStage.ColorOperation, TextureOperation.Disable);
|
||||
device.SetTextureStageState(2, TextureStage.AlphaOperation, TextureOperation.Disable);
|
||||
}
|
||||
effect.SetValue(magfiltersettings, (int)TextureFilter.Point);
|
||||
effect.SetValue(minfiltersettings, (int)TextureFilter.Point);
|
||||
effect.SetValue(mipfiltersettings, (int)TextureFilter.Linear);
|
||||
effect.SetValue(maxanisotropysetting, 1.0f);
|
||||
}
|
||||
|
||||
base.BeginPass(index);
|
||||
settingschanged = true; //mxd
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -158,9 +158,6 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
{
|
||||
base.OnEngage();
|
||||
|
||||
//mxd. Sky texture may need recreating
|
||||
General.Map.Data.UpdateSkybox();
|
||||
|
||||
// Update projection (mxd)
|
||||
General.Map.CRenderer3D.CreateProjection();
|
||||
|
||||
|
@ -881,9 +878,6 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
// Make new blockmap
|
||||
FillBlockMap();
|
||||
|
||||
//mxd. Sky texture may need recreating
|
||||
General.Map.Data.UpdateSkybox();
|
||||
|
||||
// Visibility culling (this re-creates the needed resources)
|
||||
DoCulling();
|
||||
}
|
||||
|
|
|
@ -1067,6 +1067,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
{
|
||||
// Reset graphics to match changes
|
||||
General.Map.Graphics.Reset();
|
||||
|
||||
//mxd. Aspect ratio may've been changed
|
||||
General.Map.CRenderer3D.CreateProjection();
|
||||
}
|
||||
|
||||
// This is a dirty trick to give the display a new mousemove event with correct arguments
|
||||
|
@ -4001,21 +4004,19 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
float deltatime = curtime - lastupdatetime;
|
||||
lastupdatetime = curtime;
|
||||
|
||||
// In exclusive mouse mode?
|
||||
if(mouseinput != null)
|
||||
if((General.Map != null) && (General.Editing.Mode != null))
|
||||
{
|
||||
// Process mouse input
|
||||
Vector2D deltamouse = mouseinput.Process();
|
||||
if((General.Map != null) && (General.Editing.Mode != null))
|
||||
// In exclusive mouse mode?
|
||||
if(mouseinput != null)
|
||||
{
|
||||
Vector2D deltamouse = mouseinput.Process();
|
||||
General.Plugins.OnEditMouseInput(deltamouse);
|
||||
General.Editing.Mode.OnMouseInput(deltamouse);
|
||||
}
|
||||
}
|
||||
|
||||
// Process signal
|
||||
if((General.Map != null) && (General.Editing.Mode != null))
|
||||
|
||||
// Process signal
|
||||
General.Editing.Mode.OnProcess(deltatime);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -1277,6 +1277,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
{
|
||||
base.ResourcesReloaded();
|
||||
RebuildElementData();
|
||||
UpdateChangedObjects(); //mxd
|
||||
PickTarget();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue