Index: src/gpu/gl/GrGLContext.cpp |
diff --git a/src/gpu/gl/GrGLContext.cpp b/src/gpu/gl/GrGLContext.cpp |
index fc8b195fd37858d48ac27182a75dd818a10bdb3d..8115687093b59115b3a90f76829ecb3fc90f100a 100644 |
--- a/src/gpu/gl/GrGLContext.cpp |
+++ b/src/gpu/gl/GrGLContext.cpp |
@@ -9,78 +9,63 @@ |
//////////////////////////////////////////////////////////////////////////////// |
-GrGLContextInfo& GrGLContextInfo::operator= (const GrGLContextInfo& that) { |
- fInterface.reset(SkSafeRef(that.fInterface.get())); |
- fGLVersion = that.fGLVersion; |
- fGLSLGeneration = that.fGLSLGeneration; |
- fVendor = that.fVendor; |
- fRenderer = that.fRenderer; |
- fIsMesa = that.fIsMesa; |
- fIsChromium = that.fIsChromium; |
- *fGLCaps = *that.fGLCaps.get(); |
- return *this; |
-} |
- |
-bool GrGLContextInfo::initialize(const GrGLInterface* interface) { |
- this->reset(); |
- // We haven't validated the GrGLInterface yet, so check for GetString |
- // function pointer |
- if (interface->fFunctions.fGetString) { |
- const GrGLubyte* verUByte; |
- GR_GL_CALL_RET(interface, verUByte, GetString(GR_GL_VERSION)); |
- const char* ver = reinterpret_cast<const char*>(verUByte); |
- |
- const GrGLubyte* rendererUByte; |
- GR_GL_CALL_RET(interface, rendererUByte, GetString(GR_GL_RENDERER)); |
- const char* renderer = reinterpret_cast<const char*>(rendererUByte); |
+GrGLContext* GrGLContext::Create(const GrGLInterface* interface) { |
+ // We haven't validated the GrGLInterface yet, so check for GetString function pointer |
+ if (!interface->fFunctions.fGetString) { |
+ return NULL; |
+ } |
+ ConstructorArgs args; |
+ args.fInterface = interface; |
- if (interface->validate()) { |
+ const GrGLubyte* verUByte; |
+ GR_GL_CALL_RET(interface, verUByte, GetString(GR_GL_VERSION)); |
+ const char* ver = reinterpret_cast<const char*>(verUByte); |
- fGLVersion = GrGLGetVersionFromString(ver); |
- if (GR_GL_INVALID_VER == fGLVersion) { |
- return false; |
- } |
+ const GrGLubyte* rendererUByte; |
+ GR_GL_CALL_RET(interface, rendererUByte, GetString(GR_GL_RENDERER)); |
+ const char* renderer = reinterpret_cast<const char*>(rendererUByte); |
- if (!GrGetGLSLGeneration(interface, &fGLSLGeneration)) { |
- return false; |
- } |
+ if (!interface->validate()) { |
+ return NULL; |
+ } |
- fVendor = GrGLGetVendor(interface); |
+ args.fGLVersion = GrGLGetVersionFromString(ver); |
+ if (GR_GL_INVALID_VER == args.fGLVersion) { |
+ return NULL; |
+ } |
- /* |
- * Qualcomm drivers have a horrendous bug with some drivers. Though they claim to |
- * support GLES 3.00, some perfectly valid GLSL300 shaders will only compile with |
- * #version 100, and will fail to compile with #version 300 es. In the long term, we |
- * need to lock this down to a specific driver version. |
- */ |
- if (kQualcomm_GrGLVendor == fVendor) { |
- fGLSLGeneration = k110_GrGLSLGeneration; |
- } |
+ if (!GrGetGLSLGeneration(interface, &args.fGLSLGeneration)) { |
+ return NULL; |
+ } |
- fRenderer = GrGLGetRendererFromString(renderer); |
+ args.fVendor = GrGLGetVendor(interface); |
- fIsMesa = GrGLIsMesaFromVersionString(ver); |
+ /* |
+ * Qualcomm drivers have a horrendous bug with some drivers. Though they claim to |
+ * support GLES 3.00, some perfectly valid GLSL300 shaders will only compile with |
+ * #version 100, and will fail to compile with #version 300 es. In the long term, we |
+ * need to lock this down to a specific driver version. |
+ */ |
+ if (kQualcomm_GrGLVendor == args.fVendor) { |
+ args.fGLSLGeneration = k110_GrGLSLGeneration; |
+ } |
- fIsChromium = GrGLIsChromiumFromRendererString(renderer); |
+ args.fRenderer = GrGLGetRendererFromString(renderer); |
- // This must occur before caps init. |
- fInterface.reset(SkRef(interface)); |
+ args.fIsMesa = GrGLIsMesaFromVersionString(ver); |
- return fGLCaps->init(*this, interface); |
- } |
- } |
- return false; |
+ args.fIsChromium = GrGLIsChromiumFromRendererString(renderer); |
+ return SkNEW_ARGS(GrGLContext, (args)); |
} |
-bool GrGLContextInfo::isInitialized() const { return SkToBool(fInterface.get()); } |
+GrGLContextInfo::GrGLContextInfo(const ConstructorArgs& args) { |
+ fInterface.reset(SkRef(args.fInterface)); |
+ fGLVersion = args.fGLVersion; |
+ fGLSLGeneration = args.fGLSLGeneration; |
+ fVendor = args.fVendor; |
+ fRenderer = args.fRenderer; |
+ fIsMesa = args.fIsMesa; |
+ fIsChromium = args.fIsChromium; |
-void GrGLContextInfo::reset() { |
- fInterface.reset(NULL); |
- fGLVersion = GR_GL_VER(0, 0); |
- fGLSLGeneration = static_cast<GrGLSLGeneration>(0); |
- fVendor = kOther_GrGLVendor; |
- fRenderer = kOther_GrGLRenderer; |
- fIsMesa = false; |
- fIsChromium = false; |
- fGLCaps->reset(); |
+ fGLCaps.reset(SkNEW_ARGS(GrGLCaps, (*this, fInterface))); |
} |