diff options
Diffstat (limited to 'tools/fiddle/mesa_context.cpp')
-rw-r--r-- | tools/fiddle/mesa_context.cpp | 32 |
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()))); +} |