~mmach/netext73/webkit2gtk

« back to all changes in this revision

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