GrGLUtil.h revision 91bcc94e8710c1ec5126a31cd805a6c64bb3c39d
19c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com/*
29c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com * Copyright 2012 Google Inc.
39c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com *
49c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
59c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com * found in the LICENSE file.
69c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com */
79c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
89c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#ifndef GrGLUtil_DEFINED
99c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GrGLUtil_DEFINED
109c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
119c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#include "gl/GrGLInterface.h"
1291bcc94e8710c1ec5126a31cd805a6c64bb3c39dbsalomon@google.com#include "GrGLDefines.h"
139c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
149c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com////////////////////////////////////////////////////////////////////////////////
159c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
169c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comtypedef uint32_t GrGLVersion;
179c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comtypedef uint32_t GrGLSLVersion;
189c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
199c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_VER(major, minor) ((static_cast<int>(major) << 16) | \
209c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com                                 static_cast<int>(minor))
219c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GLSL_VER(major, minor) ((static_cast<int>(major) << 16) | \
229c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com                                   static_cast<int>(minor))
239c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
249c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com////////////////////////////////////////////////////////////////////////////////
259c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
269c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com/**
279c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com *  Some drivers want the var-int arg to be zero-initialized on input.
289c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com */
299c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_INIT_ZERO     0
309c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_GetIntegerv(gl, e, p)                                            \
319c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    do {                                                                       \
329c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        *(p) = GR_GL_INIT_ZERO;                                                \
339c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        GR_GL_CALL(gl, GetIntegerv(e, p));                                     \
349c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    } while (0)
359c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
369c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_GetFramebufferAttachmentParameteriv(gl, t, a, pname, p)          \
379c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    do {                                                                       \
389c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        *(p) = GR_GL_INIT_ZERO;                                                \
399c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        GR_GL_CALL(gl, GetFramebufferAttachmentParameteriv(t, a, pname, p));   \
409c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    } while (0)
419c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
429c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_GetRenderbufferParameteriv(gl, t, pname, p)                      \
439c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    do {                                                                       \
449c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        *(p) = GR_GL_INIT_ZERO;                                                \
459c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        GR_GL_CALL(gl, GetRenderbufferParameteriv(t, pname, p));               \
469c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    } while (0)
479c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#define GR_GL_GetTexLevelParameteriv(gl, t, l, pname, p)                       \
489c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    do {                                                                       \
499c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        *(p) = GR_GL_INIT_ZERO;                                                \
509c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com        GR_GL_CALL(gl, GetTexLevelParameteriv(t, l, pname, p));                \
519c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com    } while (0)
529c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
539c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com////////////////////////////////////////////////////////////////////////////////
549c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
559c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com/**
569c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com * Helpers for glGetString()
579c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com */
589c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
599c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com// these variants assume caller already has a string from glGetString()
609c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLVersion GrGLGetVersionFromString(const char* versionString);
619c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLBinding GrGLGetBindingInUseFromString(const char* versionString);
629c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString);
639c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.combool GrGLHasExtensionFromString(const char* ext, const char* extensionString);
649c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
659c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com// these variants call glGetString()
669c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.combool GrGLHasExtension(const GrGLInterface*, const char* ext);
679c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLBinding GrGLGetBindingInUse(const GrGLInterface*);
689c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLVersion GrGLGetVersion(const GrGLInterface*);
699c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comGrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface*);
709c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
719c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com/**
729c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com * Helpers for glGetError()
739c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com */
749c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
759c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comextern void GrGLCheckErr(const GrGLInterface* gl,
769c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com                         const char* location,
779c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com                         const char* call);
789c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
799c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.comextern void GrGLClearErr(const GrGLInterface* gl);
809c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com
819c1f1ac5d399c73f5f331bdf7b392ea7f0c44dafbsalomon@google.com#endif
82