98 lines
4.3 KiB
C++
98 lines
4.3 KiB
C++
/*
|
|
* Copyright 2019 Google LLC
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
#ifndef GrAHardwareBufferUtils_DEFINED
|
|
#define GrAHardwareBufferUtils_DEFINED
|
|
|
|
#include "include/core/SkTypes.h"
|
|
|
|
#if defined(SK_BUILD_FOR_ANDROID) && __ANDROID_API__ >= 26
|
|
|
|
#include "include/gpu/ganesh/GrBackendSurface.h"
|
|
#include "include/gpu/ganesh/GrTypes.h"
|
|
|
|
class GrDirectContext;
|
|
|
|
extern "C" {
|
|
typedef struct AHardwareBuffer AHardwareBuffer;
|
|
}
|
|
|
|
namespace GrAHardwareBufferUtils {
|
|
|
|
#if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS)
|
|
GrBackendFormat GetBackendFormat(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer,
|
|
uint32_t bufferFormat, bool requireKnownFormat);
|
|
#endif
|
|
|
|
GrBackendFormat GetGLBackendFormat(GrDirectContext* dContext, uint32_t bufferFormat,
|
|
bool requireKnownFormat);
|
|
GrBackendFormat GetVulkanBackendFormat(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer,
|
|
uint32_t bufferFormat, bool requireKnownFormat);
|
|
|
|
typedef void* TexImageCtx;
|
|
typedef void (*DeleteImageProc)(TexImageCtx);
|
|
typedef void (*UpdateImageProc)(TexImageCtx, GrDirectContext*);
|
|
|
|
/**
|
|
* Create a GrBackendTexture from AHardwareBuffer
|
|
*
|
|
* @param context GPU context
|
|
* @param hardwareBuffer AHB
|
|
* @param width texture width
|
|
* @param height texture height
|
|
* @param deleteProc returns a function that deletes the texture and
|
|
* other GPU resources. Must be invoked on the same
|
|
* thread as MakeBackendTexture
|
|
* @param updateProc returns a function, that needs to be invoked, when
|
|
* AHB buffer content has changed. Must be invoked on
|
|
* the same thread as MakeBackendTexture
|
|
* @param imageCtx returns an opaque image context, that is passed as
|
|
* first argument to deleteProc and updateProc
|
|
* @param isProtectedContent if true, GL backend uses EXT_protected_content
|
|
* @param backendFormat backend format, usually created with helper
|
|
* function GetBackendFormat
|
|
* @param isRenderable true if GrBackendTexture can be used as a color
|
|
* attachment
|
|
* @return valid GrBackendTexture object on success
|
|
*/
|
|
#if !defined(SK_DISABLE_LEGACY_ANDROID_HW_UTILS)
|
|
GrBackendTexture MakeBackendTexture(GrDirectContext* dContext, AHardwareBuffer* hardwareBuffer,
|
|
int width, int height,
|
|
DeleteImageProc* deleteProc,
|
|
UpdateImageProc* updateProc,
|
|
TexImageCtx* imageCtx,
|
|
bool isProtectedContent,
|
|
const GrBackendFormat& backendFormat,
|
|
bool isRenderable,
|
|
bool fromAndroidWindow = false);
|
|
#endif
|
|
|
|
GrBackendTexture MakeGLBackendTexture(GrDirectContext* dContext,
|
|
AHardwareBuffer* hardwareBuffer,
|
|
int width, int height,
|
|
DeleteImageProc* deleteProc,
|
|
UpdateImageProc* updateProc,
|
|
TexImageCtx* imageCtx,
|
|
bool isProtectedContent,
|
|
const GrBackendFormat& backendFormat,
|
|
bool isRenderable);
|
|
|
|
GrBackendTexture MakeVulkanBackendTexture(GrDirectContext* dContext,
|
|
AHardwareBuffer* hardwareBuffer,
|
|
int width, int height,
|
|
DeleteImageProc* deleteProc,
|
|
UpdateImageProc* updateProc,
|
|
TexImageCtx* imageCtx,
|
|
bool isProtectedContent,
|
|
const GrBackendFormat& backendFormat,
|
|
bool isRenderable,
|
|
bool fromAndroidWindow = false);
|
|
|
|
} // namespace GrAHardwareBufferUtils
|
|
|
|
#endif
|
|
#endif
|