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