private void TryAddDeviceFromOutput(GameGraphicsParameters prefferedParameters, GraphicsOutput output, GraphicsDeviceInformation deviceInfo, List <GraphicsDeviceInformation> graphicsDeviceInfos) { if (output.CurrentDisplayMode != null) { AddDevice(output.CurrentDisplayMode, deviceInfo, prefferedParameters, graphicsDeviceInfos); } if (prefferedParameters.IsFullScreen) { // Get display mode for the particular width, height, pixelformat foreach (var displayMode in output.SupportedDisplayModes) { AddDevice(displayMode, deviceInfo, prefferedParameters, graphicsDeviceInfos); } } }
public IActionResult DisplayViewAsImage() { var sim = Program.uglyGlobalSimulation; lock (sim) { var filename = "/tmp/tmp.png"; var w = 1600; var h = 1000; var scale = 0.150; // TODO: automatically determine boundaries of view var fontSize = 9; GraphicsOutput.RenderPng(sim.CoordSpace, sim.Network, sim.Units, Program.uglyGlobalTCSS, filename, w, h, scale, fontSize); byte[] filedata = System.IO.File.ReadAllBytes(filename); string contentType = "image/png"; return(File(filedata, contentType)); } }
private void TryAddDeviceFromOutput(GameGraphicsParameters prefferedParameters, GraphicsOutput output, GraphicsDeviceInformation deviceInfo, List <GraphicsDeviceInformation> graphicsDeviceInfos) { var preferredMode = new DisplayMode(prefferedParameters.PreferredBackBufferFormat, prefferedParameters.PreferredBackBufferWidth, prefferedParameters.PreferredBackBufferHeight, prefferedParameters.PreferredRefreshRate); if (prefferedParameters.IsFullScreen) { var displayMode = output.FindClosestMatchingDisplayMode(prefferedParameters.PreferredGraphicsProfile, preferredMode); AddDevice(displayMode, deviceInfo, prefferedParameters, graphicsDeviceInfos); } else { AddDevice(preferredMode, deviceInfo, prefferedParameters, graphicsDeviceInfos); } }
private static void Subscribe(Simulation sim) { var factory = new ConnectionFactory() { HostName = "localhost" }; var connection = factory.CreateConnection(); var channel = connection.CreateModel(); var simStateQueue = channel.QueueDeclare().QueueName; channel.ExchangeDeclare(exchange: "SimState_full.cbor", type: ExchangeType.Fanout); channel.QueueBind(queue: simStateQueue, exchange: "SimState_full.cbor", routingKey: ""); channel.ExchangeDeclare(exchange: "TSIM.cbor", type: ExchangeType.Fanout); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { // var message = Encoding.UTF8.GetString(ea.Body.ToArray()); // Console.WriteLine("RX " + message); var(unitsSnapshot, controlSnapshot, simInfoSnapshot) = Serialization.UnglueFullSimSnapshot(ea.Body.ToArray()); // var message = Encoding.UTF8.GetString(unitsSnapshot); // Console.WriteLine("RX " + message); // var message = Encoding.UTF8.GetString(controlSnapshot); // Console.WriteLine("RX " + message); var controlStateMap = Serialization.DeserializeTrainControlState(controlSnapshot); uglyGlobalTCSS = controlStateMap; lock (sim) { // Serialization.DeserializeInfoSnapshot(sim, simInfoSnapshot); sim.Units.SnapshotFullRestore(unitsSnapshot); // Render outputs var filename = "/tmp/tmp.png"; var w = 1400; var h = 1000; var scale = 0.150; // TODO: automatically determine boundaries of view var fontSize = 9; GraphicsOutput.RenderPng(sim.CoordSpace, sim.Network, sim.Units, Program.uglyGlobalTCSS, filename, w, h, scale, fontSize); byte[] filedata = System.IO.File.ReadAllBytes(filename); string contentType = "image/png"; // Wrap in CBOR & publish var cbor = CBORObject.NewMap() .Add("objects", CBORObject.NewArray() .Add(CBORObject.NewMap() .Add("name", "main") // deprecated .Add("topic", "main") .Add("displayName", "TSIM View") .Add("mimeType", contentType) .Add("data", filedata) ) .Add(ControlSystemStateMapToCbor(Program.uglyGlobalTCSS)) .Add(SimulationStateMapToCbor(/*sim.SimTimeElapsed*/ simInfoSnapshot)) .Add(UnitsToCbor(sim.Units)) ) .Add("controls", CBORObject.NewArray()) ; channel.BasicPublish(exchange: "TSIM.cbor", routingKey: "", basicProperties: null, body: cbor.EncodeToBytes()); // Console.WriteLine($"Pub now"); } }; channel.BasicConsume(queue: simStateQueue, autoAck: true, consumer: consumer); }