135 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			5.5 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. The contents of the render-target are undefined.
							 | 
						||
| 
								 | 
							
								/// </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. The contents of the render-target are undefined.
							 | 
						||
| 
								 | 
							
								/// </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. The contents of the framebuffer are undefined.
							 | 
						||
| 
								 | 
							
								/// </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. The contents of the framebuffer are undefined.
							 | 
						||
| 
								 | 
							
								/// </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. The contents of the render-target are undefined.
							 | 
						||
| 
								 | 
							
								/// </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. The contents of the render-target are undefined.
							 | 
						||
| 
								 | 
							
								/// </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
							 |