blob: 9fb7f50bd933e93a67c7adbe8e7f5160cfdf67a5 [file] [log] [blame]
/*
* Copyright 2021 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef CAMERA_GPU_GLES_FRAMEBUFFER_H_
#define CAMERA_GPU_GLES_FRAMEBUFFER_H_
#include <GLES3/gl3.h> // NOLINT
#include <GLES2/gl2ext.h> // NOLINT
#include "gpu/gles/texture_2d.h"
namespace cros {
// A RAII helper class that encapsulates a GL framebuffer object (FBO).
class Framebuffer {
public:
// Creates a framebuffer object.
Framebuffer();
Framebuffer(const Framebuffer& other) = delete;
Framebuffer(Framebuffer&& other);
Framebuffer& operator=(const Framebuffer& other) = delete;
Framebuffer& operator=(Framebuffer&& other);
~Framebuffer();
GLuint handle() const { return id_; }
bool IsValid() const { return id_ != 0; }
// Binds the framebuffer object as render target.
bool Bind() const;
// Attaches the 2D texture |texture| to attachment point |attachment|.
bool Attach(GLenum attachment, const Texture2D& texture);
private:
void Invalidate();
GLuint id_ = 0;
};
} // namespace cros
#endif // CAMERA_GPU_GLES_FRAMEBUFFER_H_