protected override void InitControl()
 {
     this.loadingDisplayControl        = this.GetByName <LoadingDisplayControl>("LoadingDisplayControl");
     this.tradingStationDisplayControl =
         this.GetByName <ObjectTradingStationDisplayControl>("TradingStationDisplayControl");
     this.tradingStationDisplayControl.Visibility = Visibility.Collapsed;
     this.loadingDisplayControl.Visibility        = Visibility.Visible;
 }
        // Generate texture containing text.
        // For text rendering we will use UI.
        private async Task <ITextureResource> ClientGenerateProceduralTextureForTradingStationContent(
            TPublicState publicState,
            ProceduralTextureRequest request)
        {
            var rendering    = Client.Rendering;
            var renderingTag = request.TextureName;

            var qualityScaleCoef = rendering.CalculateCurrentQualityScaleCoefWithOffset(-1);
            var scale            = 1.0 / qualityScaleCoef;

            var controlWidth  = (int)Math.Floor(90 * (this.LotsCount / 2.0));
            var controlHeight = 268;
            // create and prepare UI renderer for the sign text to render
            var control = new ObjectTradingStationDisplayControl
            {
                IsBuyMode   = publicState.Mode == TradingStationMode.StationBuying,
                TradingLots = publicState.Lots
                              .Select(l => new TradingStationsMapMarksSystem.TradingStationLotInfo(l))
                              .ToArray(),
                Width           = controlWidth,
                Height          = controlHeight,
                LayoutTransform = new ScaleTransform(scale, scale)
            };

            var textureSize = new Vector2Ushort((ushort)(scale * controlWidth),
                                                (ushort)(scale * controlHeight));

            // create camera and render texture
            var renderTexture = rendering.CreateRenderTexture(renderingTag,
                                                              textureSize.X,
                                                              textureSize.Y);
            var cameraObject = Client.Scene.CreateSceneObject(renderingTag);
            var camera       = rendering.CreateCamera(cameraObject,
                                                      renderingTag,
                                                      drawOrder: -200);

            camera.RenderTarget = renderTexture;
            camera.SetOrthographicProjection(textureSize.X, textureSize.Y);

            rendering.CreateUIElementRenderer(
                cameraObject,
                control,
                size: textureSize,
                renderingTag: renderingTag);

            await camera.DrawAsync();

            cameraObject.Destroy();

            request.ThrowIfCancelled();

            var generatedTexture = await renderTexture.SaveToTexture(isTransparent : true,
                                                                     qualityScaleCoef : qualityScaleCoef);

            renderTexture.Dispose();
            request.ThrowIfCancelled();
            return(generatedTexture);
        }