aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/fiddle/mesa_context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/fiddle/mesa_context.cpp')
-rw-r--r--tools/fiddle/mesa_context.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/tools/fiddle/mesa_context.cpp b/tools/fiddle/mesa_context.cpp
new file mode 100644
index 0000000000..70ee62bcc8
--- /dev/null
+++ b/tools/fiddle/mesa_context.cpp
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "fiddle_main.h"
+
+#include <GL/osmesa.h>
+
+// create_grcontext implementation for Mesa.
+sk_sp<GrContext> create_grcontext() {
+ // We just leak the OSMesaContext... the process will die soon anyway.
+ if (OSMesaContext osMesaContext = OSMesaCreateContextExt(OSMESA_BGRA, 0, 0, 0, nullptr)) {
+ static uint32_t buffer[16 * 16];
+ OSMesaMakeCurrent(osMesaContext, &buffer, GL_UNSIGNED_BYTE, 16, 16);
+ }
+
+ auto osmesa_get = [](void* ctx, const char name[]) {
+ SkASSERT(nullptr == ctx);
+ SkASSERT(OSMesaGetCurrentContext());
+ return OSMesaGetProcAddress(name);
+ };
+ sk_sp<const GrGLInterface> mesa(GrGLAssembleInterface(nullptr, osmesa_get));
+ if (!mesa) {
+ return nullptr;
+ }
+ return sk_sp<GrContext>(GrContext::Create(
+ kOpenGL_GrBackend,
+ reinterpret_cast<intptr_t>(mesa.get())));
+}