`GHOST_SwapWindowBuffers` doesn't fit well when using swapchains. In that case an approach where swap chain images are acquired and released would map better. This PR introduces `GHOST_SwapWindowBufferAcquire` and `GHOST_SwapWindowBufferRelease` to be more in line with vulkan swap chains. Previous implementation would first record all GPU commands based on the last used swap chain. In case a swapchain needed to be recreated (window resize, move to other monitor) the recorded commands would not match the swap chain and could lead to artifacts. OpenGL only implements the release functions as they don't have a mechanism to acquire a swap chain image. (Need to validate with the Metal API how this is working and adapt is needed). Currently when starting blender on a HDR capable display the first frame would be based on an sRGB surface and presented on an extended RGB (or other) surface. As these don't match the first frame could be incorrect and also lead to UBs as another surface is expected. Pull Request: https://projects.blender.org/blender/blender/pulls/145728
77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
/* SPDX-FileCopyrightText: 2013 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup GHOST
|
|
*
|
|
* Declaration of GHOST_Context class.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "GHOST_Context.hh"
|
|
|
|
class GHOST_ContextNone : public GHOST_Context {
|
|
public:
|
|
GHOST_ContextNone(const GHOST_ContextParams &context_params) : GHOST_Context(context_params) {}
|
|
|
|
/** \copydoc #GHOST_IContext::swapBuffersAcquire */
|
|
GHOST_TSuccess swapBufferAcquire() override
|
|
{
|
|
return GHOST_kSuccess;
|
|
}
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds
|
|
*/
|
|
GHOST_TSuccess swapBufferRelease() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess activateDrawingContext() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess releaseDrawingContext() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess updateDrawingContext() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess initializeDrawingContext() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess releaseNativeHandles() override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess setSwapInterval(int interval) override;
|
|
|
|
/**
|
|
* Dummy function
|
|
* \param interval_out: Gets whatever was set by #setSwapInterval.
|
|
* \return Always succeeds.
|
|
*/
|
|
GHOST_TSuccess getSwapInterval(int &interval_out) override;
|
|
|
|
private:
|
|
int swap_interval_ = 1;
|
|
};
|