skia2/include/gpu/GrDirectContext.h
Robert Phillips c7228c604e Set up to use new GrDirectContext factories in Chrome
Here is the Chrome-side CL waiting on this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/2297920 Use new GrDirectContext factories instead of deprecated GrContext ones)

Change-Id: Ic607c8f4d3b87b38b5a56a2c44012b7402e074dd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/302583
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
2020-07-14 18:56:17 +00:00

94 lines
3.2 KiB
C++

/*
* Copyright 2020 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrDirectContext_DEFINED
#define GrDirectContext_DEFINED
#include "include/gpu/GrContext.h"
class GrAtlasManager;
class SK_API GrDirectContext : public GrContext {
public:
#ifdef SK_GL
/**
* Creates a GrDirectContext for a backend context. If no GrGLInterface is provided then the
* result of GrGLMakeNativeInterface() is used if it succeeds.
*/
static sk_sp<GrDirectContext> MakeGL(sk_sp<const GrGLInterface>, const GrContextOptions&);
static sk_sp<GrDirectContext> MakeGL(sk_sp<const GrGLInterface>);
static sk_sp<GrDirectContext> MakeGL(const GrContextOptions&);
static sk_sp<GrDirectContext> MakeGL();
#endif
#ifdef SK_VULKAN
/**
* The Vulkan context (VkQueue, VkDevice, VkInstance) must be kept alive until the returned
* GrDirectContext is destroyed. This also means that any objects created with this
* GrDirectContext (e.g. SkSurfaces, SkImages, etc.) must also be released as they may hold
* refs on the GrDirectContext. Once all these objects and the GrDirectContext are released,
* then it is safe to delete the vulkan objects.
*/
static sk_sp<GrDirectContext> MakeVulkan(const GrVkBackendContext&, const GrContextOptions&);
static sk_sp<GrDirectContext> MakeVulkan(const GrVkBackendContext&);
#endif
#ifdef SK_METAL
/**
* Makes a GrDirectContext which uses Metal as the backend. The device parameter is an
* MTLDevice and queue is an MTLCommandQueue which should be used by the backend. These objects
* must have a ref on them which can be transferred to Ganesh which will release the ref
* when the GrDirectContext is destroyed.
*/
static sk_sp<GrDirectContext> MakeMetal(void* device, void* queue, const GrContextOptions&);
static sk_sp<GrDirectContext> MakeMetal(void* device, void* queue);
#endif
#ifdef SK_DIRECT3D
/**
* Makes a GrDirectContext which uses Direct3D as the backend. The Direct3D context
* must be kept alive until the returned GrDirectContext is first destroyed or abandoned.
*/
static sk_sp<GrDirectContext> MakeDirect3D(const GrD3DBackendContext&, const GrContextOptions&);
static sk_sp<GrDirectContext> MakeDirect3D(const GrD3DBackendContext&);
#endif
#ifdef SK_DAWN
static sk_sp<GrDirectContext> MakeDawn(const wgpu::Device&,
const GrContextOptions&);
static sk_sp<GrDirectContext> MakeDawn(const wgpu::Device&);
#endif
static sk_sp<GrDirectContext> MakeMock(const GrMockOptions*, const GrContextOptions&);
static sk_sp<GrDirectContext> MakeMock(const GrMockOptions*);
~GrDirectContext() override;
void abandonContext() override;
void releaseResourcesAndAbandonContext() override;
void freeGpuResources() override;
protected:
GrDirectContext(GrBackendApi backend, const GrContextOptions& options);
bool init() override;
GrAtlasManager* onGetAtlasManager() override { return fAtlasManager; }
GrDirectContext* asDirectContext() override { return this; }
private:
GrAtlasManager* fAtlasManager;
typedef GrContext INHERITED;
};
#endif