| |
| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrGLTypes_DEFINED |
| #define GrGLTypes_DEFINED |
| |
| #include "include/core/SkRefCnt.h" |
| #include "include/gpu/gl/GrGLConfig.h" |
| |
| /** |
| * Classifies GL contexts by which standard they implement (currently as OpenGL vs. OpenGL ES). |
| */ |
| enum GrGLStandard { |
| kNone_GrGLStandard, |
| kGL_GrGLStandard, |
| kGLES_GrGLStandard, |
| kWebGL_GrGLStandard, |
| }; |
| static const int kGrGLStandardCnt = 4; |
| |
| // The following allow certain interfaces to be turned off at compile time |
| // (for example, to lower code size). |
| #if SK_ASSUME_GL_ES |
| #define GR_IS_GR_GL(standard) false |
| #define GR_IS_GR_GL_ES(standard) true |
| #define GR_IS_GR_WEBGL(standard) false |
| #define SK_DISABLE_GL_INTERFACE 1 |
| #define SK_DISABLE_WEBGL_INTERFACE 1 |
| #elif SK_ASSUME_GL |
| #define GR_IS_GR_GL(standard) true |
| #define GR_IS_GR_GL_ES(standard) false |
| #define GR_IS_GR_WEBGL(standard) false |
| #define SK_DISABLE_GL_ES_INTERFACE 1 |
| #define SK_DISABLE_WEBGL_INTERFACE 1 |
| #elif SK_ASSUME_WEBGL |
| #define GR_IS_GR_GL(standard) false |
| #define GR_IS_GR_GL_ES(standard) false |
| #define GR_IS_GR_WEBGL(standard) true |
| #define SK_DISABLE_GL_ES_INTERFACE 1 |
| #define SK_DISABLE_GL_INTERFACE 1 |
| #else |
| #define GR_IS_GR_GL(standard) (kGL_GrGLStandard == standard) |
| #define GR_IS_GR_GL_ES(standard) (kGLES_GrGLStandard == standard) |
| #define GR_IS_GR_WEBGL(standard) (kWebGL_GrGLStandard == standard) |
| #endif |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * The supported GL formats represented as an enum. Actual support by GrContext depends on GL |
| * context version and extensions. |
| */ |
| enum class GrGLFormat { |
| kUnknown, |
| |
| kRGBA8, |
| kR8, |
| kALPHA8, |
| kLUMINANCE8, |
| kBGRA8, |
| kRGB565, |
| kRGBA16F, |
| kR16F, |
| kRGB8, |
| kRG8, |
| kRGB10_A2, |
| kRGBA4, |
| kSRGB8_ALPHA8, |
| kCOMPRESSED_RGB8_ETC2, |
| kCOMPRESSED_ETC1_RGB8, |
| kR16, |
| kRG16, |
| kRGBA16, |
| kRG16F, |
| kLUMINANCE16F, |
| |
| kLast = kLUMINANCE16F |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| /** |
| * Declares typedefs for all the GL functions used in GrGLInterface |
| */ |
| |
| typedef unsigned int GrGLenum; |
| typedef unsigned char GrGLboolean; |
| typedef unsigned int GrGLbitfield; |
| typedef signed char GrGLbyte; |
| typedef char GrGLchar; |
| typedef short GrGLshort; |
| typedef int GrGLint; |
| typedef int GrGLsizei; |
| typedef int64_t GrGLint64; |
| typedef unsigned char GrGLubyte; |
| typedef unsigned short GrGLushort; |
| typedef unsigned int GrGLuint; |
| typedef uint64_t GrGLuint64; |
| typedef unsigned short int GrGLhalf; |
| typedef float GrGLfloat; |
| typedef float GrGLclampf; |
| typedef double GrGLdouble; |
| typedef double GrGLclampd; |
| typedef void GrGLvoid; |
| #ifdef _WIN64 |
| typedef signed long long int GrGLintptr; |
| typedef signed long long int GrGLsizeiptr; |
| #else |
| typedef signed long int GrGLintptr; |
| typedef signed long int GrGLsizeiptr; |
| #endif |
| typedef void* GrGLeglImage; |
| typedef struct __GLsync* GrGLsync; |
| |
| struct GrGLDrawArraysIndirectCommand { |
| GrGLuint fCount; |
| GrGLuint fInstanceCount; |
| GrGLuint fFirst; |
| GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. |
| }; |
| |
| GR_STATIC_ASSERT(16 == sizeof(GrGLDrawArraysIndirectCommand)); |
| |
| struct GrGLDrawElementsIndirectCommand { |
| GrGLuint fCount; |
| GrGLuint fInstanceCount; |
| GrGLuint fFirstIndex; |
| GrGLuint fBaseVertex; |
| GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. |
| }; |
| |
| GR_STATIC_ASSERT(20 == sizeof(GrGLDrawElementsIndirectCommand)); |
| |
| /** |
| * KHR_debug |
| */ |
| typedef void (GR_GL_FUNCTION_TYPE* GRGLDEBUGPROC)(GrGLenum source, |
| GrGLenum type, |
| GrGLuint id, |
| GrGLenum severity, |
| GrGLsizei length, |
| const GrGLchar* message, |
| const void* userParam); |
| |
| /** |
| * EGL types. |
| */ |
| typedef void* GrEGLImage; |
| typedef void* GrEGLDisplay; |
| typedef void* GrEGLContext; |
| typedef void* GrEGLClientBuffer; |
| typedef unsigned int GrEGLenum; |
| typedef int32_t GrEGLint; |
| typedef unsigned int GrEGLBoolean; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| /** |
| * Types for interacting with GL resources created externally to Skia. GrBackendObjects for GL |
| * textures are really const GrGLTexture*. The fFormat here should be a sized, internal format |
| * for the texture. We will try to use the sized format if the GL Context supports it, otherwise |
| * we will internally fall back to using the base internal formats. |
| */ |
| struct GrGLTextureInfo { |
| #if defined(COBALT) |
| // In C++11, we run into issues when initializing a struct when it has |
| // initializers for non-static members. We must use a constructor instead. |
| GrGLTextureInfo() : fFormat(0) {} |
| GrGLTextureInfo(GrGLenum fTarget, GrGLuint fID, GrGLenum fFormat = 0) |
| : fTarget(fTarget), fID(fID), fFormat(fFormat) {} |
| |
| GrGLenum fTarget; |
| GrGLuint fID; |
| GrGLenum fFormat; |
| #else |
| GrGLenum fTarget; |
| GrGLuint fID; |
| GrGLenum fFormat = 0; |
| #endif |
| |
| bool operator==(const GrGLTextureInfo& that) const { |
| return fTarget == that.fTarget && fID == that.fID && fFormat == that.fFormat; |
| } |
| }; |
| |
| struct GrGLFramebufferInfo { |
| GrGLuint fFBOID; |
| GrGLenum fFormat = 0; |
| |
| bool operator==(const GrGLFramebufferInfo& that) const { |
| return fFBOID == that.fFBOID && fFormat == that.fFormat; |
| } |
| }; |
| |
| #endif |