135 lines
5.2 KiB
C
135 lines
5.2 KiB
C
#pragma once
|
|
|
|
#include <kinc/global.h>
|
|
|
|
#include "textureunit.h"
|
|
|
|
#include <kinc/backend/graphics5/rendertarget.h>
|
|
|
|
/*! \file rendertarget.h
|
|
\brief Provides functions for handling render-targets.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef enum kinc_g5_render_target_format {
|
|
KINC_G5_RENDER_TARGET_FORMAT_32BIT,
|
|
KINC_G5_RENDER_TARGET_FORMAT_64BIT_FLOAT,
|
|
KINC_G5_RENDER_TARGET_FORMAT_32BIT_RED_FLOAT,
|
|
KINC_G5_RENDER_TARGET_FORMAT_128BIT_FLOAT,
|
|
KINC_G5_RENDER_TARGET_FORMAT_16BIT_DEPTH,
|
|
KINC_G5_RENDER_TARGET_FORMAT_8BIT_RED,
|
|
KINC_G5_RENDER_TARGET_FORMAT_16BIT_RED_FLOAT
|
|
} kinc_g5_render_target_format_t;
|
|
|
|
typedef struct kinc_g5_render_target {
|
|
int width;
|
|
int height;
|
|
int texWidth;
|
|
int texHeight;
|
|
int framebuffer_index;
|
|
bool isCubeMap;
|
|
bool isDepthAttachment;
|
|
RenderTarget5Impl impl;
|
|
} kinc_g5_render_target_t;
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a regular render-target.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="width"></param>
|
|
/// <param name="height"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init(kinc_g5_render_target_t *target, int width, int height, kinc_g5_render_target_format_t format, int depthBufferBits,
|
|
int stencilBufferBits);
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a regular render-target. Can fall back to a regular render-target.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="width"></param>
|
|
/// <param name="height"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <param name="samples_per_pixel"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init_with_multisampling(kinc_g5_render_target_t *target, int width, int height, kinc_g5_render_target_format_t format,
|
|
int depthBufferBits, int stencilBufferBits, int samples_per_pixel);
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a framebuffer.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="width"></param>
|
|
/// <param name="height"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init_framebuffer(kinc_g5_render_target_t *target, int width, int height, kinc_g5_render_target_format_t format,
|
|
int depthBufferBits, int stencilBufferBits);
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a multisampled framebuffer. Can fall back to a regular framebuffer.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="width"></param>
|
|
/// <param name="height"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <param name="samples_per_pixel"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init_framebuffer_with_multisampling(kinc_g5_render_target_t *target, int width, int height,
|
|
kinc_g5_render_target_format_t format, int depthBufferBits, int stencilBufferBits,
|
|
int samples_per_pixel);
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a render-target-cube-map.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="cubeMapSize"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init_cube(kinc_g5_render_target_t *target, int cubeMapSize, kinc_g5_render_target_format_t format, int depthBufferBits,
|
|
int stencilBufferBits);
|
|
|
|
/// <summary>
|
|
/// Allocates and initializes a multisampled render-target-cube-map. Can fall back to a regular cube-map.
|
|
/// </summary>
|
|
/// <param name="target"></param>
|
|
/// <param name="cubeMapSize"></param>
|
|
/// <param name="format"></param>
|
|
/// <param name="depthBufferBits"></param>
|
|
/// <param name="stencilBufferBits"></param>
|
|
/// <param name="samples_per_pixel"></param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_init_cube_with_multisampling(kinc_g5_render_target_t *target, int cubeMapSize, kinc_g5_render_target_format_t format,
|
|
int depthBufferBits, int stencilBufferBits, int samples_per_pixel);
|
|
|
|
/// <summary>
|
|
/// Deallocates and destroys a render-target.
|
|
/// </summary>
|
|
/// <param name="renderTarget">The render-target to destroy</param>
|
|
KINC_FUNC void kinc_g5_render_target_destroy(kinc_g5_render_target_t *target);
|
|
|
|
/// <summary>
|
|
/// Copies the depth and stencil-components of one render-target into another one.
|
|
/// </summary>
|
|
/// <param name="renderTarget">The render-target to copy the data into</param>
|
|
/// <param name="source">The render-target from which to copy the data</param>
|
|
/// <returns></returns>
|
|
KINC_FUNC void kinc_g5_render_target_set_depth_stencil_from(kinc_g5_render_target_t *target, kinc_g5_render_target_t *source);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|