#include "libANGLE/renderer/gl/FramebufferGL.h"
#include "common/bitset_utils.h"
#include "common/debug.h"
#include "libANGLE/ErrorStrings.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/State.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/queryconversions.h"
#include "libANGLE/renderer/ContextImpl.h"
#include "libANGLE/renderer/gl/BlitGL.h"
#include "libANGLE/renderer/gl/ClearMultiviewGL.h"
#include "libANGLE/renderer/gl/ContextGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/RenderbufferGL.h"
#include "libANGLE/renderer/gl/StateManagerGL.h"
#include "libANGLE/renderer/gl/TextureGL.h"
#include "libANGLE/renderer/gl/formatutilsgl.h"
#include "libANGLE/renderer/gl/renderergl_utils.h"
#include "platform/PlatformMethods.h"
#include "platform/autogen/FeaturesGL_autogen.h"
usingnamespacegl;
CheckedNumeric;
namespace rx
{
namespace
{
struct BlitFramebufferBounds
{ … };
static BlitFramebufferBounds GetBlitFramebufferBounds(const gl::Context *context,
const gl::Rectangle &sourceArea,
const gl::Rectangle &destArea)
{ … }
void BindFramebufferAttachment(const FunctionsGL *functions,
GLenum attachmentPoint,
const FramebufferAttachment *attachment,
const angle::FeaturesGL &features)
{ … }
bool AreAllLayersActive(const FramebufferAttachment &attachment)
{ … }
bool RequiresMultiviewClear(const FramebufferState &state, bool scissorTestEnabled)
{ … }
bool IsEmulatedAlphaChannelTextureAttachment(const FramebufferAttachment *attachment)
{ … }
class [[nodiscard]] ScopedEXTTextureNorm16ReadbackWorkaround
{ … };
angle::Result RearrangeEXTTextureNorm16Pixels(const gl::Context *context,
const gl::Rectangle &area,
GLenum originalReadFormat,
GLenum format,
GLenum type,
GLuint skipBytes,
GLuint rowBytes,
GLuint pixelBytes,
const gl::PixelPackState &pack,
GLubyte *clientPixels,
GLubyte *tmpPixels)
{ … }
bool IsValidUnsignedShortReadPixelsFormat(GLenum readFormat, const gl::Context *context)
{ … }
bool IsNonTrivialClearColor(const GLfloat *color)
{ … }
bool IsNonTrivialClearColor(const GLuint *color)
{ … }
}
FramebufferGL::FramebufferGL(const gl::FramebufferState &data, GLuint id, bool emulatedAlpha)
: … { … }
FramebufferGL::~FramebufferGL()
{ … }
void FramebufferGL::destroy(const gl::Context *context)
{ … }
angle::Result FramebufferGL::discard(const gl::Context *context,
size_t count,
const GLenum *attachments)
{ … }
angle::Result FramebufferGL::invalidate(const gl::Context *context,
size_t count,
const GLenum *attachments)
{ … }
angle::Result FramebufferGL::invalidateSub(const gl::Context *context,
size_t count,
const GLenum *attachments,
const gl::Rectangle &area)
{ … }
angle::Result FramebufferGL::clear(const gl::Context *context, GLbitfield mask)
{ … }
angle::Result FramebufferGL::clearBufferfv(const gl::Context *context,
GLenum buffer,
GLint drawbuffer,
const GLfloat *values)
{ … }
angle::Result FramebufferGL::clearBufferuiv(const gl::Context *context,
GLenum buffer,
GLint drawbuffer,
const GLuint *values)
{ … }
angle::Result FramebufferGL::clearBufferiv(const gl::Context *context,
GLenum buffer,
GLint drawbuffer,
const GLint *values)
{ … }
angle::Result FramebufferGL::clearBufferfi(const gl::Context *context,
GLenum buffer,
GLint drawbuffer,
GLfloat depth,
GLint stencil)
{ … }
angle::Result FramebufferGL::readPixels(const gl::Context *context,
const gl::Rectangle &area,
GLenum format,
GLenum type,
const gl::PixelPackState &pack,
gl::Buffer *packBuffer,
void *pixels)
{ … }
angle::Result FramebufferGL::blit(const gl::Context *context,
const gl::Rectangle &sourceArea,
const gl::Rectangle &destArea,
GLbitfield mask,
GLenum filter)
{ … }
angle::Result FramebufferGL::adjustSrcDstRegion(const gl::Context *context,
const gl::Rectangle &sourceArea,
const gl::Rectangle &destArea,
gl::Rectangle *newSourceArea,
gl::Rectangle *newDestArea)
{ … }
angle::Result FramebufferGL::clipSrcRegion(const gl::Context *context,
const gl::Rectangle &sourceArea,
const gl::Rectangle &destArea,
gl::Rectangle *newSourceArea,
gl::Rectangle *newDestArea)
{ … }
angle::Result FramebufferGL::getSamplePosition(const gl::Context *context,
size_t index,
GLfloat *xy) const
{ … }
bool FramebufferGL::shouldSyncStateBeforeCheckStatus() const
{ … }
gl::FramebufferStatus FramebufferGL::checkStatus(const gl::Context *context) const
{ … }
angle::Result FramebufferGL::ensureAttachmentsInitialized(
const gl::Context *context,
const gl::DrawBufferMask &colorAttachments,
bool depth,
bool stencil)
{ … }
angle::Result FramebufferGL::syncState(const gl::Context *context,
GLenum binding,
const gl::Framebuffer::DirtyBits &dirtyBits,
gl::Command command)
{ … }
void FramebufferGL::updateDefaultFramebufferID(GLuint framebufferID)
{ … }
bool FramebufferGL::hasEmulatedAlphaChannelTextureAttachment() const
{ … }
void FramebufferGL::syncClearState(const gl::Context *context, GLbitfield mask)
{ … }
void FramebufferGL::syncClearBufferState(const gl::Context *context,
GLenum buffer,
GLint drawBuffer)
{ … }
bool FramebufferGL::modifyInvalidateAttachmentsForEmulatedDefaultFBO(
size_t count,
const GLenum *attachments,
std::vector<GLenum> *modifiedAttachments) const
{ … }
angle::Result FramebufferGL::readPixelsRowByRow(const gl::Context *context,
const gl::Rectangle &area,
GLenum originalReadFormat,
GLenum format,
GLenum type,
const gl::PixelPackState &pack,
GLubyte *pixels) const
{ … }
angle::Result FramebufferGL::readPixelsAllAtOnce(const gl::Context *context,
const gl::Rectangle &area,
GLenum originalReadFormat,
GLenum format,
GLenum type,
const gl::PixelPackState &pack,
GLubyte *pixels,
bool readLastRowSeparately) const
{ … }
}