Blame gfx/gl/GLContextGLX.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
Packit f0b94e
/* vim: set ts=8 sts=4 et sw=4 tw=80: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef GLCONTEXTGLX_H_
Packit f0b94e
#define GLCONTEXTGLX_H_
Packit f0b94e
Packit f0b94e
#include "GLContext.h"
Packit f0b94e
#include "GLXLibrary.h"
Packit f0b94e
#include "mozilla/X11Util.h"
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace gl {
Packit f0b94e
Packit f0b94e
class GLContextGLX : public GLContext {
Packit f0b94e
 public:
Packit f0b94e
  MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(GLContextGLX, override)
Packit f0b94e
  static already_AddRefed<GLContextGLX> CreateGLContext(
Packit f0b94e
      CreateContextFlags flags, const SurfaceCaps& caps, bool isOffscreen,
Packit f0b94e
      Display* display, GLXDrawable drawable, GLXFBConfig cfg,
Packit f0b94e
      bool deleteDrawable, gfxXlibSurface* pixmap);
Packit f0b94e
Packit f0b94e
  // Finds a GLXFBConfig compatible with the provided window.
Packit f0b94e
  static bool FindFBConfigForWindow(
Packit f0b94e
      Display* display, int screen, Window window,
Packit f0b94e
      ScopedXFree<GLXFBConfig>* const out_scopedConfigArr,
Packit f0b94e
      GLXFBConfig* const out_config, int* const out_visid, bool aWebRender);
Packit f0b94e
Packit f0b94e
  ~GLContextGLX();
Packit f0b94e
Packit f0b94e
  virtual GLContextType GetContextType() const override {
Packit f0b94e
    return GLContextType::GLX;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  static GLContextGLX* Cast(GLContext* gl) {
Packit f0b94e
    MOZ_ASSERT(gl->GetContextType() == GLContextType::GLX);
Packit f0b94e
    return static_cast<GLContextGLX*>(gl);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  bool Init() override;
Packit f0b94e
Packit f0b94e
  virtual bool MakeCurrentImpl() const override;
Packit f0b94e
Packit f0b94e
  virtual bool IsCurrentImpl() const override;
Packit f0b94e
Packit f0b94e
  virtual bool SetupLookupFunction() override;
Packit f0b94e
Packit f0b94e
  virtual bool IsDoubleBuffered() const override;
Packit f0b94e
Packit f0b94e
  virtual bool SwapBuffers() override;
Packit f0b94e
Packit f0b94e
  virtual void GetWSIInfo(nsCString* const out) const override;
Packit f0b94e
Packit f0b94e
  // Overrides the current GLXDrawable backing the context and makes the
Packit f0b94e
  // context current.
Packit f0b94e
  bool OverrideDrawable(GLXDrawable drawable);
Packit f0b94e
Packit f0b94e
  // Undoes the effect of a drawable override.
Packit f0b94e
  bool RestoreDrawable();
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  friend class GLContextProviderGLX;
Packit f0b94e
Packit f0b94e
  GLContextGLX(CreateContextFlags flags, const SurfaceCaps& caps,
Packit f0b94e
               bool isOffscreen, Display* aDisplay, GLXDrawable aDrawable,
Packit f0b94e
               GLXContext aContext, bool aDeleteDrawable, bool aDoubleBuffered,
Packit f0b94e
               gfxXlibSurface* aPixmap);
Packit f0b94e
Packit f0b94e
  GLXContext mContext;
Packit f0b94e
  Display* mDisplay;
Packit f0b94e
  GLXDrawable mDrawable;
Packit f0b94e
  bool mDeleteDrawable;
Packit f0b94e
  bool mDoubleBuffered;
Packit f0b94e
Packit f0b94e
  GLXLibrary* mGLX;
Packit f0b94e
Packit f0b94e
  RefPtr<gfxXlibSurface> mPixmap;
Packit f0b94e
  bool mOwnsContext;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace gl
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif  // GLCONTEXTGLX_H_