diff --git a/Source/Core/Rendering/RenderDevice.cs b/Source/Core/Rendering/RenderDevice.cs index 47a84bd99764f0c74b5240734919a350e002cac6..52a3c49860c7947a1ed75604908d0eef29e51697 100755 --- a/Source/Core/Rendering/RenderDevice.cs +++ b/Source/Core/Rendering/RenderDevice.cs @@ -187,18 +187,6 @@ namespace CodeImp.DoomBuilder.Rendering RenderDevice_SetZWriteEnable(Handle, value); } - Matrix[] Transforms = new Matrix[] { Matrix.Identity, Matrix.Identity, Matrix.Identity }; - - public Matrix GetTransform(TransformState state) - { - return Transforms[(int)state]; - } - - public void SetTransform(TransformState state, Matrix matrix) - { - Transforms[(int)state] = matrix; - } - public void SetTexture(int unit, BaseTexture value) { RenderDevice_SetTexture(Handle, unit, value != null ? value.Handle : IntPtr.Zero); @@ -366,11 +354,6 @@ namespace CodeImp.DoomBuilder.Rendering SetTextureFactor(-1); SetZEnable(false); SetZWriteEnable(false); - - // Matrices - SetTransform(TransformState.World, Matrix.Identity); - SetTransform(TransformState.View, Matrix.Identity); - SetTransform(TransformState.Projection, Matrix.Identity); // Texture addressing SetSamplerState(0, TextureAddress.Wrap); @@ -602,7 +585,7 @@ namespace CodeImp.DoomBuilder.Rendering public enum Blend : int { InverseSourceAlpha, SourceAlpha, One, BlendFactor } public enum BlendOperation : int { Add, ReverseSubtract } public enum FillMode : int { Solid, Wireframe } - public enum TransformState : int { World, View, Projection } + public enum TransformState : int { World, View } public enum TextureAddress : int { Wrap, Clamp } public enum PrimitiveType : int { LineList, TriangleList, TriangleStrip } public enum TextureFilter : int { None, Point, Linear, Anisotropic } diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index 25e409077d147996d4340d6d1c3de4707cddb337..876d87e47d6ef41b73308c1abcca440a8284550d 100755 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -110,8 +110,12 @@ namespace CodeImp.DoomBuilder.Rendering private RectangleF viewport; private RectangleF yviewport; - // Presentation - private Presentation present; + // Spaghetti + Matrix viewmatrix = Matrix.Identity; + Matrix worldmatrix = Matrix.Identity; + + // Presentation + private Presentation present; #endregion @@ -185,7 +189,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.SetZEnable(false); graphics.SetFogEnable(false); graphics.SetVertexBuffer(screenverts); - graphics.SetTransform(TransformState.World, Matrix.Identity); + worldmatrix = Matrix.Identity; // Go for all layers foreach(PresentLayer layer in present.layers) @@ -468,8 +472,7 @@ 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.SetTransform(TransformState.View, translate * scaling); - graphics.SetTransform(TransformState.Projection, Matrix.Identity); + viewmatrix = translate * scaling; 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); @@ -483,11 +486,11 @@ namespace CodeImp.DoomBuilder.Rendering { Matrix translate = Matrix.Translation(translatex, translatey, 0f); Matrix scaling = Matrix.Scaling(scale, -scale, 1f); - graphics.SetTransform(TransformState.World, translate * scaling); + worldmatrix = translate * scaling; } else { - graphics.SetTransform(TransformState.World, Matrix.Identity); + worldmatrix = Matrix.Identity; } } @@ -495,9 +498,7 @@ namespace CodeImp.DoomBuilder.Rendering { Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha); graphics.SetUniform(UniformName.rendersettings, values); - Matrix world = graphics.GetTransform(TransformState.World); - Matrix view = graphics.GetTransform(TransformState.View); - graphics.SetUniform(UniformName.transformsettings, world * view); + graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix); graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point); } @@ -505,16 +506,13 @@ namespace CodeImp.DoomBuilder.Rendering { Vector4 values = new Vector4(0.0f, 0.0f, 1.0f, alpha); graphics.SetUniform(UniformName.rendersettings, values); - Matrix world = graphics.GetTransform(TransformState.World); - Matrix view = graphics.GetTransform(TransformState.View); - graphics.SetUniform(UniformName.transformsettings, world * view); + graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix); } //mxd. Used to render models private void SetThings2DTransformSettings(Matrix world) { - Matrix view = graphics.GetTransform(TransformState.View); - graphics.SetUniform(UniformName.transformsettings, world * view); + graphics.SetUniform(UniformName.transformsettings, world * viewmatrix); } /// <summary> diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs index 72fe814ea22cf59512d2d28ec02741cae0ecd346..8e5afea508f354b064cd228e152ad412f8a8f5cf 100755 --- a/Source/Core/Rendering/Renderer3D.cs +++ b/Source/Core/Rendering/Renderer3D.cs @@ -52,9 +52,13 @@ namespace CodeImp.DoomBuilder.Rendering private Vector3D cameraposition; private Vector3D cameravector; private ShaderName shaderpass; - - // Window size - private Size windowsize; + + // Spaghetti + Matrix viewmatrix = Matrix.Identity; + Matrix worldmatrix = Matrix.Identity; + + // Window size + private Size windowsize; // Frustum private ProjectedFrustum2D frustum; @@ -287,9 +291,8 @@ namespace CodeImp.DoomBuilder.Rendering // This sets the appropriate view matrix public void ApplyMatrices2D() { - graphics.SetTransform(TransformState.World, world); - graphics.SetTransform(TransformState.Projection, Matrix.Identity); - graphics.SetTransform(TransformState.View, view2d); + worldmatrix = world; + viewmatrix = view2d; } #endregion @@ -2011,8 +2014,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.SetSourceBlend(Blend.SourceAlpha); graphics.SetDestinationBlend(Blend.InverseSourceAlpha); graphics.SetTextureFactor(-1); - graphics.SetTransform(TransformState.World, Matrix.Identity); - graphics.SetTransform(TransformState.Projection, Matrix.Identity); + worldmatrix = Matrix.Identity; ApplyMatrices2D(); graphics.SetShader(ShaderName.display2d_normal); @@ -2038,9 +2040,7 @@ namespace CodeImp.DoomBuilder.Rendering { Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha); graphics.SetUniform(UniformName.rendersettings, values); - Matrix world = graphics.GetTransform(TransformState.World); - Matrix view = graphics.GetTransform(TransformState.View); - graphics.SetUniform(UniformName.transformsettings, world * view); + graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix); graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point); } diff --git a/Source/Native/RenderDevice.h b/Source/Native/RenderDevice.h index ca734ba96904b72aeec02aa2bc2080e694519592..860d9216cf819049cc255ec96d52d57eb2d40614 100644 --- a/Source/Native/RenderDevice.h +++ b/Source/Native/RenderDevice.h @@ -14,7 +14,6 @@ enum class Cull : int { None, Clockwise }; enum class Blend : int { InverseSourceAlpha, SourceAlpha, One, BlendFactor }; enum class BlendOperation : int { Add, ReverseSubtract }; enum class FillMode : int { Solid, Wireframe }; -enum class TransformState : int { World, View, Projection, NumTransforms }; enum class TextureAddress : int { Wrap, Clamp }; enum class ShaderFlags : int { None, Debug }; enum class PrimitiveType : int { LineList, TriangleList, TriangleStrip };