1 2 /* 3 * Copyright 2015 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #ifndef GrGLTypes_DEFINED 10 #define GrGLTypes_DEFINED 11 12 #include "include/core/SkRefCnt.h" 13 #include "include/gpu/gl/GrGLConfig.h" 14 15 /** 16 * Classifies GL contexts by which standard they implement (currently as OpenGL vs. OpenGL ES). 17 */ 18 enum GrGLStandard { 19 kNone_GrGLStandard, 20 kGL_GrGLStandard, 21 kGLES_GrGLStandard, 22 kWebGL_GrGLStandard, 23 }; 24 static const int kGrGLStandardCnt = 4; 25 26 // The following allow certain interfaces to be turned off at compile time 27 // (for example, to lower code size). 28 #if SK_ASSUME_GL_ES 29 #define GR_IS_GR_GL(standard) false 30 #define GR_IS_GR_GL_ES(standard) true 31 #define GR_IS_GR_WEBGL(standard) false 32 #define SK_DISABLE_GL_INTERFACE 1 33 #define SK_DISABLE_WEBGL_INTERFACE 1 34 #elif SK_ASSUME_GL 35 #define GR_IS_GR_GL(standard) true 36 #define GR_IS_GR_GL_ES(standard) false 37 #define GR_IS_GR_WEBGL(standard) false 38 #define SK_DISABLE_GL_ES_INTERFACE 1 39 #define SK_DISABLE_WEBGL_INTERFACE 1 40 #elif SK_ASSUME_WEBGL 41 #define GR_IS_GR_GL(standard) false 42 #define GR_IS_GR_GL_ES(standard) false 43 #define GR_IS_GR_WEBGL(standard) true 44 #define SK_DISABLE_GL_ES_INTERFACE 1 45 #define SK_DISABLE_GL_INTERFACE 1 46 #else 47 #define GR_IS_GR_GL(standard) (kGL_GrGLStandard == standard) 48 #define GR_IS_GR_GL_ES(standard) (kGLES_GrGLStandard == standard) 49 #define GR_IS_GR_WEBGL(standard) (kWebGL_GrGLStandard == standard) 50 #endif 51 52 /////////////////////////////////////////////////////////////////////////////// 53 54 /** 55 * The supported GL formats represented as an enum. Actual support by GrContext depends on GL 56 * context version and extensions. 57 */ 58 enum class GrGLFormat { 59 kUnknown, 60 61 kRGBA8, 62 kR8, 63 kALPHA8, 64 kLUMINANCE8, 65 kBGRA8, 66 kRGB565, 67 kRGBA16F, 68 kR16F, 69 kRGB8, 70 kRG8, 71 kRGB10_A2, 72 kRGBA4, 73 kRGBA32F, 74 kSRGB8_ALPHA8, 75 kCOMPRESSED_RGB8_ETC2, 76 kCOMPRESSED_ETC1_RGB8, 77 kR16, 78 kRG16, 79 kRGBA16, 80 kRG16F, 81 kLUMINANCE16F, 82 83 kLast = kLUMINANCE16F 84 }; 85 86 /////////////////////////////////////////////////////////////////////////////// 87 /** 88 * Declares typedefs for all the GL functions used in GrGLInterface 89 */ 90 91 typedef unsigned int GrGLenum; 92 typedef unsigned char GrGLboolean; 93 typedef unsigned int GrGLbitfield; 94 typedef signed char GrGLbyte; 95 typedef char GrGLchar; 96 typedef short GrGLshort; 97 typedef int GrGLint; 98 typedef int GrGLsizei; 99 typedef int64_t GrGLint64; 100 typedef unsigned char GrGLubyte; 101 typedef unsigned short GrGLushort; 102 typedef unsigned int GrGLuint; 103 typedef uint64_t GrGLuint64; 104 typedef unsigned short int GrGLhalf; 105 typedef float GrGLfloat; 106 typedef float GrGLclampf; 107 typedef double GrGLdouble; 108 typedef double GrGLclampd; 109 typedef void GrGLvoid; 110 #ifdef _WIN64 111 typedef signed long long int GrGLintptr; 112 typedef signed long long int GrGLsizeiptr; 113 #else 114 typedef signed long int GrGLintptr; 115 typedef signed long int GrGLsizeiptr; 116 #endif 117 typedef void* GrGLeglImage; 118 typedef struct __GLsync* GrGLsync; 119 120 struct GrGLDrawArraysIndirectCommand { 121 GrGLuint fCount; 122 GrGLuint fInstanceCount; 123 GrGLuint fFirst; 124 GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. 125 }; 126 127 GR_STATIC_ASSERT(16 == sizeof(GrGLDrawArraysIndirectCommand)); 128 129 struct GrGLDrawElementsIndirectCommand { 130 GrGLuint fCount; 131 GrGLuint fInstanceCount; 132 GrGLuint fFirstIndex; 133 GrGLuint fBaseVertex; 134 GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. 135 }; 136 137 GR_STATIC_ASSERT(20 == sizeof(GrGLDrawElementsIndirectCommand)); 138 139 /** 140 * KHR_debug 141 */ 142 typedef void (GR_GL_FUNCTION_TYPE* GRGLDEBUGPROC)(GrGLenum source, 143 GrGLenum type, 144 GrGLuint id, 145 GrGLenum severity, 146 GrGLsizei length, 147 const GrGLchar* message, 148 const void* userParam); 149 150 /** 151 * EGL types. 152 */ 153 typedef void* GrEGLImage; 154 typedef void* GrEGLDisplay; 155 typedef void* GrEGLContext; 156 typedef void* GrEGLClientBuffer; 157 typedef unsigned int GrEGLenum; 158 typedef int32_t GrEGLint; 159 typedef unsigned int GrEGLBoolean; 160 161 /////////////////////////////////////////////////////////////////////////////// 162 /** 163 * Types for interacting with GL resources created externally to Skia. GrBackendObjects for GL 164 * textures are really const GrGLTexture*. The fFormat here should be a sized, internal format 165 * for the texture. We will try to use the sized format if the GL Context supports it, otherwise 166 * we will internally fall back to using the base internal formats. 167 */ 168 struct GrGLTextureInfo { 169 GrGLenum fTarget; 170 GrGLuint fID; 171 GrGLenum fFormat = 0; 172 173 bool operator==(const GrGLTextureInfo& that) const { 174 return fTarget == that.fTarget && fID == that.fID && fFormat == that.fFormat; 175 } 176 }; 177 178 struct GrGLFramebufferInfo { 179 GrGLuint fFBOID; 180 GrGLenum fFormat = 0; 181 182 bool operator==(const GrGLFramebufferInfo& that) const { 183 return fFBOID == that.fFBOID && fFormat == that.fFormat; 184 } 185 }; 186 187 #endif 188