Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Unified Diff: include/gpu/GrContextFactory.h

Issue 144003006: Turn NVPR on by default (but off in tools). (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fix vs 2010 x86 debugger builds Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gyp/gpu.gyp ('k') | include/gpu/gl/GrGLConfig.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/gpu/GrContextFactory.h
diff --git a/include/gpu/GrContextFactory.h b/include/gpu/GrContextFactory.h
index 389c398c7c5720166c493503879d9e34ce687b93..333afd29f6b71b0346079346ded27307bc673f4a 100644
--- a/include/gpu/GrContextFactory.h
+++ b/include/gpu/GrContextFactory.h
@@ -26,12 +26,15 @@
* GrContexts backed by different types of GL contexts. It manages creating the
* GL context and a GrContext that uses it. The GL/Gr contexts persist until the
* factory is destroyed (though the caller can always grab a ref on the returned
- * GrContext to make it outlive the factory).
+ * Gr and GL contexts to make them outlive the factory).
*/
class GrContextFactory : public SkNoncopyable {
public:
/**
- * Types of GL contexts supported.
+ * Types of GL contexts supported. For historical and testing reasons the native GrContext will
+ * not use "GL_NV_path_rendering" even when the driver supports it. There is a separate context
+ * type that does not remove NVPR support and which will fail when the driver does not support
+ * the extension.
*/
enum GLContextType {
kNative_GLContextType,
@@ -41,6 +44,9 @@ public:
#if SK_MESA
kMESA_GLContextType,
#endif
+ /** Similar to kNative but does not filter NVPR. It will fail if the GL driver does not
+ support NVPR */
+ kNVPR_GLContextType,
kNull_GLContextType,
kDebug_GLContextType,
@@ -73,6 +79,8 @@ public:
case kMESA_GLContextType:
return "mesa";
#endif
+ case kNVPR_GLContextType:
+ return "nvpr";
case kDebug_GLContextType:
return "debug";
default:
@@ -87,6 +95,7 @@ public:
void destroyContexts() {
for (int i = 0; i < fContexts.count(); ++i) {
+ fContexts[i].fGLContext->makeCurrent();
fContexts[i].fGrContext->unref();
fContexts[i].fGLContext->unref();
}
@@ -107,6 +116,7 @@ public:
SkAutoTUnref<SkGLContextHelper> glCtx;
SkAutoTUnref<GrContext> grCtx;
switch (type) {
+ case kNVPR_GLContextType: // fallthru
case kNative_GLContextType:
glCtx.reset(SkNEW(SkNativeGLContext));
break;
@@ -134,7 +144,22 @@ public:
if (!glCtx.get()->init(kBogusSize, kBogusSize)) {
return NULL;
}
- GrBackendContext p3dctx = reinterpret_cast<GrBackendContext>(glCtx.get()->gl());
+
+ // Ensure NVPR is available for the NVPR type and block it from other types.
+ SkAutoTUnref<const GrGLInterface> glInterface(SkRef(glCtx.get()->gl()));
+ if (kNVPR_GLContextType == type) {
+ if (!glInterface->hasExtension("GL_NV_path_rendering")) {
+ return NULL;
+ }
+ } else {
+ glInterface.reset(GrGLInterfaceRemoveNVPR(glInterface));
+ if (!glInterface) {
+ return NULL;
+ }
+ }
+
+ glCtx->makeCurrent();
+ GrBackendContext p3dctx = reinterpret_cast<GrBackendContext>(glInterface.get());
grCtx.reset(GrContext::Create(kOpenGL_GrBackend, p3dctx));
if (!grCtx.get()) {
return NULL;
« no previous file with comments | « gyp/gpu.gyp ('k') | include/gpu/gl/GrGLConfig.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698