init commit
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#ifndef RAYLIB_CPP_INCLUDE_RENDERTEXTUREUNMANAGED_HPP_
|
||||
#define RAYLIB_CPP_INCLUDE_RENDERTEXTUREUNMANAGED_HPP_
|
||||
|
||||
#include "./RaylibException.hpp"
|
||||
#include "./TextureUnmanaged.hpp"
|
||||
#include "./raylib-cpp-utils.hpp"
|
||||
|
||||
namespace raylib {
|
||||
/**
|
||||
* A RenderTexture that is not managed by C++ RAII.
|
||||
*
|
||||
* Make sure to Unload() this if needed, otherwise use raylib::RenderTexture.
|
||||
*
|
||||
* @see raylib::RenderTexture
|
||||
*/
|
||||
class RenderTextureUnmanaged : public ::RenderTexture {
|
||||
public:
|
||||
/**
|
||||
* Default constructor to build an empty RenderTexture.
|
||||
*/
|
||||
RenderTextureUnmanaged() : ::RenderTexture{0, {}, {}} {}
|
||||
|
||||
/**
|
||||
* Creates a RenderTexture from an existing RenderTexture struct.
|
||||
*/
|
||||
RenderTextureUnmanaged(const ::RenderTexture& renderTexture) : ::RenderTexture(renderTexture) {}
|
||||
|
||||
/**
|
||||
* Creates a RenderTexture from its components.
|
||||
*/
|
||||
RenderTextureUnmanaged(unsigned int id, const ::Texture& texture, const ::Texture& depth)
|
||||
: ::RenderTexture{id, texture, depth} {}
|
||||
|
||||
/**
|
||||
* Load texture for rendering (framebuffer).
|
||||
*
|
||||
* @throws raylib::RaylibException Throws if failed to create the render texture.
|
||||
*/
|
||||
RenderTextureUnmanaged(int width, int height) { Load(width, height); }
|
||||
|
||||
[[nodiscard]] std::string ToString() const { return TextFormat("RenderTexture(id=%u)", id); }
|
||||
|
||||
operator std::string() const { return ToString(); }
|
||||
|
||||
GETTER(unsigned int, Id, id)
|
||||
|
||||
/**
|
||||
* Get the color buffer attachment texture.
|
||||
*/
|
||||
TextureUnmanaged GetTexture() { return texture; }
|
||||
RLCPP_NODISCARD TextureUnmanaged GetTexture() const { return texture; }
|
||||
void SetTexture(const ::Texture& newTexture) { texture = newTexture; }
|
||||
|
||||
/**
|
||||
* Get the depth buffer attachment texture.
|
||||
*/
|
||||
TextureUnmanaged GetDepth() { return depth; }
|
||||
void SetDepth(const ::Texture& newDepth) { depth = newDepth; }
|
||||
|
||||
RenderTextureUnmanaged& operator=(const ::RenderTexture& other) {
|
||||
set(other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load texture for rendering (framebuffer).
|
||||
*
|
||||
* @throws raylib::RaylibException Throws if failed to create the render texture.
|
||||
*/
|
||||
void Load(int width, int height) {
|
||||
set(::LoadRenderTexture(width, height));
|
||||
if (!IsValid()) {
|
||||
throw RaylibException("Failed to create RenderTexture");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unload render texture from GPU memory (VRAM).
|
||||
*/
|
||||
void Unload() {
|
||||
if (IsValid()) {
|
||||
::UnloadRenderTexture(*this);
|
||||
id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes render texture for drawing.
|
||||
*/
|
||||
RenderTextureUnmanaged& BeginMode() {
|
||||
::BeginTextureMode(*this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ends drawing to render texture.
|
||||
*/
|
||||
RenderTextureUnmanaged& EndMode() {
|
||||
::EndTextureMode();
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves whether or not the render texture is ready.
|
||||
*/
|
||||
RLCPP_NODISCARD bool IsValid() const { return ::IsRenderTextureValid(*this); }
|
||||
|
||||
protected:
|
||||
void set(const ::RenderTexture& renderTexture) {
|
||||
id = renderTexture.id;
|
||||
texture = renderTexture.texture;
|
||||
depth = renderTexture.depth;
|
||||
}
|
||||
};
|
||||
|
||||
using RenderTexture2DUnmanaged = RenderTextureUnmanaged;
|
||||
|
||||
} // namespace raylib
|
||||
|
||||
using RRenderTextureUnmanaged = raylib::RenderTextureUnmanaged;
|
||||
using RRenderTexture2DUnmanaged = raylib::RenderTexture2DUnmanaged;
|
||||
|
||||
#endif // RAYLIB_CPP_INCLUDE_RENDERTEXTUREUNMANAGED_HPP_
|
||||
Reference in New Issue
Block a user