~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.cpp

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
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.
 
5
//
 
6
 
 
7
// PBufferSurfaceEAGL.cpp: an implementation of egl::Surface for PBuffers for the EAGL backend,
 
8
//                      currently implemented using renderbuffers
 
9
 
 
10
#import "common/platform.h"
 
11
 
 
12
#if defined(ANGLE_PLATFORM_IOS) && !defined(ANGLE_PLATFORM_MACCATALYST)
 
13
 
 
14
#    include "libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.h"
 
15
 
 
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"
 
21
 
 
22
namespace rx
 
23
{
 
24
 
 
25
PbufferSurfaceEAGL::PbufferSurfaceEAGL(const egl::SurfaceState &state,
 
26
                                       RendererGL *renderer,
 
27
                                       EGLint width,
 
28
                                       EGLint height)
 
29
    : SurfaceGL(state),
 
30
      mWidth(width),
 
31
      mHeight(height),
 
32
      mFunctions(renderer->getFunctions()),
 
33
      mStateManager(renderer->getStateManager()),
 
34
      mColorRenderbuffer(0),
 
35
      mDSRenderbuffer(0)
 
36
{}
 
37
 
 
38
PbufferSurfaceEAGL::~PbufferSurfaceEAGL()
 
39
{
 
40
    if (mColorRenderbuffer != 0)
 
41
    {
 
42
        mFunctions->deleteRenderbuffers(1, &mColorRenderbuffer);
 
43
        mColorRenderbuffer = 0;
 
44
    }
 
45
    if (mDSRenderbuffer != 0)
 
46
    {
 
47
        mFunctions->deleteRenderbuffers(1, &mDSRenderbuffer);
 
48
        mDSRenderbuffer = 0;
 
49
    }
 
50
}
 
51
 
 
52
egl::Error PbufferSurfaceEAGL::initialize(const egl::Display *display)
 
53
{
 
54
    mFunctions->genRenderbuffers(1, &mColorRenderbuffer);
 
55
    mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer);
 
56
    mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, mWidth, mHeight);
 
57
 
 
58
    mFunctions->genRenderbuffers(1, &mDSRenderbuffer);
 
59
    mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mDSRenderbuffer);
 
60
    mFunctions->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mWidth, mHeight);
 
61
 
 
62
    return egl::NoError();
 
63
}
 
64
 
 
65
egl::Error PbufferSurfaceEAGL::makeCurrent(const gl::Context *context)
 
66
{
 
67
    return egl::NoError();
 
68
}
 
69
 
 
70
egl::Error PbufferSurfaceEAGL::swap(const gl::Context *context)
 
71
{
 
72
    return egl::NoError();
 
73
}
 
74
 
 
75
egl::Error PbufferSurfaceEAGL::postSubBuffer(const gl::Context *context,
 
76
                                             EGLint x,
 
77
                                             EGLint y,
 
78
                                             EGLint width,
 
79
                                             EGLint height)
 
80
{
 
81
    return egl::NoError();
 
82
}
 
83
 
 
84
egl::Error PbufferSurfaceEAGL::querySurfacePointerANGLE(EGLint attribute, void **value)
 
85
{
 
86
    UNIMPLEMENTED();
 
87
    return egl::NoError();
 
88
}
 
89
 
 
90
egl::Error PbufferSurfaceEAGL::bindTexImage(const gl::Context *context,
 
91
                                            gl::Texture *texture,
 
92
                                            EGLint buffer)
 
93
{
 
94
    ERR() << "PbufferSurfaceEAGL::bindTexImage";
 
95
    UNIMPLEMENTED();
 
96
    return egl::NoError();
 
97
}
 
98
 
 
99
egl::Error PbufferSurfaceEAGL::releaseTexImage(const gl::Context *context, EGLint buffer)
 
100
{
 
101
    UNIMPLEMENTED();
 
102
    return egl::NoError();
 
103
}
 
104
 
 
105
void PbufferSurfaceEAGL::setSwapInterval(EGLint interval) {}
 
106
 
 
107
EGLint PbufferSurfaceEAGL::getWidth() const
 
108
{
 
109
    return mWidth;
 
110
}
 
111
 
 
112
EGLint PbufferSurfaceEAGL::getHeight() const
 
113
{
 
114
    return mHeight;
 
115
}
 
116
 
 
117
EGLint PbufferSurfaceEAGL::isPostSubBufferSupported() const
 
118
{
 
119
    UNIMPLEMENTED();
 
120
    return EGL_FALSE;
 
121
}
 
122
 
 
123
EGLint PbufferSurfaceEAGL::getSwapBehavior() const
 
124
{
 
125
    return EGL_BUFFER_PRESERVED;
 
126
}
 
127
 
 
128
FramebufferImpl *PbufferSurfaceEAGL::createDefaultFramebuffer(const gl::Context *context,
 
129
                                                              const gl::FramebufferState &state)
 
130
{
 
131
    const FunctionsGL *functions = GetFunctionsGL(context);
 
132
    StateManagerGL *stateManager = GetStateManagerGL(context);
 
133
 
 
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,
 
138
                                       mColorRenderbuffer);
 
139
    functions->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
 
140
                                       mDSRenderbuffer);
 
141
 
 
142
    return new FramebufferGL(state, framebuffer, true, false);
 
143
}
 
144
 
 
145
}  // namespace rx
 
146
 
 
147
#endif  // defined(ANGLE_PLATFORM_IOS)