private static Material CreateMaterial(RenderingDevice device) { var blendState = new BlendSpec { blendEnable = true, srcBlend = BlendOperand.SrcAlpha, destBlend = BlendOperand.InvSrcAlpha }; var depthStencilState = new DepthStencilSpec(); depthStencilState.depthEnable = false; var vertexShader = device.GetShaders().LoadVertexShader("font_vs"); var pixelShader = device.GetShaders().LoadPixelShader("textured_simple_ps"); return(device.CreateMaterial( blendState, depthStencilState, null, null, vertexShader, pixelShader )); }
private static ResourceRef <Material> CreateGaussBlurMaterial(RenderingDevice device, RenderTargetTexture texture, bool horizontal) { var samplerState = new SamplerSpec(); samplerState.addressU = TextureAddress.Clamp; samplerState.addressV = TextureAddress.Clamp; samplerState.magFilter = TextureFilterType.Linear; samplerState.minFilter = TextureFilterType.Linear; samplerState.mipFilter = TextureFilterType.Linear; var rasterizerState = new RasterizerSpec(); rasterizerState.cullMode = CullMode.None; var depthStencilState = new DepthStencilSpec(); depthStencilState.depthEnable = false; var vs = device.GetShaders().LoadVertexShader("gaussian_blur_vs"); var horDefines = new Dictionary <string, string>(); if (horizontal) { horDefines["HOR"] = "1"; } var ps = device.GetShaders().LoadPixelShader("gaussian_blur_ps", horDefines); var samplers = new MaterialSamplerSpec[] { new (new ResourceRef <ITexture>(texture), samplerState) }; return(device.CreateMaterial(null, depthStencilState, rasterizerState, samplers, vs, ps).Ref()); }
private ResourceRef <Material> CreateMaterial(RenderingDevice device) { var blendState = new BlendSpec { blendEnable = true, srcBlend = BlendOperand.SrcAlpha, destBlend = BlendOperand.InvSrcAlpha }; var depthState = new DepthStencilSpec(); depthState.depthEnable = false; depthState.depthWrite = false; var rasterizerState = new RasterizerSpec(); var vs = _device.GetShaders().LoadVertexShader("diffuse_only_vs"); var ps = _device.GetShaders().LoadPixelShader("diffuse_only_ps"); return(device.CreateMaterial( blendState, depthState, rasterizerState, Array.Empty <MaterialSamplerSpec>(), vs, ps).Ref()); }
public MapObjectRenderer( RenderingDevice device, MdfMaterialFactory mdfFactory, AasRenderer aasRenderer) { mDevice = device; mAasRenderer = aasRenderer; mHighlightMaterial = mdfFactory.LoadMaterial("art/meshes/hilight.mdf"); mBlobShadowMaterial = mdfFactory.LoadMaterial("art/meshes/shadow.mdf"); mOccludedMaterial = mdfFactory.LoadMaterial("art/meshes/occlusion.mdf"); mGrappleController = new FrogGrappleController(device, mdfFactory); Globals.ConfigManager.OnConfigChanged += UpdateShadowType; UpdateShadowType(); // Load the weapon glow effect files mGlowMaterials[0] = mdfFactory.LoadMaterial("art/meshes/wg_magic.mdf"); mGlowMaterials[1] = mdfFactory.LoadMaterial("art/meshes/wg_acid.mdf"); mGlowMaterials[2] = mdfFactory.LoadMaterial("art/meshes/wg_bane.mdf"); mGlowMaterials[3] = mdfFactory.LoadMaterial("art/meshes/wg_chaotic.mdf"); mGlowMaterials[4] = mdfFactory.LoadMaterial("art/meshes/wg_cold.mdf"); mGlowMaterials[5] = mdfFactory.LoadMaterial("art/meshes/wg_fire.mdf"); mGlowMaterials[6] = mdfFactory.LoadMaterial("art/meshes/wg_holy.mdf"); mGlowMaterials[7] = mdfFactory.LoadMaterial("art/meshes/wg_law.mdf"); mGlowMaterials[8] = mdfFactory.LoadMaterial("art/meshes/wg_shock.mdf"); mGlowMaterials[9] = mdfFactory.LoadMaterial("art/meshes/wg_unholy.mdf"); }
public static void Shutdown() { var sw = Stopwatch.StartNew(); Logger.Info("TIG shutdown started..."); MainWindow?.Dispose(); RenderingDevice?.Dispose(); MdfFactory?.Dispose(); ShapeRenderer2d?.Dispose(); ShapeRenderer3d?.Dispose(); TextLayouter?.Dispose(); Sound?.Dispose(); Fonts?.Dispose(); DynamicScripting = null; FS = null; Mouse = null; Keyboard = null; SystemEventPump = null; MainWindow = null; MessageQueue = null; RenderingDevice = null; DebugUI = null; MdfFactory = null; ShapeRenderer2d = null; ShapeRenderer3d = null; TextLayouter = null; Sound = null; Fonts = null; Console = null; Logger.Info("TIG shutdown completed in {0}.", sw.Elapsed); }
public DeviceManager() { Device = new Rendering.DirectX11.Dx11RenderingDevice(); // Recreate legacy environment { ___LegacyDevice = GraphicsDevice.New(((Rendering.DirectX11.Dx11RenderingDevice)Device).Device); LevelData.ImportedGeometry.Device = ___LegacyDevice; // Load legacy effects string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location); IEnumerable <string> effectFiles = Directory.EnumerateFiles(dir + "\\Rendering\\Legacy", "*.fx"); foreach (string fileName in effectFiles) { string effectName = Path.GetFileNameWithoutExtension(fileName); EffectCompilerResult effect = EffectCompiler.CompileFromFile(fileName); if (effect.HasErrors) { string errors = ""; foreach (var err in effect.Logger.Messages) { errors += err + Environment.NewLine; } throw new Exception("Could not compile effect '" + fileName + "'" + Environment.NewLine + errors); } ___LegacyEffects.Add(effectName, new Effect(___LegacyDevice, effect.EffectData)); } // Load legacy font SpriteFontData fontData = SpriteFontData.Load(ResourcesC.ResourcesC.font); fontData.DefaultCharacter = '\n'; // Don't crash on uncommon Unicode values ___LegacyFont = SpriteFont.New(___LegacyDevice, fontData); } }
private static Material CreateMaterial(RenderingDevice device, string pixelShaderName, bool forLine = false, bool blending = true) { BlendSpec blendSpec = new BlendSpec(); blendSpec.blendEnable = blending; blendSpec.srcBlend = BlendOperand.SrcAlpha; blendSpec.destBlend = BlendOperand.InvSrcAlpha; DepthStencilSpec depthStencilSpec = new DepthStencilSpec(); depthStencilSpec.depthEnable = false; var vsDefines = new Dictionary <string, string>(); if (forLine) { vsDefines["DRAW_LINES"] = "1"; } using var vertexShader = device.GetShaders().LoadVertexShader("gui_vs", vsDefines); using var pixelShader = device.GetShaders().LoadPixelShader(pixelShaderName); return(device.CreateMaterial(blendSpec, depthStencilSpec, null, null, vertexShader.Resource, pixelShader.Resource)); }
public override void InitializeRendering(RenderingDevice device, bool antialias = false) { base.InitializeRendering(device, antialias); _textureAllocator = device.CreateTextureAllocator(new RenderingTextureAllocator.Description { Size = new VectorInt3(1024, 1024, 1) }); // Legacy rendering state { // Reset scrollbar _legacyDevice = DeviceManager.DefaultDeviceManager.___LegacyDevice; _wadRenderer = new WadRenderer(DeviceManager.DefaultDeviceManager.___LegacyDevice, true); ResetCamera(); // Initialize the rasterizer state for wireframe drawing SharpDX.Direct3D11.RasterizerStateDescription renderStateDesc = new SharpDX.Direct3D11.RasterizerStateDescription { CullMode = SharpDX.Direct3D11.CullMode.None, DepthBias = 0, DepthBiasClamp = 0, FillMode = SharpDX.Direct3D11.FillMode.Wireframe, IsAntialiasedLineEnabled = true, IsDepthClipEnabled = true, IsFrontCounterClockwise = false, IsMultisampleEnabled = true, IsScissorEnabled = false, SlopeScaledDepthBias = 0 }; } }
public RenderTargetTexture(RenderingDevice device, Texture2D texture, RenderTargetView rtView, Texture2D resolvedTexture, ShaderResourceView resourceView, Size size, bool multisampled) : base() { mTexture = texture.QueryInterface <Texture2D>(); // Creates our own reference mRtView = rtView; mResolvedTexture = resolvedTexture; mResourceView = resourceView; mSize = size; mMultiSampled = multisampled; mContentRect = new Rectangle(Point.Empty, size); var desc = mTexture.Description; switch (desc.Format) { case SharpDX.DXGI.Format.B8G8R8A8_UNorm: Format = BufferFormat.A8R8G8B8; break; case SharpDX.DXGI.Format.B8G8R8X8_UNorm: Format = BufferFormat.X8R8G8B8; break; default: throw new GfxException("Unsupported buffer format: " + desc.Format); } }
public ConeRenderer(RenderingDevice device) { _device = device; _fanIndexBuffer = device.CreateIndexBuffer(FanIndices); _fanVertexBuffer = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 20, debugName: "ConeRendererFanVb"); _fanBufferBinding = device.CreateMdfBufferBinding().Ref(); _fanBufferBinding.Resource.AddBuffer <IntgameVertex>(_fanVertexBuffer.Resource, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); _ringIndexBuffer = device.CreateIndexBuffer(RingIndices); _ringVertexBuffer = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 38, debugName: "ConeRendererRingVb"); _ringBufferBinding = device.CreateMdfBufferBinding().Ref(); _ringBufferBinding.Resource.AddBuffer <IntgameVertex>(_ringVertexBuffer.Resource, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); _flankIndexBuffer = device.CreateIndexBuffer(FlankIndices); _flankVertexBuffer = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 10, debugName: "ConeRendererRingFlank"); _flankBufferBinding = device.CreateMdfBufferBinding().Ref(); _flankBufferBinding.Resource.AddBuffer <IntgameVertex>(_flankVertexBuffer.Resource, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); }
public void Bind([MaybeNull] WorldCamera camera, RenderingDevice device, IList <Light3d> lights, MdfRenderOverrides overrides = null) { device.SetMaterial(mDeviceMaterial); BindShader(camera, device, lights, overrides); }
private void CreateResources(RenderingDevice device) { var vertexIdx = 0; Span <ushort> indicesData = stackalloc ushort[GlyphFileState.MaxGlyphs * 6]; int j = 0; for (var i = 0; i < GlyphFileState.MaxGlyphs; ++i) { // Counter clockwise quad rendering indicesData[j++] = (ushort)(vertexIdx + 0); indicesData[j++] = (ushort)(vertexIdx + 1); indicesData[j++] = (ushort)(vertexIdx + 2); indicesData[j++] = (ushort)(vertexIdx + 0); indicesData[j++] = (ushort)(vertexIdx + 2); indicesData[j++] = (ushort)(vertexIdx + 3); vertexIdx += 4; } _indexBuffer = device.CreateIndexBuffer(indicesData); _bufferBinding = new BufferBinding(device, _material.Resource.VertexShader).Ref(); _bufferBinding.Resource.AddBuffer <GlyphVertex3d>(null, 0) .AddElement(VertexElementType.Float3, VertexElementSemantic.Position) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); }
public MovieRenderer(IMainWindow mainWindow, RenderingDevice device, VideoPlayer player, MovieSubtitles?subtitles) { _mainWindow = mainWindow; _device = device; _material = CreateMaterial(device); _player = player; if (subtitles != null) { _subtitleRenderer = new SubtitleRenderer(_device, subtitles); } _texture = device.CreateDynamicTexture(BufferFormat.X8R8G8B8, player.VideoWidth, player.VideoHeight); if (_player.HasAudio) { _soundSource = new SoLoudDynamicSource(_player.AudioChannels, _player.AudioSampleRate); Tig.Sound.PlayDynamicSource(_soundSource); } player.OnVideoFrame += UpdateFrame; player.OnAudioSamples += PushAudioSamples; }
public PathXRenderSystem() { _device = Tig.RenderingDevice; // Create the indices now, they never change Span <ushort> indices = stackalloc ushort[6] { 0, 2, 1, 0, 3, 2 }; _indexBuffer = _device.CreateIndexBuffer(indices); _vertexBuffer = _device.CreateEmptyVertexBuffer(IntgameVertex.Size * 4, debugName: "PathXVB"); _bufferBinding = Tig.RenderingDevice.CreateMdfBufferBinding().Ref(); _bufferBinding.Resource.AddBuffer <IntgameVertex>(_vertexBuffer, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); _aooIndexBuffer = _device.CreateIndexBuffer(AooIndices); _aooVertexBuffer = _device.CreateEmptyVertexBuffer(IntgameVertex.Size * 7, debugName: "PathXVBAoo"); _aooBufferBinding = Tig.RenderingDevice.CreateMdfBufferBinding().Ref(); _aooBufferBinding.Resource.AddBuffer <IntgameVertex>(_aooVertexBuffer, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Color, VertexElementSemantic.Color) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); }
public MapFoggingSystem(RenderingDevice renderingDevice) { _device = renderingDevice; _fogScreenBuffer = null; _fogOfWarEnabled = true; _lineOfSightBuffers = new LineOfSightBuffer[8]; Renderer = new FogOfWarRenderer(this, renderingDevice); // Originally @ 0x10032290 GameViews.OnPrimaryChange += (previous, current) => { if (previous != null) { previous.OnResize -= UpdateGameViewSize; } if (current != null) { current.OnResize += UpdateGameViewSize; } }; if (GameViews.Primary != null) { UpdateFogLocation(); } }
public IndexBuffer(RenderingDevice device, Buffer buffer, Format format, int count) { _device = device; Buffer = buffer; Format = format; Count = count; }
public DebugUiSystem(IMainWindow mainWindow, RenderingDevice device) { _device = device; // This is used for IME only. var hwnd = IntPtr.Zero; if (mainWindow is MainWindow realMainWindow) { hwnd = realMainWindow.NativeHandle; } var context = device.Device.ImmediateContext; var guiContext = ImGui.CreateContext(); ImGui.SetCurrentContext(guiContext); ImGui.GetIO().Fonts.AddFontDefault(); AddRobotoFonts(); _renderer = new ImGuiRenderer(); if (!_renderer.ImGui_ImplDX11_Init(hwnd, device.Device, context)) { throw new Exception("Unable to initialize IMGui!"); } mainWindow.SetWindowMsgFilter(HandleMessage); }
public MaterialSamplerBinding(RenderingDevice device, ITexture texture, SamplerState samplerState) : base() { Texture = texture.Ref(); SamplerState = samplerState.Ref(); }
public override void RemoveFromRenderer() { base.RemoveFromRenderer(); foreach (Door d in doors) { RenderingDevice.Remove(d); } }
public override void AddToRenderer() { base.AddToRenderer(); foreach (Door d in doors) { RenderingDevice.Add(d); } }
public ParticleRendererManager(RenderingDevice device, IAnimatedModelFactory modelFactory, IAnimatedModelRenderer modelRenderer) { _spriteRenderer = new SpriteParticleRenderer(device); _discRenderer = new DiscParticleRenderer(device); _modelRenderer = new ModelParticleRenderer(modelFactory, modelRenderer); }
public RenderTargetDepthStencil(RenderingDevice device, Texture2D textureNew, DepthStencilView dsView, Size size) : base() { Size = size; DsView = dsView; TextureNew = textureNew; }
public void Render(RenderingDevice device) { if (VertexCount > 0 && IndexCount > 0) { BufferBinding.Resource.Bind(); device.SetIndexBuffer(IndexBuffer); device.DrawIndexed(PrimitiveType.TriangleList, VertexCount, IndexCount); } }
public ResourceLifecycleCallbacks( RenderingDevice device, Action <RenderingDevice> createCallback, Action <RenderingDevice> freeCallback) { _device = device; _createCallback = createCallback; _freeCallback = freeCallback; _device.AddResourceListener(this); }
public void Dispose() { if (_device != null) { _device.RemoveResourceListener(this); _device = null; _createCallback = null; _freeCallback = null; } }
public FormPreviewWad(Wad2 wad, RenderingDevice device, Editor editor) { _wad = wad; InitializeComponent(); panelItem.Editor = editor; panelItem.InitializeRendering(device, editor.Configuration.RenderingItem_Antialias); wadTree.Wad = wad; wadTree.MultiSelect = false; wadTree.SelectFirst(); }
public SlideRenderer(IMainWindow mainWindow, RenderingDevice device, string slidePath, string?musicPath, MovieSubtitles?subtitles) { _mainWindow = mainWindow; _device = device; _musicPath = musicPath; _image = new WidgetImage(slidePath); if (subtitles != null) { _subtitleRenderer = new SubtitleRenderer(_device, subtitles); } }
public ShapeRenderer3d(RenderingDevice device) { _device = device; _lineMaterial = CreateLineMaterial(false).Ref(); _quadMaterial = CreateQuadMaterial().Ref(); _lineOccludedMaterial = CreateLineMaterial(true).Ref(); _discBufferBinding = _device.CreateMdfBufferBinding().Ref(); _lineBinding = new BufferBinding(_device, _lineMaterial.Resource.VertexShader).Ref(); _circleBinding = new BufferBinding(_device, _lineMaterial.Resource.VertexShader).Ref(); _discVerticesTpl[0].pos = new Vector4(-1.0f, 0.0f, -1.0f, 1); _discVerticesTpl[1].pos = new Vector4(0.0f, 0.0f, -1.0f, 1); _discVerticesTpl[2].pos = new Vector4(0.0f, 0.0f, 0.0f, 1); _discVerticesTpl[3].pos = new Vector4(-1.0f, 0.0f, 0.0f, 1); _discVerticesTpl[4].pos = new Vector4(0.0f, 0.0f, -1.0f, 1); _discVerticesTpl[5].pos = new Vector4(1.0f, 0.0f, -1.0f, 1); _discVerticesTpl[6].pos = new Vector4(1.0f, 0.0f, 0.0f, 1); _discVerticesTpl[7].pos = new Vector4(0.0f, 0.0f, 0.0f, 1); _discVerticesTpl[8].pos = new Vector4(0.0f, 0.0f, 0.0f, 1); _discVerticesTpl[9].pos = new Vector4(1.0f, 0.0f, 0.0f, 1); _discVerticesTpl[10].pos = new Vector4(1.0f, 0.0f, 1.0f, 1); _discVerticesTpl[11].pos = new Vector4(0.0f, 0.0f, 1.0f, 1); _discVerticesTpl[12].pos = new Vector4(-1.0f, 0.0f, 0.0f, 1); _discVerticesTpl[13].pos = new Vector4(0.0f, 0.0f, 0.0f, 1); _discVerticesTpl[14].pos = new Vector4(0.0f, 0.0f, 1.0f, 1); _discVerticesTpl[15].pos = new Vector4(-1.0f, 0.0f, 1.0f, 1); for (var i = 0; i < _discVerticesTpl.Length; i++) { _discVerticesTpl[i].normal = new Vector4(0, 1, 0, 0); } _discVerticesTpl[0].uv = new Vector2(0, 0); _discVerticesTpl[1].uv = new Vector2(1, 0); _discVerticesTpl[2].uv = new Vector2(1, 1); _discVerticesTpl[3].uv = new Vector2(0, 1); _discVerticesTpl[4].uv = new Vector2(0, 1); _discVerticesTpl[5].uv = new Vector2(0, 0); _discVerticesTpl[6].uv = new Vector2(1, 0); _discVerticesTpl[7].uv = new Vector2(1, 1); _discVerticesTpl[8].uv = new Vector2(1, 1); _discVerticesTpl[9].uv = new Vector2(0, 1); _discVerticesTpl[10].uv = new Vector2(0, 0); _discVerticesTpl[11].uv = new Vector2(1, 0); _discVerticesTpl[12].uv = new Vector2(1, 0); _discVerticesTpl[13].uv = new Vector2(1, 1); _discVerticesTpl[14].uv = new Vector2(0, 1); _discVerticesTpl[15].uv = new Vector2(0, 0); _resourceListener = new ResourceLifecycleCallbacks(_device, CreateResources, FreeResources); }
private void CreateResources(RenderingDevice obj) { Span <ushort> indices = stackalloc ushort[] { 0, 2, 1, 0, 3, 2, 4, 6, 5, 4, 7, 6, 8, 10, 9, 8, 11, 10, 12, 14, 13, 12, 15, 14 }; _discIndexBuffer = _device.CreateIndexBuffer(indices); _discVertexBuffer = _device.CreateEmptyVertexBuffer(ShapeVertex3d.Size * 16, debugName: "ShapeRenderer3dDisc"); _discBufferBinding.Resource.AddBuffer <ShapeVertex3d>(_discVertexBuffer, 0) .AddElement(VertexElementType.Float4, VertexElementSemantic.Position) .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal) .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord); // +3 because for n lines, you need n+1 points and in this case, we have to repeat // the first point again to close the loop (so +2) and also include the center point // to draw a circle at the end (+3) _circleVertexBuffer = _device.CreateEmptyVertexBuffer(Marshal.SizeOf <Vector3>() * (CircleSegments + 3), debugName: "ShapeRenderer3dCircle"); // Pre-generate the circle indexbuffer. // One triangle per circle segment Span <ushort> circleIndices = stackalloc ushort[CircleSegments * 3]; for (ushort i = 0; i < CircleSegments; i++) { circleIndices[i * 3] = (ushort)(i + 2); circleIndices[i * 3 + 1] = 0; // The center point has to be in the triangle circleIndices[i * 3 + 2] = (ushort)(i + 1); } _circleIndexBuffer = _device.CreateIndexBuffer(circleIndices, true); _circleBinding.Resource.AddBuffer <Vector3>(_circleVertexBuffer, 0) .AddElement(VertexElementType.Float3, VertexElementSemantic.Position); // Just the two end points of a line _lineVertexBuffer = _device.CreateEmptyVertexBuffer(Marshal.SizeOf <Vector3>() * 2, debugName: "ShapeRenderer3dLine"); _lineBinding.Resource.AddBuffer <Vector3>(_lineVertexBuffer, 0) .AddElement(VertexElementType.Float3, VertexElementSemantic.Position); }
public virtual void InitializeRendering(RenderingDevice device, bool antialias = false) { if (LicenseManager.UsageMode == LicenseUsageMode.Runtime) { Device = device; SwapChain = device.CreateSwapChain(new RenderingSwapChain.Description { Size = new VectorInt2(ClientSize.Width, ClientSize.Height), WindowHandle = Handle, Antialias = antialias }); } }