Files
korenkonder_AFTMods/src/DivaGL/render.hpp
T

217 lines
7.0 KiB
C++

/*
by korenkonder
GitHub/GitLab: korenkonder
*/
#pragma once
#include "../KKdLib/default.hpp"
#include "../KKdLib/vec.hpp"
#include "renderer/dof.hpp"
#include "renderer/transparency.hpp"
#include "camera.hpp"
#include "gl_uniform_buffer.hpp"
enum tone_map_method {
TONE_MAP_YCC_EXPONENT = 0,
TONE_MAP_RGB_LINEAR = 1,
TONE_MAP_RGB_LINEAR2 = 2,
TONE_MAP_MAX = 3,
};
namespace rndr {
struct Render {
enum MagFilterType {
MAG_FILTER_NEAREST = 0,
MAG_FILTER_BILINEAR,
MAG_FILTER_SHARPEN_5_TAP,
MAG_FILTER_SHARPEN_4_TAP,
MAG_FILTER_CONE_4_TAP,
MAG_FILTER_CONE_2_TAP,
MAG_FILTER_MAX,
};
enum FrameTextureType {
FRAME_TEXTURE_PRE_PP = 0,
FRAME_TEXTURE_POST_PP,
FRAME_TEXTURE_FB,
FRAME_TEXTURE_MAX,
};
struct ExposureCharaData {
vec4 spot_coefficients[8];
float_t spot_weight;
GLuint query[3];
GLuint query_data[3];
void reset();
};
struct FrameTextureData {
texture* texture;
RenderTexture render_texture;
FrameTextureType type;
};
struct FrameTexture {
FrameTextureData data[4];
bool capture;
};
int32_t downsample_count;
int32_t downsample_max_count;
int32_t ssaa;
int32_t taa;
int32_t mlaa;
int32_t cam_blur;
int32_t hd_res;
int32_t base_downsample;
int32_t ss_alpha_mask;
RenderTexture rend_texture[5];
RenderTexture taa_buffer[3];
texture* taa_tex[3];
RenderTexture aet_back_texture;
texture* aet_back_tex;
RenderTexture downsample_texture;
RenderTexture reduce_texture[5];
texture* reduce_tex[5];
RenderTexture field_340;
GLuint reduce_tex_draw;
RenderTexture exposure_texture;
GLuint exposure_tex;
texture* exposure_history;
RenderTexture field_3B8;
RenderTexture field_3E8;
GLuint tonemap_lut_texture;
RenderTexture mlaa_buffer;
RenderTexture temp_buffer;
GLuint mlaa_area_texture;
RenderTexture* sss_contour_texture;
int32_t texture_counter;
GLuint lens_shaft_query[3];
GLuint lens_flare_query[3];
GLuint lens_shaft_query_data[3];
GLuint lens_flare_query_data[3];
int32_t lens_flare_query_index;
GLuint lens_flare_texture;
GLuint lens_shaft_texture;
GLuint lens_ghost_texture;
int32_t lens_ghost_count;
int32_t width;
int32_t height;
int32_t inner_width;
int32_t inner_height;
int32_t render_width[5];
int32_t render_height[5];
int32_t render_post_width[5];
int32_t render_post_height[5];
float_t render_post_width_scale;
float_t render_post_height_scale;
int32_t reduce_width[5];
int32_t reduce_height[5];
int32_t taa_texture_selector;
int32_t taa_texture;
float_t taa_blend;
vec3 view_point;
vec3 interest;
vec3 view_point_prev;
vec3 interest_prev;
mat4 cam_view_projection;
mat4 cam_view_projection_prev;
int32_t stage_index;
int32_t stage_index_prev;
bool reset_exposure;
int32_t screen_x_offset;
int32_t screen_y_offset;
int32_t screen_width;
int32_t screen_height;
int32_t update_lut;
int32_t saturate_lock;
ExposureCharaData exposure_chara_data[6];
int32_t exposure_history_counter;
int32_t exposure_query_index;
vec3 lens_flare_pos;
float_t lens_shaft_scale;
float_t lens_shaft_inv_scale;
float_t lens_flare_power;
float_t field_A10;
float_t lens_flare_appear_power;
texture* render_textures_data[16];
RenderTexture render_textures[16];
texture* movie_textures_data[1];
RenderTexture movie_textures[1];
int32_t aet_back;
renderer::DOF3* dof;
texture* transparency_tex[1];
renderer::Transparency* transparency;
int32_t saturate_index;
int32_t scene_fade_index;
int32_t tone_trans_index;
float_t saturate_coeff[2];
vec3 scene_fade_color[2];
float_t scene_fade_alpha[2];
int32_t scene_fade_blend_func[2];
vec3 tone_trans_scale[2];
vec3 tone_trans_offset[2];
vec3 tone_trans_start[2];
vec3 tone_trans_end[2];
tone_map_method tone_map;
float_t exposure;
float_t exposure_rate;
int32_t auto_exposure;
float_t gamma;
float_t gamma_rate;
int32_t saturate_power;
MagFilterType mag_filter;
float_t fade_alpha;
int32_t fade;
float_t lens_flare;
float_t lens_shaft;
float_t lens_ghost;
vec3 radius;
vec3 intensity;
int32_t update;
FrameTexture frame_texture[6];
void apply_post_process();
void bind_render_texture(bool aet_back = false);
void calc_exposure_chara_data();
void calc_projection_matrix(mat4* mat, float_t fov, float_t aspect, float_t z_near, float_t z_far,
float_t left_scale, float_t right_scale, float_t bottom_scale, float_t top_scale);
void ctrl();
void draw_quad(int32_t width, int32_t height, float_t s0, float_t t0, float_t s1, float_t t1,
float_t scale, float_t param_x, float_t param_y, float_t param_z, float_t param_w);
void draw_lens_flare();
void free();
void init_render_buffers(int32_t width, int32_t height,
int32_t ssaa, int32_t hd_res, int32_t ss_alpha_mask);
void init_tone_map_buffers();
int32_t movie_texture_set(texture* movie_texture);
void movie_texture_free(texture* movie_texture);
int32_t render_texture_set(texture* render_texture, bool task_photo);
void render_texture_free(texture* render_texture, bool task_photo);
void resize(int32_t width, int32_t height);
void take_ss(texture* tex, bool vertical, float_t horizontal_offset);
void transparency_combine(float_t alpha);
void transparency_copy();
void update_res(bool set, int32_t base_downsample);
private:
void apply_mlaa(int32_t destination, int32_t source, int32_t mlaa);
void apply_tone_map();
void calc_exposure();
void calc_gaussian_blur(float_t start, float_t step,
int32_t kernel_size, float_t radius_scale, float_t intensity_scale);
void calc_taa_blend();
void copy_to_frame_texture(GLuint pre_pp_tex, int32_t wight, int32_t height, GLuint post_pp_tex);
void draw_lens_ghost();
void downsample();
void get_blur();
void update_tone_map_lut();
};
static_assert(sizeof(rndr::Render) == 0x1510, "\"rndr::Render\" struct should have a size of 0x1510");
}
extern rndr::Render* render;