示例#1
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 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);
    }
示例#3
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);
    }
    public PickerAreaRenderer(RenderingDevice device)
    {
        _device           = device;
        _fanIndexBuffer   = device.CreateIndexBuffer(FanIndices);
        _fanVertexBuffer  = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 39, debugName: "PickerAreaFan");
        _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 * 76, debugName: "PickerAreaRing");
        _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);
    }
示例#5
0
    public RectangleRenderer(RenderingDevice device)
    {
        _device             = device;
        _innerIndexBuffer   = device.CreateIndexBuffer(InnerIndices);
        _innerVertexBuffer  = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 22, debugName: "RectangleInner");
        _innerBufferBinding = device.CreateMdfBufferBinding().Ref();
        _innerBufferBinding.Resource.AddBuffer <IntgameVertex>(_innerVertexBuffer.Resource, 0)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);

        _outerIndexBuffer   = device.CreateIndexBuffer(OuterIndices);
        _outerVertexBuffer  = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 52, debugName: "RectangleOuter");
        _outerBufferBinding = device.CreateMdfBufferBinding().Ref();
        _outerBufferBinding.Resource.AddBuffer <IntgameVertex>(_outerVertexBuffer.Resource, 0)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }
示例#6
0
    public SpellPointerRenderer(RenderingDevice device)
    {
        _device       = device;
        _indexBuffer  = device.CreateIndexBuffer(Indices);
        _vertexBuffer = device.CreateEmptyVertexBuffer(IntgameVertex.Size * 4, debugName: "SpellPointer");

        _bufferBinding = device.CreateMdfBufferBinding().Ref();
        _bufferBinding.Resource.AddBuffer <IntgameVertex>(_vertexBuffer.Resource, 0)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);

        _material = Tig.MdfFactory.LoadMaterial("art/interface/intgame_select/Spell_Effect-Pointer.mdf");
    }
    public QuadEmitterRenderState(RenderingDevice device, PartSysEmitter emitter) : base(device, emitter, false)
    {
        bufferBinding = new BufferBinding(device, material.Resource.VertexShader).Ref();

        var maxCount = emitter.GetSpec().GetMaxParticles();

        vertexBuffer =
            device.CreateEmptyVertexBuffer(SpriteVertex.Size * 4 * maxCount, debugName:"ParticlesQuadEmitter");

        bufferBinding.Resource
            .AddBuffer<SpriteVertex>(vertexBuffer, 0)
            .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
            .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
            .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }
示例#8
0
    public FrogGrappleController(RenderingDevice device,
                                 MdfMaterialFactory mdfFactory)
    {
        mDevice        = device;
        mBufferBinding = device.CreateMdfBufferBinding();

        mTongueMaterial = mdfFactory.LoadMaterial("art/meshes/Monsters/GiantFrog/tongue.mdf");

        mVertexBuffer = device.CreateEmptyVertexBuffer(TongueVertex.Size * VertexCount, debugName: "FrogTongue");

        CreateIndexBuffer();

        mBufferBinding.AddBuffer(mVertexBuffer, 0, TongueVertex.Size)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }
    protected LineSegmentRenderer(RenderingDevice device, MdfMaterialFactory materialFactory, PerlinNoise noise,
                                  int maxLineSegments, string debugName)
    {
        _noise   = noise;
        Vertices = new Vertex[maxLineSegments * 2];
        Jitter   = new float[maxLineSegments];

        _device   = device;
        _material = materialFactory.LoadMaterial("art/meshes/lightning.mdf",
                                                 material => material.perVertexColor = true);

        _indexBuffer    = CreateIndexBuffer(_device, maxLineSegments, debugName);
        _capIndexBuffer = CreateIndexBuffer2(_device, debugName);
        _vertexBuffer   =
            _device.CreateEmptyVertexBuffer(Vertex.Size * Vertices.Length, debugName: debugName);
        _bufferBinding = _device.CreateMdfBufferBinding(true).Ref();
        _bufferBinding.Resource.AddBuffer <Vertex>(_vertexBuffer.Resource, 0)
        .AddElement(VertexElementType.Float3, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float3, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }
示例#10
0
    public FogOfWarRenderer(MapFoggingSystem fogSystem, RenderingDevice device)
    {
        _device    = device;
        _fogSystem = fogSystem;

        _vertexShader  = device.GetShaders().LoadVertexShader("fogofwar_vs");
        _bufferBinding = new BufferBinding(device, _vertexShader).Ref();

        UpdateBufferSize(true);

        Span <ushort> indices = stackalloc ushort[]
        {
            0, 2, 1, 2, 0, 3
        };

        _indexBuffer  = device.CreateIndexBuffer(indices, debugName: "FogOfWar");
        _vertexBuffer = device.CreateEmptyVertexBuffer(FogOfWarVertex.Size * 4, debugName: "FogOfWar");

        _bufferBinding.Resource
        .AddBuffer <FogOfWarVertex>(_vertexBuffer, 0)
        .AddElement(VertexElementType.Float3, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }
示例#11
0
    public ShapeRenderer2d(RenderingDevice device)
    {
        _device   = device;
        _textures = device.GetTextures();

        untexturedMaterial = CreateMaterial(device, "diffuse_only_ps");
        texturedMaterial   = CreateMaterial(device, "textured_simple_ps");
        texturedWithoutBlendingMaterial = CreateMaterial(device, "textured_simple_ps", false, false);
        texturedWithMaskMaterial        = CreateMaterial(device, "textured_two_ps");
        lineMaterial      = CreateMaterial(device, "diffuse_only_ps", true);
        outlineMaterial   = CreateOutlineMaterial(device);
        pieFillMaterial   = CreatePieFillMaterial(device);
        bufferBinding     = new BufferBinding(device, texturedMaterial.VertexShader).Ref();
        mdfBufferBinding  = _device.CreateMdfBufferBinding();
        lineBufferBinding = new BufferBinding(device, lineMaterial.VertexShader).Ref();


        SamplerSpec samplerWrapSpec = new SamplerSpec();

        samplerWrapSpec.addressU  = TextureAddress.Wrap;
        samplerWrapSpec.addressV  = TextureAddress.Wrap;
        samplerWrapSpec.minFilter = TextureFilterType.Linear;
        samplerWrapSpec.magFilter = TextureFilterType.Linear;
        samplerWrapSpec.mipFilter = TextureFilterType.Linear;
        samplerWrapState          = _device.CreateSamplerState(samplerWrapSpec);

        SamplerSpec samplerClampPointSpec = new SamplerSpec();

        samplerClampPointSpec.addressU  = TextureAddress.Clamp;
        samplerClampPointSpec.addressV  = TextureAddress.Clamp;
        samplerClampPointSpec.minFilter = TextureFilterType.NearestNeighbor;
        samplerClampPointSpec.magFilter = TextureFilterType.NearestNeighbor;
        samplerClampPointSpec.mipFilter = TextureFilterType.NearestNeighbor;
        samplerClampPointState          = _device.CreateSamplerState(samplerClampPointSpec);

        SamplerSpec samplerClampSpec = new SamplerSpec();

        samplerClampSpec.addressU  = TextureAddress.Clamp;
        samplerClampSpec.addressV  = TextureAddress.Clamp;
        samplerClampSpec.minFilter = TextureFilterType.Linear;
        samplerClampSpec.magFilter = TextureFilterType.Linear;
        samplerClampSpec.mipFilter = TextureFilterType.Linear;
        samplerClampState          = _device.CreateSamplerState(samplerClampSpec);

        DepthStencilSpec noDepthSpec = new DepthStencilSpec();

        noDepthSpec.depthEnable = false;
        noDepthState            = _device.CreateDepthStencilState(noDepthSpec);

        vertexBuffer = _device.CreateEmptyVertexBuffer(Vertex2d.Size * 8, debugName: "ShapeRenderer2d");

        var indexData = new ushort[]
        {
            0, 1, 2,
            2, 3, 0
        };

        indexBuffer = _device.CreateIndexBuffer(indexData);

        bufferBinding.Resource.AddBuffer <Vertex2d>(vertexBuffer, 0)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);

        mdfBufferBinding.AddBuffer <Vertex2d>(vertexBuffer, 0)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Position)
        .AddElement(VertexElementType.Float4, VertexElementSemantic.Normal)
        .AddElement(VertexElementType.Color, VertexElementSemantic.Color)
        .AddElement(VertexElementType.Float2, VertexElementSemantic.TexCoord);
    }