Files
test/intern/ghost/intern/GHOST_ContextNone.hh
Jeroen Bakker c50c3275be Vulkan: Acquire/release swapchain images
`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
2025-09-11 07:51:30 +02:00

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;
};