Exemplo n.º 1
0
        public BitmapBufferTextureHandler(BitmapBufferResponse response)
        {
            frameBufferThread = new Thread(FrameBufferThread);
            frameBufferThread.Start(response.FrameInfoBufferName);

            bitmapBuffer = new BufferReadWrite(response.BitmapBufferName);
        }
Exemplo n.º 2
0
        private async void HandleWindowSize()
        {
            var currentSize = ImGui.GetWindowContentRegionMax() - ImGui.GetWindowContentRegionMin();

            if (currentSize == size || resizing)
            {
                return;
            }

            // If there isn't a size yet, we haven't rendered at all - boot up an inlay in the render process
            // TODO: Edge case - if a user _somehow_ makes the size zero, this will freak out and generate a new render inlay
            // TODO: Maybe consolidate the request types? dunno.
            var request = size == Vector2.Zero
                                ? new NewInlayRequest()
            {
                Guid = RenderGuid,
                FrameTransportMode = config.FrameTransportMode,
                Url    = inlayConfig.Url,
                Width  = (int)currentSize.X,
                Height = (int)currentSize.Y,
            }
                                : new ResizeInlayRequest()
            {
                Guid   = RenderGuid,
                Width  = (int)currentSize.X,
                Height = (int)currentSize.Y,
            } as DownstreamIpcRequest;

            resizing = true;

            var response = await renderProcess.Send <FrameTransportResponse>(request);

            if (!response.Success)
            {
                PluginLog.LogError("Texture build failure, retrying...");
                resizing = false;
                return;
            }

            size     = currentSize;
            resizing = false;

            var oldTextureHandler = textureHandler;

            try
            {
                textureHandler = response.Data switch
                {
                    TextureHandleResponse textureHandleResponse => new SharedTextureHandler(textureHandleResponse),
                    BitmapBufferResponse bitmapBufferResponse => new BitmapBufferTextureHandler(bitmapBufferResponse),
                    _ => throw new Exception($"Unhandled frame transport {response.GetType().Name}"),
                };
            }
            catch (Exception e) { textureRenderException = e; }
            if (oldTextureHandler != null)
            {
                oldTextureHandler.Dispose();
            }
        }