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 kLUMINANCE8_ALPHA8, 66 kBGRA8, 67 kRGB565, 68 kRGBA16F, 69 kR16F, 70 kRGB8, 71 kRGBX8, 72 kRG8, 73 kRGB10_A2, 74 kRGBA4, 75 kSRGB8_ALPHA8, 76 kCOMPRESSED_ETC1_RGB8, 77 kCOMPRESSED_RGB8_ETC2, 78 kCOMPRESSED_RGB8_BC1, 79 kCOMPRESSED_RGBA8_BC1, 80 kR16, 81 kRG16, 82 kRGBA16, 83 kRG16F, 84 kLUMINANCE16F, 85 86 kLastColorFormat = kLUMINANCE16F, 87 88 // Depth/Stencil formats 89 kSTENCIL_INDEX8, 90 kSTENCIL_INDEX16, 91 kDEPTH24_STENCIL8, 92 93 kLast = kDEPTH24_STENCIL8 94 }; 95 96 /////////////////////////////////////////////////////////////////////////////// 97 /** 98 * Declares typedefs for all the GL functions used in GrGLInterface 99 */ 100 101 typedef unsigned int GrGLenum; 102 typedef unsigned char GrGLboolean; 103 typedef unsigned int GrGLbitfield; 104 typedef signed char GrGLbyte; 105 typedef char GrGLchar; 106 typedef short GrGLshort; 107 typedef int GrGLint; 108 typedef int GrGLsizei; 109 typedef int64_t GrGLint64; 110 typedef unsigned char GrGLubyte; 111 typedef unsigned short GrGLushort; 112 typedef unsigned int GrGLuint; 113 typedef uint64_t GrGLuint64; 114 typedef unsigned short int GrGLhalf; 115 typedef float GrGLfloat; 116 typedef float GrGLclampf; 117 typedef double GrGLdouble; 118 typedef double GrGLclampd; 119 typedef void GrGLvoid; 120 #ifdef _WIN64 121 typedef signed long long int GrGLintptr; 122 typedef signed long long int GrGLsizeiptr; 123 #else 124 typedef signed long int GrGLintptr; 125 typedef signed long int GrGLsizeiptr; 126 #endif 127 typedef void* GrGLeglImage; 128 typedef struct __GLsync* GrGLsync; 129 130 struct GrGLDrawArraysIndirectCommand { 131 GrGLuint fCount; 132 GrGLuint fInstanceCount; 133 GrGLuint fFirst; 134 GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. 135 }; 136 137 // static_asserts must have messages in this file because its included in C++14 client code. 138 static_assert(16 == sizeof(GrGLDrawArraysIndirectCommand), ""); 139 140 struct GrGLDrawElementsIndirectCommand { 141 GrGLuint fCount; 142 GrGLuint fInstanceCount; 143 GrGLuint fFirstIndex; 144 GrGLuint fBaseVertex; 145 GrGLuint fBaseInstance; // Requires EXT_base_instance on ES. 146 }; 147 148 static_assert(20 == sizeof(GrGLDrawElementsIndirectCommand), ""); 149 150 /** 151 * KHR_debug 152 */ 153 typedef void (GR_GL_FUNCTION_TYPE* GRGLDEBUGPROC)(GrGLenum source, 154 GrGLenum type, 155 GrGLuint id, 156 GrGLenum severity, 157 GrGLsizei length, 158 const GrGLchar* message, 159 const void* userParam); 160 161 /** 162 * EGL types. 163 */ 164 typedef void* GrEGLImage; 165 typedef void* GrEGLDisplay; 166 typedef void* GrEGLContext; 167 typedef void* GrEGLClientBuffer; 168 typedef unsigned int GrEGLenum; 169 typedef int32_t GrEGLint; 170 typedef unsigned int GrEGLBoolean; 171 172 /////////////////////////////////////////////////////////////////////////////// 173 /** 174 * Types for interacting with GL resources created externally to Skia. GrBackendObjects for GL 175 * textures are really const GrGLTexture*. The fFormat here should be a sized, internal format 176 * for the texture. We will try to use the sized format if the GL Context supports it, otherwise 177 * we will internally fall back to using the base internal formats. 178 */ 179 struct GrGLTextureInfo { 180 GrGLenum fTarget; 181 GrGLuint fID; 182 GrGLenum fFormat = 0; 183 184 bool operator==(const GrGLTextureInfo& that) const { 185 return fTarget == that.fTarget && fID == that.fID && fFormat == that.fFormat; 186 } 187 }; 188 189 struct GrGLFramebufferInfo { 190 GrGLuint fFBOID; 191 GrGLenum fFormat = 0; 192 193 bool operator==(const GrGLFramebufferInfo& that) const { 194 return fFBOID == that.fFBOID && fFormat == that.fFormat; 195 } 196 }; 197 198 struct GrGLSurfaceInfo { 199 uint32_t fSampleCount = 1; 200 uint32_t fLevelCount = 0; 201 GrProtected fProtected = GrProtected::kNo; 202 203 GrGLenum fTarget = 0; 204 GrGLenum fFormat = 0; 205 }; 206 207 #endif 208