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(); }
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(); }
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"); }
void IManagerDevice.OnDeviceReset() { MyHwBuffers.Destroy(m_vertexBuffer); m_vertexBuffer = CreateVertexBuffer(); MyHwBuffers.Destroy(m_indexBuffer); m_indexBuffer = CreateIndexBuffer(); }
public void Dispose() { if (m_stream != VertexBufferId.NULL) { MyHwBuffers.Destroy(m_stream); m_stream = VertexBufferId.NULL; } }
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)); }
//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)); }
internal void Dispose() { if(VertexBuffer != VertexBufferId.NULL) { MyHwBuffers.Destroy(VertexBuffer); VertexBuffer = VertexBufferId.NULL; } m_capacity = 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"); }
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(); }
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; }
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; }
internal static void UpdateVertexBuffer(VertexBufferId id, IntPtr data) { MyRender11.DeviceContext.UpdateSubresource(new DataBox(data), VBuffersData[id.Index].Buffer); }
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); }
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); } } }
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; } }
internal static int GetVertexBufferStride(VertexBufferId id) { return VBuffersData[id.Index].Stride; }
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()); }
internal static BufferDescription GetBufferDesc(VertexBufferId id) { return VBuffers.Data[id.Index].Description; }
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; } }
public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message) { vbuffer = MyHwBuffers.CreateVertexBuffer(message.VertexCount, sizeof(MyVertexFormatPositionColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyDebugMesh"); Update(message); }
internal static Buffer GetVertexBuffer(VertexBufferId id) { return VBuffersData[id.Index].Buffer; }
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; }
internal static int GetVertexBufferCapacity(VertexBufferId id) { return VBuffers.Data[id.Index].Description.SizeInBytes / VBuffersData[id.Index].Stride; }