private void RenderMesh(SceneElement sceneElement, Matrix viewProj, Color?wireframeColor = null) { var worldViewProj = sceneElement.Transform * viewProj; worldViewProj.Transpose(); if (wireframeColor.HasValue) { immediateContext.Rasterizer.State = wireframeOverlayRastState; immediateContext.PixelShader.SetShaderResource(0, colorTextures.GetTextureViewOfColor(wireframeColor.Value)); } else { immediateContext.Rasterizer.State = defaultRastState; immediateContext.PixelShader.SetShaderResource(0, textureCache.GetSRV(sceneElement.Mesh.TexturePath)); } immediateContext.UpdateSubresource(ref worldViewProj, vertexShaderPerFrameConstantBuffer); immediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(sceneElement.Mesh.VertexBuffer, 24, 0)); immediateContext.InputAssembler.SetIndexBuffer(sceneElement.Mesh.IndexBuffer, Format.R16_UInt, 0); immediateContext.DrawIndexed(sceneElement.Mesh.IndexCount, 0, 0); }
public ShaderResourceView GetSRV(string textureName) { TextureAndSRV returnValue; return(textures.TryGetValue(textureName, out returnValue) ? returnValue.SRV : colorTextures.GetTextureViewOfColor(Color.Gray)); }