2
// Copyright 2015 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
// PBufferSurfaceCGL.cpp: an implementation of egl::Surface for PBuffers for the CLG backend,
8
// currently implemented using renderbuffers
10
#include "libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h"
12
#if defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
14
# include "common/debug.h"
15
# include "libANGLE/renderer/gl/FramebufferGL.h"
16
# include "libANGLE/renderer/gl/FunctionsGL.h"
17
# include "libANGLE/renderer/gl/RendererGL.h"
18
# include "libANGLE/renderer/gl/StateManagerGL.h"
23
PbufferSurfaceCGL::PbufferSurfaceCGL(const egl::SurfaceState &state,
30
mFunctions(renderer->getFunctions()),
31
mStateManager(renderer->getStateManager()),
32
mColorRenderbuffer(0),
36
PbufferSurfaceCGL::~PbufferSurfaceCGL()
38
if (mColorRenderbuffer != 0)
40
mFunctions->deleteRenderbuffers(1, &mColorRenderbuffer);
41
mColorRenderbuffer = 0;
43
if (mDSRenderbuffer != 0)
45
mFunctions->deleteRenderbuffers(1, &mDSRenderbuffer);
50
egl::Error PbufferSurfaceCGL::initialize(const egl::Display *display)
52
mFunctions->genRenderbuffers(1, &mColorRenderbuffer);
53
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer);
54
mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, mWidth, mHeight);
56
mFunctions->genRenderbuffers(1, &mDSRenderbuffer);
57
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mDSRenderbuffer);
58
mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mWidth, mHeight);
60
return egl::NoError();
63
egl::Error PbufferSurfaceCGL::makeCurrent(const gl::Context *context)
65
return egl::NoError();
68
egl::Error PbufferSurfaceCGL::swap(const gl::Context *context)
70
return egl::NoError();
73
egl::Error PbufferSurfaceCGL::postSubBuffer(const gl::Context *context,
79
return egl::NoError();
82
egl::Error PbufferSurfaceCGL::querySurfacePointerANGLE(EGLint attribute, void **value)
85
return egl::NoError();
88
egl::Error PbufferSurfaceCGL::bindTexImage(const gl::Context *context,
93
return egl::NoError();
96
egl::Error PbufferSurfaceCGL::releaseTexImage(const gl::Context *context, EGLint buffer)
99
return egl::NoError();
102
void PbufferSurfaceCGL::setSwapInterval(EGLint interval) {}
104
EGLint PbufferSurfaceCGL::getWidth() const
109
EGLint PbufferSurfaceCGL::getHeight() const
114
EGLint PbufferSurfaceCGL::isPostSubBufferSupported() const
120
EGLint PbufferSurfaceCGL::getSwapBehavior() const
122
return EGL_BUFFER_PRESERVED;
125
FramebufferImpl *PbufferSurfaceCGL::createDefaultFramebuffer(const gl::Context *context,
126
const gl::FramebufferState &state)
128
const FunctionsGL *functions = GetFunctionsGL(context);
129
StateManagerGL *stateManager = GetStateManagerGL(context);
131
GLuint framebuffer = 0;
132
functions->genFramebuffers(1, &framebuffer);
133
stateManager->bindFramebuffer(GL_FRAMEBUFFER, framebuffer);
134
functions->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
136
functions->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
139
return new FramebufferGL(state, framebuffer, true, false);
144
#endif // defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)