GrGLContext.h revision 7839ce1af63bf12fe7b3caa866970bbbb3afb13d
180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 2096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Copyright 2013 Google Inc. 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#ifndef GrGLContext_DEFINED 10096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#define GrGLContext_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#include "gl/GrGLExtensions.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "gl/GrGLInterface.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrGLCaps.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrGLSL.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrGLUtil.h" 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 21096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Encapsulates information about an OpenGL context including the OpenGL 22096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * version, the GrGLBinding type of the context, and GLSL version. 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass GrGLContextInfo { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 27096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Default constructor 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLContextInfo() { 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fGLCaps.reset(SkNEW(GrGLCaps)); 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger this->reset(); 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copies a GrGLContextInfo 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 37096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContextInfo& operator= (const GrGLContextInfo& ctxInfo); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Initializes a GrGLContextInfo from a GrGLInterface and the currently 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * bound OpenGL context accessible by the GrGLInterface. 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool initialize(const GrGLInterface* interface); 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool isInitialized() const; 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLBinding binding() const { return fBindingInUse; } 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLVersion version() const { return fGLVersion; } 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrGLSLGeneration glslGeneration() const { return fGLSLGeneration; } 49363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger GrGLVendor vendor() const { return fVendor; } 507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const GrGLCaps* caps() const { return fGLCaps.get(); } 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLCaps* caps() { return fGLCaps; } 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const GrGLExtensions& extensions() const { return fExtensions; } 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Shortcut for extensions().has(ext); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool hasExtension(const char* ext) const { 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (!this->isInitialized()) { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 61096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger return fExtensions.has(ext); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 64096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 65096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Reset the information 66096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void reset(); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 69096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerprivate: 70096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 717839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLBinding fBindingInUse; 727839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLVersion fGLVersion; 737839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLSLGeneration fGLSLGeneration; 747839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLVendor fVendor; 757839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger GrGLExtensions fExtensions; 767839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkAutoTUnref<GrGLCaps> fGLCaps; 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 79096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger/** 80096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Encapsulates the GrGLInterface used to make GL calls plus information 81096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * about the context (via GrGLContextInfo). 82096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 83096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerclass GrGLContext { 84096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerpublic: 85096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 86096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Default constructor 87096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 88096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContext() { this->reset(); } 89096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 90096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 91096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Creates a GrGLContext from a GrGLInterface and the currently 92096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * bound OpenGL context accessible by the GrGLInterface. 93096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 94096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger explicit GrGLContext(const GrGLInterface* interface); 95096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 96096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 97096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Copies a GrGLContext 98096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 99096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContext(const GrGLContext& ctx); 100096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 101096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger ~GrGLContext() { GrSafeUnref(fInterface); } 102096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 103096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 104096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Copies a GrGLContext 105096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 106096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContext& operator= (const GrGLContext& ctx); 107096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 108096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger /** 109096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Initializes a GrGLContext from a GrGLInterface and the currently 110096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * bound OpenGL context accessible by the GrGLInterface. 111096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */ 112096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger bool initialize(const GrGLInterface* interface); 113096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger bool isInitialized() const { return fInfo.isInitialized(); } 114096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 115096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger const GrGLInterface* interface() const { return fInterface; } 116096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger const GrGLContextInfo& info() const { return fInfo; } 117096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContextInfo& info() { return fInfo; } 118096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 119096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerprivate: 120096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger void reset(); 121096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 122096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger const GrGLInterface* fInterface; 123096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger GrGLContextInfo fInfo; 124096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}; 125096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 127