Ejemplo n.º 1
0
    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
                   ));
    }
Ejemplo n.º 2
0
    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());
    }
Ejemplo n.º 3
0
    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());
    }
Ejemplo n.º 4
0
    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");
    }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
    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));
    }
Ejemplo n.º 8
0
        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
                };
            }
        }
Ejemplo n.º 9
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);
        }
    }
Ejemplo n.º 10
0
    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);
    }
Ejemplo n.º 11
0
    public void Bind([MaybeNull] WorldCamera camera, RenderingDevice device, IList <Light3d> lights,
                     MdfRenderOverrides overrides = null)
    {
        device.SetMaterial(mDeviceMaterial);

        BindShader(camera, device, lights, overrides);
    }
Ejemplo n.º 12
0
    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);
    }
Ejemplo n.º 13
0
    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;
    }
Ejemplo n.º 14
0
    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();
        }
    }
Ejemplo n.º 16
0
 public IndexBuffer(RenderingDevice device, Buffer buffer, Format format, int count)
 {
     _device = device;
     Buffer  = buffer;
     Format  = format;
     Count   = count;
 }
Ejemplo n.º 17
0
    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);
    }
Ejemplo n.º 18
0
 public MaterialSamplerBinding(RenderingDevice device,
                               ITexture texture,
                               SamplerState samplerState) : base()
 {
     Texture      = texture.Ref();
     SamplerState = samplerState.Ref();
 }
Ejemplo n.º 19
0
 public override void RemoveFromRenderer()
 {
     base.RemoveFromRenderer();
     foreach (Door d in doors)
     {
         RenderingDevice.Remove(d);
     }
 }
Ejemplo n.º 20
0
 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);
 }
Ejemplo n.º 22
0
 public RenderTargetDepthStencil(RenderingDevice device,
                                 Texture2D textureNew,
                                 DepthStencilView dsView,
                                 Size size) : base()
 {
     Size       = size;
     DsView     = dsView;
     TextureNew = textureNew;
 }
Ejemplo n.º 23
0
 public void Render(RenderingDevice device)
 {
     if (VertexCount > 0 && IndexCount > 0)
     {
         BufferBinding.Resource.Bind();
         device.SetIndexBuffer(IndexBuffer);
         device.DrawIndexed(PrimitiveType.TriangleList, VertexCount, IndexCount);
     }
 }
Ejemplo n.º 24
0
 public ResourceLifecycleCallbacks(
     RenderingDevice device,
     Action <RenderingDevice> createCallback,
     Action <RenderingDevice> freeCallback)
 {
     _device         = device;
     _createCallback = createCallback;
     _freeCallback   = freeCallback;
     _device.AddResourceListener(this);
 }
Ejemplo n.º 25
0
 public void Dispose()
 {
     if (_device != null)
     {
         _device.RemoveResourceListener(this);
         _device         = null;
         _createCallback = null;
         _freeCallback   = null;
     }
 }
Ejemplo n.º 26
0
        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();
        }
Ejemplo n.º 27
0
 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);
     }
 }
Ejemplo n.º 28
0
    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);
    }
Ejemplo n.º 29
0
    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);
    }
Ejemplo n.º 30
0
 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
         });
     }
 }