46 CAMetalLayer *metalLayer);
134 MTLRenderPassDescriptor *, id<MTLRenderPipelineState>, id<MTLTexture>, id<CAMetalDrawable>));
139 CAMetalLayer *metal_layer_;
140 MTLRenderPipelineState *metal_render_pipeline_;
141 bool owns_metal_device_;
149 static const int METAL_SWAPCHAIN_SIZE = 3;
150 struct MTLSwapchainTexture {
154 MTLSwapchainTexture default_framebuffer_metal_texture_[METAL_SWAPCHAIN_SIZE];
155 unsigned int current_swapchain_index = 0;
162 void (*contextPresentCallback)(MTLRenderPassDescriptor *,
163 id<MTLRenderPipelineState>,
165 id<CAMetalDrawable>);
167 int mtl_SwapInterval;
169 static int s_sharedCount;
172 static MTLCommandQueue *s_sharedMetalCommandQueue;
177 void metalInitFramebuffer();
178 void metalUpdateFramebuffer();
179 void metalSwapBuffers();
GHOST_TSuccess releaseDrawingContext() override
static const int max_command_buffer_count
GHOST_TSuccess swapBufferAcquire() override
MTLCommandQueue * metalCommandQueue()
MTLDevice * metalDevice()
GHOST_TSuccess activateDrawingContext() override
void metalRegisterPresentCallback(void(*callback)(MTLRenderPassDescriptor *, id< MTLRenderPipelineState >, id< MTLTexture >, id< CAMetalDrawable >))
GHOST_TSuccess setSwapInterval(int interval) override
GHOST_ContextMTL(const GHOST_ContextParams &context_params, NSView *metalView, CAMetalLayer *metalLayer)
GHOST_TSuccess swapBufferRelease() override
GHOST_TSuccess updateDrawingContext() override
GHOST_TSuccess initializeDrawingContext() override
GHOST_TSuccess releaseNativeHandles() override
id< MTLTexture > metalOverlayTexture()
~GHOST_ContextMTL() override
unsigned int getDefaultFramebuffer() override
GHOST_TSuccess getSwapInterval(int &interval_out) override
GHOST_Context(const GHOST_ContextParams &context_params)