2
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
7
// PBufferSurfaceEAGL.cpp: an implementation of egl::Surface for PBuffers for the EAGL backend,
8
// currently implemented using renderbuffers
10
#import "common/platform.h"
12
#if defined(ANGLE_PLATFORM_IOS) && !defined(ANGLE_PLATFORM_MACCATALYST)
14
# include "libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.h"
16
# include "common/debug.h"
17
# include "libANGLE/renderer/gl/FramebufferGL.h"
18
# include "libANGLE/renderer/gl/FunctionsGL.h"
19
# include "libANGLE/renderer/gl/RendererGL.h"
20
# include "libANGLE/renderer/gl/StateManagerGL.h"
25
PbufferSurfaceEAGL::PbufferSurfaceEAGL(const egl::SurfaceState &state,
32
mFunctions(renderer->getFunctions()),
33
mStateManager(renderer->getStateManager()),
34
mColorRenderbuffer(0),
38
PbufferSurfaceEAGL::~PbufferSurfaceEAGL()
40
if (mColorRenderbuffer != 0)
42
mFunctions->deleteRenderbuffers(1, &mColorRenderbuffer);
43
mColorRenderbuffer = 0;
45
if (mDSRenderbuffer != 0)
47
mFunctions->deleteRenderbuffers(1, &mDSRenderbuffer);
52
egl::Error PbufferSurfaceEAGL::initialize(const egl::Display *display)
54
mFunctions->genRenderbuffers(1, &mColorRenderbuffer);
55
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer);
56
mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, mWidth, mHeight);
58
mFunctions->genRenderbuffers(1, &mDSRenderbuffer);
59
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mDSRenderbuffer);
60
mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mWidth, mHeight);
62
return egl::NoError();
65
egl::Error PbufferSurfaceEAGL::makeCurrent(const gl::Context *context)
67
return egl::NoError();
70
egl::Error PbufferSurfaceEAGL::swap(const gl::Context *context)
72
return egl::NoError();
75
egl::Error PbufferSurfaceEAGL::postSubBuffer(const gl::Context *context,
81
return egl::NoError();
84
egl::Error PbufferSurfaceEAGL::querySurfacePointerANGLE(EGLint attribute, void **value)
87
return egl::NoError();
90
egl::Error PbufferSurfaceEAGL::bindTexImage(const gl::Context *context,
94
ERR() << "PbufferSurfaceEAGL::bindTexImage";
96
return egl::NoError();
99
egl::Error PbufferSurfaceEAGL::releaseTexImage(const gl::Context *context, EGLint buffer)
102
return egl::NoError();
105
void PbufferSurfaceEAGL::setSwapInterval(EGLint interval) {}
107
EGLint PbufferSurfaceEAGL::getWidth() const
112
EGLint PbufferSurfaceEAGL::getHeight() const
117
EGLint PbufferSurfaceEAGL::isPostSubBufferSupported() const
123
EGLint PbufferSurfaceEAGL::getSwapBehavior() const
125
return EGL_BUFFER_PRESERVED;
128
FramebufferImpl *PbufferSurfaceEAGL::createDefaultFramebuffer(const gl::Context *context,
129
const gl::FramebufferState &state)
131
const FunctionsGL *functions = GetFunctionsGL(context);
132
StateManagerGL *stateManager = GetStateManagerGL(context);
134
GLuint framebuffer = 0;
135
functions->genFramebuffers(1, &framebuffer);
136
stateManager->bindFramebuffer(GL_FRAMEBUFFER, framebuffer);
137
functions->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
139
functions->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
142
return new FramebufferGL(state, framebuffer, true, false);
147
#endif // defined(ANGLE_PLATFORM_IOS)