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