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

Unified Diff: src/gpu/gl/angle/SkANGLEGLContext.cpp

Issue 1815823002: Move SkGLContext and some GrGLInterface implementations to skgputest module (Closed) Base URL: https://chromium.googlesource.com/skia.git@debugobject
Patch Set: fix windows and android? Created 4 years, 9 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
Index: src/gpu/gl/angle/SkANGLEGLContext.cpp
diff --git a/src/gpu/gl/angle/SkANGLEGLContext.cpp b/src/gpu/gl/angle/SkANGLEGLContext.cpp
deleted file mode 100644
index c6ea44381f5e3ced522f5ae40bdbc7340a2ad515..0000000000000000000000000000000000000000
--- a/src/gpu/gl/angle/SkANGLEGLContext.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "gl/angle/SkANGLEGLContext.h"
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-#include "gl/GrGLDefines.h"
-#include "gl/GrGLUtil.h"
-
-#define EGL_PLATFORM_ANGLE_ANGLE 0x3202
-#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
-#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
-#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
-#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
-
-void* SkANGLEGLContext::GetD3DEGLDisplay(void* nativeDisplay, bool useGLBackend) {
- PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT;
- eglGetPlatformDisplayEXT =
- (PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
-
- if (!eglGetPlatformDisplayEXT) {
- return eglGetDisplay(static_cast<EGLNativeDisplayType>(nativeDisplay));
- }
-
- EGLDisplay display = EGL_NO_DISPLAY;
- if (useGLBackend) {
- // Try for an ANGLE D3D11 context, fall back to D3D9.
- EGLint attribs[3] = {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
- EGL_NONE
- };
- display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, nativeDisplay, attribs);
- } else {
- // Try for an ANGLE D3D11 context, fall back to D3D9, and finally GL.
- EGLint attribs[3][3] = {
- {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
- EGL_NONE
- },
- {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
- EGL_NONE
- },
- {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
- EGL_NONE
- }
- };
- for (int i = 0; i < 3 && display == EGL_NO_DISPLAY; ++i) {
- display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,nativeDisplay, attribs[i]);
- }
- }
- return display;
-}
-
-SkANGLEGLContext::SkANGLEGLContext(bool useGLBackend)
- : fContext(EGL_NO_CONTEXT)
- , fDisplay(EGL_NO_DISPLAY)
- , fSurface(EGL_NO_SURFACE) {
-
- EGLint numConfigs;
- static const EGLint configAttribs[] = {
- EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
- EGL_RED_SIZE, 8,
- EGL_GREEN_SIZE, 8,
- EGL_BLUE_SIZE, 8,
- EGL_ALPHA_SIZE, 8,
- EGL_NONE
- };
-
- fIsGLBackend = useGLBackend;
- fDisplay = GetD3DEGLDisplay(EGL_DEFAULT_DISPLAY, useGLBackend);
- if (EGL_NO_DISPLAY == fDisplay) {
- SkDebugf("Could not create EGL display!");
- return;
- }
-
- EGLint majorVersion;
- EGLint minorVersion;
- eglInitialize(fDisplay, &majorVersion, &minorVersion);
-
- EGLConfig surfaceConfig;
- eglChooseConfig(fDisplay, configAttribs, &surfaceConfig, 1, &numConfigs);
-
- static const EGLint contextAttribs[] = {
- EGL_CONTEXT_CLIENT_VERSION, 2,
- EGL_NONE
- };
- fContext = eglCreateContext(fDisplay, surfaceConfig, nullptr, contextAttribs);
-
-
- static const EGLint surfaceAttribs[] = {
- EGL_WIDTH, 1,
- EGL_HEIGHT, 1,
- EGL_NONE
- };
-
- fSurface = eglCreatePbufferSurface(fDisplay, surfaceConfig, surfaceAttribs);
-
- eglMakeCurrent(fDisplay, fSurface, fSurface, fContext);
-
- SkAutoTUnref<const GrGLInterface> gl(GrGLCreateANGLEInterface());
- if (nullptr == gl.get()) {
- SkDebugf("Could not create ANGLE GL interface!\n");
- this->destroyGLContext();
- return;
- }
- if (!gl->validate()) {
- SkDebugf("Could not validate ANGLE GL interface!\n");
- this->destroyGLContext();
- return;
- }
-
- this->init(gl.release());
-}
-
-SkANGLEGLContext::~SkANGLEGLContext() {
- this->teardown();
- this->destroyGLContext();
-}
-
-GrEGLImage SkANGLEGLContext::texture2DToEGLImage(GrGLuint texID) const {
- if (!this->gl()->hasExtension("EGL_KHR_gl_texture_2D_image")) {
- return GR_EGL_NO_IMAGE;
- }
- GrEGLImage img;
- GrEGLint attribs[] = { GR_EGL_GL_TEXTURE_LEVEL, 0,
- GR_EGL_IMAGE_PRESERVED, GR_EGL_TRUE,
- GR_EGL_NONE };
- // 64 bit cast is to shut Visual C++ up about casting 32 bit value to a pointer.
- GrEGLClientBuffer clientBuffer = reinterpret_cast<GrEGLClientBuffer>((uint64_t)texID);
- GR_GL_CALL_RET(this->gl(), img,
- EGLCreateImage(fDisplay, fContext, GR_EGL_GL_TEXTURE_2D, clientBuffer,
- attribs));
- return img;
-}
-
-void SkANGLEGLContext::destroyEGLImage(GrEGLImage image) const {
- GR_GL_CALL(this->gl(), EGLDestroyImage(fDisplay, image));
-}
-
-GrGLuint SkANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const {
- GrGLClearErr(this->gl());
- if (!this->gl()->hasExtension("GL_OES_EGL_image_external")) {
- return 0;
- }
- typedef GrGLvoid (*EGLImageTargetTexture2DProc)(GrGLenum, GrGLeglImage);
-
- EGLImageTargetTexture2DProc glEGLImageTargetTexture2D =
- (EGLImageTargetTexture2DProc)eglGetProcAddress("glEGLImageTargetTexture2DOES");
- if (!glEGLImageTargetTexture2D) {
- return 0;
- }
- GrGLuint texID;
- GR_GL_CALL(this->gl(), GenTextures(1, &texID));
- if (!texID) {
- return 0;
- }
- GR_GL_CALL(this->gl(), BindTexture(GR_GL_TEXTURE_EXTERNAL, texID));
- if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) {
- GR_GL_CALL(this->gl(), DeleteTextures(1, &texID));
- return 0;
- }
- glEGLImageTargetTexture2D(GR_GL_TEXTURE_EXTERNAL, image);
- if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) {
- GR_GL_CALL(this->gl(), DeleteTextures(1, &texID));
- return 0;
- }
- return texID;
-}
-
-SkGLContext* SkANGLEGLContext::createNew() const {
-#ifdef SK_BUILD_FOR_WIN
- SkGLContext* ctx = fIsGLBackend ? SkANGLEGLContext::CreateOpenGL()
- : SkANGLEGLContext::CreateDirectX();
-#else
- SkGLContext* ctx = SkANGLEGLContext::CreateOpenGL();
-#endif
- if (ctx) {
- ctx->makeCurrent();
- }
- return ctx;
-}
-
-void SkANGLEGLContext::destroyGLContext() {
- if (fDisplay) {
- eglMakeCurrent(fDisplay, 0, 0, 0);
-
- if (fContext) {
- eglDestroyContext(fDisplay, fContext);
- fContext = EGL_NO_CONTEXT;
- }
-
- if (fSurface) {
- eglDestroySurface(fDisplay, fSurface);
- fSurface = EGL_NO_SURFACE;
- }
-
- //TODO should we close the display?
- fDisplay = EGL_NO_DISPLAY;
- }
-}
-
-void SkANGLEGLContext::onPlatformMakeCurrent() const {
- if (!eglMakeCurrent(fDisplay, fSurface, fSurface, fContext)) {
- SkDebugf("Could not set the context.\n");
- }
-}
-
-void SkANGLEGLContext::onPlatformSwapBuffers() const {
- if (!eglSwapBuffers(fDisplay, fSurface)) {
- SkDebugf("Could not complete eglSwapBuffers.\n");
- }
-}
-
-GrGLFuncPtr SkANGLEGLContext::onPlatformGetProcAddress(const char* name) const {
- return eglGetProcAddress(name);
-}
« no previous file with comments | « src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp ('k') | src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698