Home | History | Annotate | Download | only in command_buffer
      1 
      2 /*
      3  * Copyright 2015 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 #ifndef SKCOMMANDBUFFERGLCONTEXT_DEFINED
      9 #define SKCOMMANDBUFFERGLCONTEXT_DEFINED
     10 
     11 #if SK_COMMAND_BUFFER
     12 
     13 #include "gl/SkGLContext.h"
     14 
     15 class SkCommandBufferGLContext : public SkGLContext {
     16 public:
     17     ~SkCommandBufferGLContext() override;
     18 
     19     static SkCommandBufferGLContext* CreateES2() {
     20         SkCommandBufferGLContext* ctx = new SkCommandBufferGLContext(kGLES2_ContextVersion);
     21         if (!ctx->isValid()) {
     22             delete ctx;
     23             return nullptr;
     24         }
     25         return ctx;
     26     }
     27     static SkCommandBufferGLContext* CreateES3() {
     28         SkCommandBufferGLContext* ctx = new SkCommandBufferGLContext(kGLES3_ContextVersion);
     29         if (!ctx->isValid()) {
     30             delete ctx;
     31             return nullptr;
     32         }
     33         return ctx;
     34     }
     35 
     36     static SkCommandBufferGLContext* Create(void* nativeWindow, int msaaSampleCount) {
     37         SkCommandBufferGLContext* ctx = new SkCommandBufferGLContext(nativeWindow,
     38                                                                      msaaSampleCount);
     39         if (!ctx->isValid()) {
     40             delete ctx;
     41             return nullptr;
     42         }
     43         return ctx;
     44     }
     45 
     46     void presentCommandBuffer();
     47 
     48     bool makeCurrent();
     49     int getStencilBits();
     50     int getSampleCount();
     51 
     52 private:
     53     enum ContextVersion {
     54         kGLES2_ContextVersion,
     55         kGLES3_ContextVersion
     56     };
     57     SkCommandBufferGLContext(ContextVersion minContextVersion);
     58     SkCommandBufferGLContext(void* nativeWindow, int msaaSampleCount);
     59     void initializeGLContext(ContextVersion minContextVersion, void* nativeWindow,
     60                              const int* configAttribs, const int* surfaceAttribs);
     61     void destroyGLContext();
     62 
     63     void onPlatformMakeCurrent() const override;
     64     void onPlatformSwapBuffers() const override;
     65     GrGLFuncPtr onPlatformGetProcAddress(const char* name) const override;
     66 
     67     void* fContext;
     68     void* fDisplay;
     69     void* fSurface;
     70     void* fConfig;
     71 };
     72 
     73 #endif // SK_COMMAND_BUFFER
     74 
     75 #endif
     76