Ejemplo n.º 1
0
        internal unsafe void RecordCommands(MyRenderableProxy proxy, VertexBufferId stream, int voxelMatId)
        {
            if (stream == VertexBufferId.NULL) return;

            var foliageType = MyVoxelMaterials1.Table[voxelMatId].FoliageType;

            MyMapping mapping = MyMapping.MapDiscard(RC, proxy.ObjectBuffer);
            mapping.WriteAndPosition(ref proxy.NonVoxelObjectData);
            mapping.WriteAndPosition(ref proxy.CommonObjectData);
            mapping.Unmap();

            RC.AllShaderStages.SetConstantBuffer(MyCommon.OBJECT_SLOT, proxy.ObjectBuffer);

            RC.GeometryShader.Set(m_GS[foliageType]);
            RC.PixelShader.Set(m_PS[foliageType]);

            if (MyVoxelMaterials1.Table[voxelMatId].FoliageColorTextureArray != null)
            {
                RC.AllShaderStages.SetSrv(0, MyVoxelMaterials1.Table[voxelMatId].FoliageColorTextureArray);
                RC.AllShaderStages.SetSrv(1, MyVoxelMaterials1.Table[voxelMatId].FoliageNormalTextureArray);
            }
            else
            {
                MyFileTextureManager texManager = MyManagers.FileTextures;
                RC.AllShaderStages.SetSrv(0, texManager.GetTexture(MyVoxelMaterials1.Table[voxelMatId].FoliageArray_Texture, MyFileTextureEnum.COLOR_METAL, true));
                RC.AllShaderStages.SetSrv(1, texManager.GetTexture(MyVoxelMaterials1.Table[voxelMatId].FoliageArray_NormalTexture, MyFileTextureEnum.NORMALMAP_GLOSS, true));
            }

            RC.SetVertexBuffer(0, stream.Buffer, stream.Stride);
            RC.DrawAuto();
        }
Ejemplo n.º 2
0
        unsafe void IManagerDevice.OnDeviceInit()
        {
            if (m_markerConstantBuffer == ConstantsBufferId.NULL)
            {
                m_markerConstantBuffer = MyHwBuffers.CreateConstantsBuffer(sizeof(MyMarkerConstants), "MyPostprocessMarkCascades.MarkerConstantBuffer");
            }

            if (m_psMarker == PixelShaderId.NULL)
            {
                m_psMarker = MyShaders.CreatePs("Shadows\\StencilMarker.hlsl");
            }
            if (m_vsMarker == VertexShaderId.NULL)
            {
                m_vsMarker = MyShaders.CreateVs("Shadows\\StencilMarker.hlsl");
            }
            if (m_psDrawCoverage == PixelShaderId.NULL)
            {
                m_psDrawCoverage = MyShaders.CreatePs("Shadows\\CascadeCoverage.hlsl");
            }
            if (m_inputLayout == InputLayoutId.NULL)
            {
                m_inputLayout = MyShaders.CreateIL(m_vsMarker.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION3));
            }

            m_vertexBuffer = CreateVertexBuffer();
            m_indexBuffer  = CreateIndexBuffer();
        }
Ejemplo n.º 3
0
        internal static void Init()
        {
            //MyRender11.RegisterSettingsChangedListener(new OnSettingsChangedDelegate(RecreateShadersForSettings));
            m_screenVertexShader = MyShaders.CreateVs("Debug/DebugBaseColor.hlsl");
            m_baseColorShader = MyShaders.CreatePs("Debug/DebugBaseColor.hlsl");
            m_albedoShader = MyShaders.CreatePs("Debug/DebugAlbedo.hlsl");
            m_normalShader = MyShaders.CreatePs("Debug/DebugNormal.hlsl");
            m_normalViewShader = MyShaders.CreatePs("Debug/DebugNormalView.hlsl");
            m_glossinessShader = MyShaders.CreatePs("Debug/DebugGlossiness.hlsl");
            m_metalnessShader = MyShaders.CreatePs("Debug/DebugMetalness.hlsl");
            m_aoShader = MyShaders.CreatePs("Debug/DebugAmbientOcclusion.hlsl");
            m_emissiveShader = MyShaders.CreatePs("Debug/DebugEmissive.hlsl");
            m_ambientDiffuseShader = MyShaders.CreatePs("Debug/DebugAmbientDiffuse.hlsl");
            m_ambientSpecularShader = MyShaders.CreatePs("Debug/DebugAmbientSpecular.hlsl");
            m_edgeDebugShader = MyShaders.CreatePs("Debug/DebugEdge.hlsl");
            m_shadowsDebugShader = MyShaders.CreatePs("Debug/DebugCascadesShadow.hlsl");
            m_NDotLShader = MyShaders.CreatePs("Debug/DebugNDotL.hlsl");
            m_depthShader = MyShaders.CreatePs("Debug/DebugDepth.hlsl");
            m_stencilShader = MyShaders.CreatePs("Debug/DebugStencil.hlsl");
            m_rtShader = MyShaders.CreatePs("Debug/DebugRt.hlsl");

            m_blitTextureShader = MyShaders.CreatePs("Debug/DebugBlitTexture.hlsl");
            m_blitTexture3DShader = MyShaders.CreatePs("Debug/DebugBlitTexture3D.hlsl");
            m_blitTextureArrayShader = MyShaders.CreatePs("Debug/DebugBlitTextureArray.hlsl");
            m_inputLayout = MyShaders.CreateIL(m_screenVertexShader.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION2, MyVertexInputComponentType.TEXCOORD0));

            m_quadBuffer = MyHwBuffers.CreateVertexBuffer(6, MyVertexFormatPosition2Texcoord.STRIDE, BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyDebugRenderer quad");
        }
Ejemplo n.º 4
0
        void IManagerDevice.OnDeviceReset()
        {
            MyHwBuffers.Destroy(m_vertexBuffer);
            m_vertexBuffer = CreateVertexBuffer();

            MyHwBuffers.Destroy(m_indexBuffer);
            m_indexBuffer = CreateIndexBuffer();
        }
Ejemplo n.º 5
0
 public void Dispose()
 {
     if (m_stream != VertexBufferId.NULL)
     {
         MyHwBuffers.Destroy(m_stream);
         m_stream = VertexBufferId.NULL;
     }
 }
Ejemplo n.º 6
0
        internal static void Init()
        {
            m_VSCopy = MyShaders.CreateVs("Postprocess/PostprocessCopy.hlsl");

            {
                m_VBFullscreen = MyHwBuffers.CreateVertexBuffer(4, VRageRender.Vertex.MyVertexFormatPositionTextureH.STRIDE,
                    BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyScreenPass.VBFullscreen");
                m_vbData[0] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(-1, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(0, 1f));
                m_vbData[1] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(-1, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(0, 0));
                m_vbData[2] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(1, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(1, 1f));
                m_vbData[3] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(1, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(1, 0f));
                MyMapping mapping = MyMapping.MapDiscard(RC, m_VBFullscreen.Buffer);
                mapping.WriteAndPosition(m_vbData, 0, 4);
                mapping.Unmap();
            }

            {
                m_VBLeftPart = MyHwBuffers.CreateVertexBuffer(4, VRageRender.Vertex.MyVertexFormatPositionTextureH.STRIDE,
                    BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyVRScreenPass.VBLeftPart");
                m_vbData[0] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(-1, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(0, 1));
                m_vbData[1] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(-1, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(0, 0));
                m_vbData[2] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(0, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(0.5f, 1));
                m_vbData[3] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(0, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(0.5f, 0f));
                MyMapping mapping = MyMapping.MapDiscard(RC, m_VBLeftPart.Buffer);
                mapping.WriteAndPosition(m_vbData, 0, 4);
                mapping.Unmap();
            }

            {
                m_VBRightPart = MyHwBuffers.CreateVertexBuffer(4, VRageRender.Vertex.MyVertexFormatPositionTextureH.STRIDE,
                    BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyVRScreenPass.VBRightPart");
                m_vbData[0] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(0, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(0.5f, 1));
                m_vbData[1] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(0, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(0.5f, 0));
                m_vbData[2] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(1, -1, 0),
                    new VRageMath.PackedVector.HalfVector2(1, 1));
                m_vbData[3] = new VRageRender.Vertex.MyVertexFormatPositionTextureH(new Vector3(1, 1, 0),
                    new VRageMath.PackedVector.HalfVector2(1, 0));
                MyMapping mapping = MyMapping.MapDiscard(RC, m_VBRightPart.Buffer);
                mapping.WriteAndPosition(m_vbData, 0, 4);
                mapping.Unmap();
            }

            // just some shader bytecode is selected
            m_IL = MyShaders.CreateIL(m_VSCopy.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION3, MyVertexInputComponentType.TEXCOORD0_H));

        }
Ejemplo n.º 7
0
        //internal static void CreateInputLayout(byte[] bytecode)
        //{
        //    m_inputLayout = MyVertexInputLayout.CreateLayout(MyVertexInputLayout.Empty().Append(MyVertexInputComponentType.POSITION3).Append(MyVertexInputComponentType.COLOR4), bytecode);
        //}

        internal unsafe static void Init()
        {
            m_currentBufferSize = 100000;

            m_VB = MyHwBuffers.CreateVertexBuffer(m_currentBufferSize, sizeof(MyVertexFormatPositionColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyPrimitivesRenderer");

            m_vs = MyShaders.CreateVs("Primitives/Primitives.hlsl");
            m_ps = MyShaders.CreatePs("Primitives/Primitives.hlsl");
            m_inputLayout = MyShaders.CreateIL(m_vs.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION3, MyVertexInputComponentType.COLOR4));
        }
Ejemplo n.º 8
0
        internal void Dispose()
        {
            if(VertexBuffer != VertexBufferId.NULL) 
            {
                MyHwBuffers.Destroy(VertexBuffer);
                VertexBuffer = VertexBufferId.NULL;
            }

            m_capacity = 0;
        }
Ejemplo n.º 9
0
        internal unsafe void AllocateStreamOutBuffer(int vertexStride)
        {
            Dispose();

            // padding to some power of 2
            m_allocationSize = ((m_allocationSize + 511) / 512) * 512;
            const int maxAlloc = 5 * 1024 * 1024;
            m_allocationSize = Math.Min(maxAlloc, m_allocationSize);

            Debug.Assert(m_stream == VertexBufferId.NULL);
            m_stream = MyHwBuffers.CreateVertexBuffer(m_allocationSize, vertexStride, BindFlags.VertexBuffer | BindFlags.StreamOutput, ResourceUsage.Default, null, "MyFoliageStream");
        }
Ejemplo n.º 10
0
        private static void InitInternal(Vector2[] vertsForMask)
        {
            m_VB = MyHwBuffers.CreateVertexBuffer(vertsForMask.Length, MyVertexFormat2DPosition.STRIDE, BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyStereoStencilMask.VB");
            MyMapping mapping = MyMapping.MapDiscard(RC, m_VB.Buffer);
            mapping.WriteAndPosition(vertsForMask, 0, vertsForMask.Length);
            mapping.Unmap();

            m_vs = MyShaders.CreateVs("Stereo/StereoStencilMask.hlsl");
            m_ps = MyShaders.CreatePs("Stereo/StereoStencilMask.hlsl");

            m_il = MyShaders.CreateIL(m_vs.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION2));
        }
        unsafe void IManagerDevice.OnDeviceInit()
        {
            if (m_markerConstantBuffer == ConstantsBufferId.NULL)
                m_markerConstantBuffer = MyHwBuffers.CreateConstantsBuffer(sizeof(MyMarkerConstants), "MyPostprocessMarkCascades.MarkerConstantBuffer");

            if (m_psMarker == PixelShaderId.NULL)
                m_psMarker = MyShaders.CreatePs("Shadows\\StencilMarker.hlsl");
            if (m_vsMarker == VertexShaderId.NULL)
                m_vsMarker = MyShaders.CreateVs("Shadows\\StencilMarker.hlsl");
            if (m_psDrawCoverage == PixelShaderId.NULL)
                m_psDrawCoverage = MyShaders.CreatePs("Shadows\\CascadeCoverage.hlsl");
            if (m_inputLayout == InputLayoutId.NULL)
                m_inputLayout = MyShaders.CreateIL(m_vsMarker.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION3));

            m_vertexBuffer = CreateVertexBuffer();
            m_indexBuffer = CreateIndexBuffer();
        }
Ejemplo n.º 12
0
        internal override void Construct()
        {
            base.Construct();
            Type = MyActorComponentEnum.Instancing;

            MyUtils.Init(ref m_owners);
            m_owners.Clear();

            MyUtils.Init(ref m_ID);
            m_ID.Clear();

            VB = VertexBufferId.NULL;
            m_input = MyVertexInputLayout.Empty;
            m_stride = -1;
            m_type = MyRenderInstanceBufferType.Invalid;
            m_capacity = -1;
        }
Ejemplo n.º 13
0
        internal unsafe void Construct(MyRenderInstanceBufferType type)
        {
            m_capacity = 0;

            m_input = MyVertexInputLayout.Empty;

            if(type == MyRenderInstanceBufferType.Cube)
            { 
                m_input.Append(MyVertexInputComponentType.CUBE_INSTANCE, 2, MyVertexInputComponentFreq.PER_INSTANCE);
                m_stride = sizeof(MyVertexFormatCubeInstance);
            }
            else if (type == MyRenderInstanceBufferType.Generic)
            {
                m_input.Append(MyVertexInputComponentType.GENERIC_INSTANCE, 2, MyVertexInputComponentFreq.PER_INSTANCE);
                m_stride = sizeof(MyVertexFormatGenericInstance);
            }

            m_type = type;
            VertexBuffer = VertexBufferId.NULL;
        }
Ejemplo n.º 14
0
 internal static void UpdateVertexBuffer(VertexBufferId id, IntPtr data)
 {
     MyRender11.DeviceContext.UpdateSubresource(new DataBox(data), VBuffersData[id.Index].Buffer);
 }
Ejemplo n.º 15
0
 internal static void ResizeVertexBuffer(VertexBufferId id, int size)
 {
     VBuffersData[id.Index].Buffer.Dispose();
     VBuffers.Data[id.Index].Description.SizeInBytes = VBuffersData[id.Index].Stride * size;
     InitVertexBuffer(id);
 }
Ejemplo n.º 16
0
        internal static void ResizeAndUpdateStaticVertexBuffer(ref VertexBufferId id, int capacity, int stride, IntPtr data, string debugName)
        {
            if (id == VertexBufferId.NULL)
            {
                id = CreateVertexBuffer(capacity, stride, data, debugName);
            }
            else
            {
                Debug.Assert(stride == id.Stride);

                if (id.Capacity != capacity)
                {
                    VBuffersData[id.Index].Buffer.Dispose();
                    VBuffers.Data[id.Index].Description.SizeInBytes = VBuffersData[id.Index].Stride * capacity;
                    InitVertexBuffer(id, data);
                }
                else
                {
                    UpdateVertexBuffer(id, data);
                }
            }
        }
Ejemplo n.º 17
0
 internal static void InitVertexBuffer(VertexBufferId id, IntPtr data)
 {
     VBuffersData[id.Index].Buffer = new Buffer(MyRender11.Device, data, VBuffers.Data[id.Index].Description);
     if (VBuffers.Data[id.Index].DebugName != null)
     {
         VBuffersData[id.Index].Buffer.DebugName = VBuffers.Data[id.Index].DebugName;
     }
 }
Ejemplo n.º 18
0
 internal static int GetVertexBufferStride(VertexBufferId id)
 {
     return VBuffersData[id.Index].Stride;
 }
Ejemplo n.º 19
0
        internal unsafe static void Init()
        {
            m_vs = MyShaders.CreateVs("Primitives/Sprites.hlsl");
            m_ps = MyShaders.CreatePs("Primitives/Sprites.hlsl");

            m_inputLayout = MyShaders.CreateIL(m_vs.BytecodeId, MyVertexLayouts.GetLayout(
                new MyVertexInputComponent(MyVertexInputComponentType.CUSTOM_HALF4_0, MyVertexInputComponentFreq.PER_INSTANCE),
                new MyVertexInputComponent(MyVertexInputComponentType.CUSTOM_HALF4_1, MyVertexInputComponentFreq.PER_INSTANCE),
                new MyVertexInputComponent(MyVertexInputComponentType.CUSTOM_HALF4_2, MyVertexInputComponentFreq.PER_INSTANCE),
                new MyVertexInputComponent(MyVertexInputComponentType.COLOR4, MyVertexInputComponentFreq.PER_INSTANCE)
                ));

            m_currentBufferSize = 100000;
            m_VB = MyHwBuffers.CreateVertexBuffer(m_currentBufferSize, sizeof(MyVertexFormatSpritePositionTextureRotationColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MySpritesRenderer");

            m_contextsStack.Add(new MySpritesContext());
        }
Ejemplo n.º 20
0
 internal static BufferDescription GetBufferDesc(VertexBufferId id)
 {
     return VBuffers.Data[id.Index].Description;
 }
Ejemplo n.º 21
0
 internal static void Destroy(VertexBufferId id)
 {
     Debug.Assert(VbIndices.Contains(id));
     VbIndices.Remove(id);
     if(VBuffersData[id.Index].Buffer != null)
     {
         VBuffersData[id.Index].Buffer.Dispose();
         VBuffersData[id.Index].Buffer = null;
     }
     VBuffers.Free(id.Index);
 }
 private unsafe void InitVertexBuffer(int numberOfCascades)
 {
     DestroyVertexBuffer();
     m_cascadesBoundingsVertices = MyHwBuffers.CreateVertexBuffer(8 * numberOfCascades, sizeof(Vector3), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyShadowCascadesPostProcess");
 }
 private void DestroyVertexBuffer()
 {
     if (m_cascadesBoundingsVertices != VertexBufferId.NULL)
     {
         MyHwBuffers.Destroy(m_cascadesBoundingsVertices);
         m_cascadesBoundingsVertices = VertexBufferId.NULL;
     }
 }
        void IManagerDevice.OnDeviceReset()
        {
            MyHwBuffers.Destroy(m_vertexBuffer);
            m_vertexBuffer = CreateVertexBuffer();

            MyHwBuffers.Destroy(m_indexBuffer);
            m_indexBuffer = CreateIndexBuffer();
        }
Ejemplo n.º 25
0
        public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message)
        {
            vbuffer = MyHwBuffers.CreateVertexBuffer(message.VertexCount, sizeof(MyVertexFormatPositionColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyDebugMesh");

            Update(message);
        }
Ejemplo n.º 26
0
 internal static Buffer GetVertexBuffer(VertexBufferId id)
 {
     return VBuffersData[id.Index].Buffer;
 }
Ejemplo n.º 27
0
        internal static VertexBufferId CreateVertexBuffer(BufferDescription description, int stride, IntPtr? data, string debugName)
        {
            if (description.SizeInBytes == 0) return VertexBufferId.NULL;

            var id = new VertexBufferId { Index = VBuffers.Allocate() };

            MyArrayHelpers.Reserve(ref VBuffersData, id.Index + 1);
            VBuffers.Data[id.Index] = new MyHwBufferDesc { Description = description, DebugName = debugName };
            VBuffersData[id.Index] = new MyVertexBufferData { Stride = stride };

            VbIndices.Add(id);

            if (!data.HasValue)
            {
                InitVertexBuffer(id);
            }
            else
            {
                InitVertexBuffer(id, data.Value);
            }

            return id;
        }
Ejemplo n.º 28
0
 internal static int GetVertexBufferCapacity(VertexBufferId id)
 {
     return VBuffers.Data[id.Index].Description.SizeInBytes / VBuffersData[id.Index].Stride;
 }