GrGLUtil.h revision 68288c289cc866c999d73681f5dd79f2bf524c15
1/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrGLUtil_DEFINED
9#define GrGLUtil_DEFINED
10
11#include "gl/GrGLInterface.h"
12
13////////////////////////////////////////////////////////////////////////////////
14
15typedef uint32_t GrGLVersion;
16typedef uint32_t GrGLSLVersion;
17
18#define GR_GL_VER(major, minor) ((static_cast<int>(major) << 16) | \
19                                 static_cast<int>(minor))
20#define GR_GLSL_VER(major, minor) ((static_cast<int>(major) << 16) | \
21                                   static_cast<int>(minor))
22
23////////////////////////////////////////////////////////////////////////////////
24
25/**
26 *  Some drivers want the var-int arg to be zero-initialized on input.
27 */
28#define GR_GL_INIT_ZERO     0
29#define GR_GL_GetIntegerv(gl, e, p)                                            \
30    do {                                                                       \
31        *(p) = GR_GL_INIT_ZERO;                                                \
32        GR_GL_CALL(gl, GetIntegerv(e, p));                                     \
33    } while (0)
34
35#define GR_GL_GetFramebufferAttachmentParameteriv(gl, t, a, pname, p)          \
36    do {                                                                       \
37        *(p) = GR_GL_INIT_ZERO;                                                \
38        GR_GL_CALL(gl, GetFramebufferAttachmentParameteriv(t, a, pname, p));   \
39    } while (0)
40
41#define GR_GL_GetRenderbufferParameteriv(gl, t, pname, p)                      \
42    do {                                                                       \
43        *(p) = GR_GL_INIT_ZERO;                                                \
44        GR_GL_CALL(gl, GetRenderbufferParameteriv(t, pname, p));               \
45    } while (0)
46#define GR_GL_GetTexLevelParameteriv(gl, t, l, pname, p)                       \
47    do {                                                                       \
48        *(p) = GR_GL_INIT_ZERO;                                                \
49        GR_GL_CALL(gl, GetTexLevelParameteriv(t, l, pname, p));                \
50    } while (0)
51
52////////////////////////////////////////////////////////////////////////////////
53
54/**
55 * Helpers for glGetString()
56 */
57
58// these variants assume caller already has a string from glGetString()
59GrGLVersion GrGLGetVersionFromString(const char* versionString);
60GrGLBinding GrGLGetBindingInUseFromString(const char* versionString);
61GrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString);
62bool GrGLHasExtensionFromString(const char* ext, const char* extensionString);
63
64// these variants call glGetString()
65bool GrGLHasExtension(const GrGLInterface*, const char* ext);
66GrGLBinding GrGLGetBindingInUse(const GrGLInterface*);
67GrGLVersion GrGLGetVersion(const GrGLInterface*);
68GrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface*);
69
70/**
71 * Helpers for glGetError()
72 */
73
74extern void GrGLCheckErr(const GrGLInterface* gl,
75                         const char* location,
76                         const char* call);
77
78extern void GrGLClearErr(const GrGLInterface* gl);
79
80#endif
81