forked from bartvdbraak/blender
127 lines
5.1 KiB
C++
127 lines
5.1 KiB
C++
/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup GHOST
|
|
* Declaration of GHOST_IContext interface class.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "GHOST_Types.h"
|
|
|
|
/**
|
|
* Interface for GHOST context.
|
|
*
|
|
* You can create a off-screen context (windowless) with the system's
|
|
* #GHOST_ISystem::createOffscreenContext method.
|
|
* \see GHOST_ISystem#createOffscreenContext
|
|
*/
|
|
class GHOST_IContext {
|
|
public:
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~GHOST_IContext() {}
|
|
|
|
/**
|
|
* Activates the drawing context.
|
|
* \return A boolean success indicator.
|
|
*/
|
|
virtual GHOST_TSuccess activateDrawingContext() = 0;
|
|
|
|
/**
|
|
* Release the drawing context of the calling thread.
|
|
* \return A boolean success indicator.
|
|
*/
|
|
virtual GHOST_TSuccess releaseDrawingContext() = 0;
|
|
|
|
virtual unsigned int getDefaultFramebuffer() = 0;
|
|
|
|
/**
|
|
* Get Vulkan handles for the given context.
|
|
*
|
|
* These handles are the same for a given context.
|
|
* Should only be called when using a Vulkan context.
|
|
* Other contexts will not return any handles and leave the
|
|
* handles where the parameters are referring to unmodified.
|
|
*
|
|
* \param r_instance: After calling this function the VkInstance
|
|
* referenced by this parameter will contain the VKInstance handle
|
|
* of the context associated with the `context` parameter.
|
|
* \param r_physical_device: After calling this function the VkPhysicalDevice
|
|
* referenced by this parameter will contain the VKPhysicalDevice handle
|
|
* of the context associated with the `context` parameter.
|
|
* \param r_device: After calling this function the VkDevice
|
|
* referenced by this parameter will contain the VKDevice handle
|
|
* of the context associated with the `context` parameter.
|
|
* \param r_graphic_queue_family: After calling this function the uint32_t
|
|
* referenced by this parameter will contain the graphic queue family id
|
|
* of the context associated with the `context` parameter.
|
|
* \param r_queue: After calling this function the VkQueue
|
|
* referenced by this parameter will contain the VKQueue handle
|
|
* of the context associated with the `context` parameter.
|
|
* \returns GHOST_kFailure when context isn't a Vulkan context.
|
|
* GHOST_kSuccess when the context is a Vulkan context and the
|
|
* handles have been set.
|
|
*/
|
|
virtual GHOST_TSuccess getVulkanHandles(void *r_instance,
|
|
void *r_physical_device,
|
|
void *r_device,
|
|
uint32_t *r_graphic_queue_family,
|
|
void *r_queue) = 0;
|
|
|
|
/**
|
|
* Return Vulkan command buffer.
|
|
*
|
|
* Command buffers are different for each image in the swap chain.
|
|
* At the start of each frame the correct command buffer should be
|
|
* retrieved with this function.
|
|
*
|
|
* \param r_command_buffer: After calling this function the VkCommandBuffer
|
|
* referenced by this parameter will contain the VKCommandBuffer handle
|
|
* of the current back buffer (when swap chains are enabled) or
|
|
* it will contain a general VkCommandQueue.
|
|
* \returns GHOST_kFailure when context isn't a Vulkan context.
|
|
* GHOST_kSuccess when the context is a Vulkan context and the
|
|
* handles have been set.
|
|
*/
|
|
virtual GHOST_TSuccess getVulkanCommandBuffer(void *r_command_buffer) = 0;
|
|
|
|
/**
|
|
* Gets the Vulkan back-buffer related resource handles associated with the Vulkan context.
|
|
* Needs to be called after each swap event as the back-buffer will change.
|
|
*
|
|
* \param r_image: After calling this function the VkImage
|
|
* referenced by this parameter will contain the VKImage handle
|
|
* of the current back buffer.
|
|
* \param r_framebuffer: After calling this function the VkFramebuffer
|
|
* referenced by this parameter will contain the VKFramebuffer handle
|
|
* of the current back buffer.
|
|
* \param r_render_pass: After calling this function the VkRenderPass
|
|
* referenced by this parameter will contain the VKRenderPass handle
|
|
* of the current back buffer.
|
|
* \param r_extent: After calling this function the VkExtent2D
|
|
* referenced by this parameter will contain the size of the
|
|
* frame buffer and image in pixels.
|
|
* \param r_fb_id: After calling this function the uint32_t
|
|
* referenced by this parameter will contain the id of the
|
|
* framebuffer of the current back buffer.
|
|
* \returns GHOST_kFailure when context isn't a Vulkan context.
|
|
* GHOST_kSuccess when the context is a Vulkan context and the
|
|
* handles have been set.
|
|
*/
|
|
virtual GHOST_TSuccess getVulkanBackbuffer(void *r_image,
|
|
void *r_framebuffer,
|
|
void *r_render_pass,
|
|
void *r_extent,
|
|
uint32_t *r_fb_id) = 0;
|
|
|
|
virtual GHOST_TSuccess swapBuffers() = 0;
|
|
|
|
#ifdef WITH_CXX_GUARDEDALLOC
|
|
MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_IContext")
|
|
#endif
|
|
};
|