Example #1
0
        public void UpdateTextures(IGameContext gameContext, IRenderContext renderContext)
        {
            if (_mustDestroyRenderTargets)
            {
                for (var i = 0; i < RTBufferSize; i++)
                {
                    if (_renderTargets[i] != null)
                    {
                        _renderTargets[i].Dispose();
                        _renderTargets[i] = null;
                    }
                }

                _mustDestroyRenderTargets = false;
            }

            var didRecreate = false;

            for (var i = 0; i < RTBufferSize; i++)
            {
                var oldRenderTarget = _renderTargets[i];
                _renderTargets[i] = _renderTargetBackBufferUtilities.UpdateCustomSizedRenderTarget(
                    _renderTargets[i],
                    renderContext,
                    Size.ToVector2(),
                    null,
                    null,
                    0, // We must NOT have MSAA on this render target for sharing to work properly!
                    true);
                _renderTargetSharedHandles[i] = _renderTargets[i]?.GetSharedHandle() ?? IntPtr.Zero;
                if (_renderTargets[i] != null && _renderTargets[i] != oldRenderTarget)
                {
                    // Release the lock we will have.
                    _renderTargets[i].ReleaseLock(1234);
                    didRecreate = true;
                }
            }

            if (didRecreate)
            {
                TexturesRecreated?.Invoke(this, EventArgs.Empty);
            }
        }