gfx/gl/GLContextEAGL.h
author Phil Ringnalda <philringnalda@gmail.com>
Thu, 17 Aug 2017 21:06:05 -0700
changeset 375450 fdbcfc9b798737b01e06b953441c4a2ffb5c168a
parent 375412 caffdbefd4273f360152ccff085ec5ee8244046d
child 394033 538dfa8c4c3b5a8824e3f98bdc637718367b35fe
permissions -rw-r--r--
Backed out 7 changesets (bug 1390386) for Android crashes in testSettingsPages Backed out changeset 22b11f9aedd3 (bug 1390386) Backed out changeset caffdbefd427 (bug 1390386) Backed out changeset 3364e6589731 (bug 1390386) Backed out changeset ed6857bdc17b (bug 1390386) Backed out changeset 1314405cf812 (bug 1390386) Backed out changeset 9d16670edeb5 (bug 1390386) Backed out changeset d1286d0d2c79 (bug 1390386) MozReview-Commit-ID: 3V3ZFwrNaGE

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim: set ts=8 sts=4 et sw=4 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef GLCONTEXTEAGL_H_
#define GLCONTEXTEAGL_H_

#include "GLContext.h"

#include <CoreGraphics/CoreGraphics.h>
#include <OpenGLES/EAGL.h>

namespace mozilla {
namespace gl {

class GLContextEAGL : public GLContext
{
    friend class GLContextProviderEAGL;

    EAGLContext* const mContext;

public:
    MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(GLContextEAGL, override)
    GLContextEAGL(CreateContextFlags flags, const SurfaceCaps& caps, EAGLContext* context,
                  GLContext* sharedContext, bool isOffscreen, ContextProfile profile);

    ~GLContextEAGL();

    virtual GLContextType GetContextType() const override {
        return GLContextType::EAGL;
    }

    static GLContextEAGL* Cast(GLContext* gl) {
        MOZ_ASSERT(gl->GetContextType() == GLContextType::EAGL);
        return static_cast<GLContextEAGL*>(gl);
    }

    bool Init() override;

    bool AttachToWindow(nsIWidget* aWidget);

    EAGLContext* GetEAGLContext() const { return mContext; }

    virtual bool MakeCurrentImpl(bool aForce) override;

    virtual bool IsCurrent() override;

    virtual bool SetupLookupFunction() override;

    virtual bool IsDoubleBuffered() const override;

    virtual bool SwapBuffers() override;

    virtual void GetWSIInfo(nsCString* const out) const override;

    virtual GLuint GetDefaultFramebuffer() override {
        return mBackbufferFB;
    }

    virtual bool RenewSurface(nsIWidget* aWidget) override {
        // FIXME: should use the passed widget instead of the existing one.
        return RecreateRB();
    }

private:
    GLuint mBackbufferRB;
    GLuint mBackbufferFB;

    void* mLayer;

    bool RecreateRB();
};

} // namespace gl
} // namespace mozilla

#endif // GLCONTEXTEAGL_H_