|
JNGL
Easy to use cross-platform 2D game library
|
Image framebuffer object which can be rendered on. More...
#include <jngl/FrameBuffer.hpp>
Classes | |
| struct | Context |
| Lifetime object when the FrameBuffer is in use. More... | |
Public Member Functions | |
| FrameBuffer (Pixels width, Pixels height, bool hdr=false, bool antiAliased=false) | |
| Creates a framebuffer object with width times height actual pixels. | |
| FrameBuffer (ScaleablePixels width, ScaleablePixels height, bool hdr=false, bool antiAliased=false) | |
| Creates a framebuffer object with width times height scalable pixels. | |
| FrameBuffer (std::array< Pixels, 2 > size, bool hdr=false, bool antiAliased=false) | |
| Creates a framebuffer object with size[0] times size[1] pixels. | |
| FrameBuffer (const FrameBuffer &)=delete | |
| FrameBuffer & | operator= (const FrameBuffer &)=delete |
| FrameBuffer (FrameBuffer &&) noexcept | |
| FrameBuffer & | operator= (FrameBuffer &&) noexcept |
| Context | use () const |
| Starts drawing on the FrameBuffer as long as Context is alive. | |
| void | draw (Vec2 position, const ShaderProgram *=nullptr) const |
| Draws the framebuffer image to the screen. | |
| void | draw (double x, double y) const |
| void | draw (Mat3 modelview, const ShaderProgram *=nullptr) const |
| Draws the framebuffer image to the screen. | |
| void | draw (Mat3 modelview, TextureFilter textureFilter, const ShaderProgram *=nullptr) const |
| Draws the framebuffer image to the screen with a specific texture filter. | |
| void | drawMesh (const std::vector< Vertex > &vertexes, const ShaderProgram *=nullptr) const |
| Draws a list of triangles with the framebuffer's texture on it. | |
| void | drawMesh (const Mat3 &modelview, const std::vector< Vertex > &vertexes, const ShaderProgram *shaderProgram=nullptr) const |
| Draws a list of triangles with the framebuffer's texture on it, with modelview instead of the global one, and tinted by color, e.g. | |
| void | drawMesh (const Mat3 &modelview, const std::vector< Vertex > &vertexes, Rgba color, const ShaderProgram *=nullptr) const |
| Vec2 | getSize () const |
| Returns the size in screen pixels. | |
| Pixels | getPixelWidth () const |
| Pixels | getPixelHeight () const |
| uint32_t | getTextureID () const |
| Returns the OpenGL texture ID of the associated image buffer. | |
Static Public Member Functions | |
| static void | clear () |
| Clear the framebuffer with the color set by jngl::setBackgroundColor. | |
Image framebuffer object which can be rendered on.
Example:
Definition at line 38 of file FrameBuffer.hpp.
| FrameBuffer | ( | Pixels | width, |
| Pixels | height, | ||
| bool | hdr = false, | ||
| bool | antiAliased = false ) |
Creates a framebuffer object with width times height actual pixels.
| hdr | If true, the framebuffer stores floating point channels (GL_RGBA16F) instead of 8-bit ones. This avoids banding in smooth gradients and lets channel values exceed 1.0, which is useful for HDR lighting. |
| antiAliased | If true, what's drawn into it is anti-aliased like what's drawn onto the window: multisampled as long as jngl::getAntiAliasing() is true and the window supports it. Each time it's done being used (see use()), the samples are resolved into the image that's drawn, which costs a little, so it's only worth it for shapes, e.g. jngl::drawCircle(), not for e.g. sprites, which are smooth anyway. While jngl::setAntiAliasing(false), it still has its samples and resolves them, only without smoothing anything (except on OpenGL ES, which can't turn it off, like on the window): to save that too, make it again with antiAliased false. |
| Context use | ( | ) | const |
Starts drawing on the FrameBuffer as long as Context is alive.
The projection matrix gets adjusted so that (0, 0) is in the center of the FrameBuffer. The modelview matrix is saved (i.e. pushMatrix() is called) and restored by ~Context (i.e. popMatrix() is called).
| void draw | ( | Mat3 | modelview, |
| const ShaderProgram * | = nullptr ) const |
Draws the framebuffer image to the screen.
| shaderProgram | If not nullptr, this shader program is used instead of the default. |
| void draw | ( | Mat3 | modelview, |
| TextureFilter | textureFilter, | ||
| const ShaderProgram * | = nullptr ) const |
Draws the framebuffer image to the screen with a specific texture filter.
| textureFilter | Use this filtering for this one draw call, ignoring jngl::AppParameters::pixelArt. You'd probably want to use TextureFilter::NearestNeighbor for cases where you have a framebuffer the same size as the screen. |
| shaderProgram | If not nullptr, this shader program is used instead of the default. |
| void drawMesh | ( | const std::vector< Vertex > & | vertexes, |
| const ShaderProgram * | = nullptr ) const |
Draws a list of triangles with the framebuffer's texture on it.
The texture's v coordinate runs from 1 at the framebuffer's top to 0 at its bottom.
| void drawMesh | ( | const Mat3 & | modelview, |
| const std::vector< Vertex > & | vertexes, | ||
| const ShaderProgram * | shaderProgram = nullptr ) const |
Draws a list of triangles with the framebuffer's texture on it, with modelview instead of the global one, and tinted by color, e.g.
its alpha for a see-through framebuffer
| shaderProgram | Passing nullptr uses the default. |
|
static |
Clear the framebuffer with the color set by jngl::setBackgroundColor.
| uint32_t getTextureID | ( | ) | const |
Returns the OpenGL texture ID of the associated image buffer.
While this is an implementation detail, it can be useful if you want to draw the GL_TEXTURE_2D object yourself or need to pass it to another library. The return type is equivalent to GLuint.