[nostalgia/glutils] Add FrameBuffer type

This commit is contained in:
2021-08-03 21:49:28 -05:00
parent c7499f4241
commit 1bf882c674
2 changed files with 70 additions and 5 deletions
+35 -2
View File
@@ -6,11 +6,15 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <ox/std/defines.hpp>
#define GL_GLEXT_PROTOTYPES 1
#ifdef OX_OS_Darwin
#ifndef GL_SILENCE_DEPRECATION
#define GL_SILENCE_DEPRECATION
#endif
#include <OpenGL/gl3.h>
#else
#include <GLES3/gl3.h>
@@ -63,7 +67,7 @@ struct GLObject: public Base {
o.id = 0;
}
~GLObject() {
~GLObject() noexcept {
del(id);
}
@@ -94,22 +98,51 @@ struct GLObject: public Base {
};
void deleteBuffer(GLuint b) noexcept;
void deleteFrameBuffer(GLuint b) noexcept;
void deleteRenderBuffer(GLuint b) noexcept;
void deleteTexture(GLuint t) noexcept;
void deleteVertexArray(GLuint v) noexcept;
extern template struct GLObject<deleteBuffer>;
extern template struct GLObject<deleteFrameBuffer>;
extern template struct GLObject<deleteRenderBuffer>;
extern template struct GLObject<deleteTexture, TextureBase>;
extern template struct GLObject<deleteVertexArray>;
extern template struct GLObject<glDeleteProgram>;
extern template struct GLObject<glDeleteShader>;
using GLBuffer = GLObject<deleteBuffer>;
using GLFrameBuffer = GLObject<deleteBuffer>;
using GLRenderBuffer = GLObject<deleteRenderBuffer>;
using GLShader = GLObject<glDeleteShader>;
using GLProgram = GLObject<glDeleteProgram>;
using GLTexture = GLObject<deleteTexture, TextureBase>;
using GLVertexArray = GLObject<deleteVertexArray>;
/**
* FrameBuffer holds everything needed for a usable frame buffer to exist.
* It differs from GLFrameBuffer in that GLFrameBuffer only manages the FBO
* and not its dependencies.
*/
struct FrameBuffer {
GLFrameBuffer fbo;
GLTexture color;
GLRenderBuffer depth;
constexpr operator GLuint&() noexcept {
return fbo.id;
}
constexpr operator const GLuint&() const noexcept {
return fbo.id;
}
};
[[nodiscard]]
ox::Result<GLProgram> buildShaderProgram(const GLchar *vert, const GLchar *frag) noexcept;
}
[[nodiscard]]
FrameBuffer generateFrameBuffer(int width, int height) noexcept;
}