[nostalgia/glutils] Add FrameBuffer type
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user