tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WGLLibrary.h (3802B)


      1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #include "GLContextTypes.h"
      7 #include "GLLibraryLoader.h"
      8 #include "mozilla/UniquePtr.h"
      9 #include <windows.h>
     10 
     11 struct PRLibrary;
     12 
     13 namespace mozilla {
     14 namespace gl {
     15 /*
     16 struct ScopedDC
     17 {
     18    const HDC mDC;
     19 
     20    ScopedDC() = delete;
     21    virtual ~ScopedDC() = 0;
     22 };
     23 
     24 struct WindowDC final : public ScopedDC
     25 {
     26    const HWND mWindow;
     27 
     28    WindowDC() = delete;
     29    ~WindowDC();
     30 };
     31 
     32 struct PBufferDC final : public ScopedDC
     33 {
     34    const HWND mWindow;
     35 
     36    PBufferDC() = delete;
     37    ~PBufferDC();
     38 };
     39 */
     40 class WGLLibrary {
     41 public:
     42  ~WGLLibrary() { Reset(); }
     43 
     44 private:
     45  void Reset();
     46 
     47 public:
     48  struct {
     49    HGLRC(GLAPIENTRY* fCreateContext)(HDC);
     50    BOOL(GLAPIENTRY* fDeleteContext)(HGLRC);
     51    BOOL(GLAPIENTRY* fMakeCurrent)(HDC, HGLRC);
     52    PROC(GLAPIENTRY* fGetProcAddress)(LPCSTR);
     53    HGLRC(GLAPIENTRY* fGetCurrentContext)(void);
     54    HDC(GLAPIENTRY* fGetCurrentDC)(void);
     55    // BOOL   (GLAPIENTRY * fShareLists) (HGLRC oldContext, HGLRC newContext);
     56    HANDLE(GLAPIENTRY* fCreatePbuffer)
     57    (HDC hDC, int iPixelFormat, int iWidth, int iHeight,
     58     const int* piAttribList);
     59    BOOL(GLAPIENTRY* fDestroyPbuffer)(HANDLE hPbuffer);
     60    HDC(GLAPIENTRY* fGetPbufferDC)(HANDLE hPbuffer);
     61    int(GLAPIENTRY* fReleasePbufferDC)(HANDLE hPbuffer, HDC dc);
     62    // BOOL (GLAPIENTRY * fBindTexImage) (HANDLE hPbuffer, int iBuffer);
     63    // BOOL (GLAPIENTRY * fReleaseTexImage) (HANDLE hPbuffer, int iBuffer);
     64    BOOL(GLAPIENTRY* fChoosePixelFormat)
     65    (HDC hdc, const int* piAttribIList, const FLOAT* pfAttribFList,
     66     UINT nMaxFormats, int* piFormats, UINT* nNumFormats);
     67    // BOOL (GLAPIENTRY * fGetPixelFormatAttribiv) (HDC hdc,
     68    //                                             int iPixelFormat,
     69    //                                             int iLayerPlane,
     70    //                                             UINT nAttributes,
     71    //                                             int* piAttributes,
     72    //                                             int* piValues);
     73    const char*(GLAPIENTRY* fGetExtensionsStringARB)(HDC hdc);
     74    HGLRC(GLAPIENTRY* fCreateContextAttribsARB)
     75    (HDC hdc, HGLRC hShareContext, const int* attribList);
     76    // WGL_NV_DX_interop:
     77    BOOL(GLAPIENTRY* fDXSetResourceShareHandleNV)
     78    (void* dxObject, HANDLE shareHandle);
     79    HANDLE(GLAPIENTRY* fDXOpenDeviceNV)(void* dxDevice);
     80    BOOL(GLAPIENTRY* fDXCloseDeviceNV)(HANDLE hDevice);
     81    HANDLE(GLAPIENTRY* fDXRegisterObjectNV)
     82    (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access);
     83    BOOL(GLAPIENTRY* fDXUnregisterObjectNV)(HANDLE hDevice, HANDLE hObject);
     84    BOOL(GLAPIENTRY* fDXObjectAccessNV)(HANDLE hObject, GLenum access);
     85    BOOL(GLAPIENTRY* fDXLockObjectsNV)
     86    (HANDLE hDevice, GLint count, HANDLE* hObjects);
     87    BOOL(GLAPIENTRY* fDXUnlockObjectsNV)
     88    (HANDLE hDevice, GLint count, HANDLE* hObjects);
     89  } mSymbols = {};
     90 
     91  bool EnsureInitialized();
     92  // UniquePtr<WindowDC> CreateDummyWindow();
     93  HGLRC CreateContextWithFallback(HDC dc, bool tryRobustBuffers) const;
     94 
     95  bool HasDXInterop2() const { return bool(mSymbols.fDXOpenDeviceNV); }
     96  bool IsInitialized() const { return mInitialized; }
     97  auto GetOGLLibrary() const { return mOGLLibrary; }
     98  auto RootDc() const { return mRootDc; }
     99  SymbolLoader GetSymbolLoader() const;
    100 
    101 private:
    102  bool mInitialized = false;
    103  PRLibrary* mOGLLibrary;
    104  bool mHasRobustness;
    105  HWND mDummyWindow;
    106  HDC mRootDc;
    107  HGLRC mDummyGlrc;
    108 };
    109 
    110 // a global WGLLibrary instance
    111 extern WGLLibrary sWGLLib;
    112 
    113 } /* namespace gl */
    114 } /* namespace mozilla */