diff --git a/src/CRE/shader_dev.cpp b/src/CRE/shader_dev.cpp index 29dfe192..23c8e4ad 100644 --- a/src/CRE/shader_dev.cpp +++ b/src/CRE/shader_dev.cpp @@ -12,19 +12,11 @@ enum shader_dev_sub_enum { SHADER_DEV_SUB_SHADER_FFP = 0, - SHADER_DEV_SUB_CLAMP_COLORS, SHADER_DEV_SUB_GLITTER_PT_WIREFRAME, + SHADER_DEV_SUB_GRID, SHADER_DEV_SUB_SHADER_END, }; -static const int32_t clamp_colors_vpt_unival_max[] = { - -1, -}; - -static const int32_t clamp_colors_fpt_unival_max[] = { - -1, -}; - static const int32_t glitter_particle_wireframe_vpt_unival_max[] = { -1, }; @@ -33,30 +25,28 @@ static const int32_t glitter_particle_wireframe_fpt_unival_max[] = { -1, }; -static const uniform_name CLAMP_COLORS_uniform[] = { - U_INVALID, +static const int32_t grid_vpt_unival_max[] = { + -1, +}; + +static const int32_t grid_fpt_unival_max[] = { + -1, }; static const uniform_name GLITTER_PT_WIREFRAME_uniform[] = { U_INVALID, }; -static const bool CLAMP_COLORS_permut[] = { - false, +static const uniform_name GRID_uniform[] = { + U_INVALID, }; static const bool GLITTER_PT_WIREFRAME_permut[] = { false, }; -static const shader_sub_table CLAMP_COLORS_table[] = { - { - SHADER_DEV_SUB_CLAMP_COLORS, - clamp_colors_vpt_unival_max, - clamp_colors_fpt_unival_max, - "clamp_colors", - "clamp_colors", - }, +static const bool GRID_permut[] = { + false, }; static const shader_sub_table GLITTER_PT_WIREFRAME_table[] = { @@ -69,6 +59,16 @@ static const shader_sub_table GLITTER_PT_WIREFRAME_table[] = { }, }; +static const shader_sub_table GRID_table[] = { + { + SHADER_DEV_SUB_GRID, + grid_vpt_unival_max, + grid_fpt_unival_max, + "grid", + "grid", + }, +}; + #define shader_table_struct(n) \ { \ #n, \ @@ -90,7 +90,7 @@ const shader_table shader_dev_table[] = { 0, 0, }, - shader_table_struct(CLAMP_COLORS), + shader_table_struct(GRID), shader_table_struct(GLITTER_PT_WIREFRAME), }; diff --git a/src/CRE/shader_dev.hpp b/src/CRE/shader_dev.hpp index 859e1ece..e4cbbd97 100644 --- a/src/CRE/shader_dev.hpp +++ b/src/CRE/shader_dev.hpp @@ -11,8 +11,8 @@ enum shader_dev_enum { SHADER_DEV_FFP = 0, - SHADER_DEV_CLAMP_COLORS, SHADER_DEV_GLITTER_PT_WIREFRAME, + SHADER_DEV_GRID, SHADER_DEV_END, SHADER_DEV_MAX, }; diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index 851867e2..5bbfb9c4 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -117,7 +117,6 @@ enum shader_ft_sub_enum { SHADER_FT_SUB_DOF_DOWNSAMPLE, // Added SHADER_FT_SUB_DOF_MAIN_FILTER, // Added SHADER_FT_SUB_DOF_UPSAMPLE, // Added - SHADER_FT_SUB_GRID, // Added SHADER_FT_SUB_TRANSPARENCY, // Added SHADER_FT_SUB_SHADER_END, }; @@ -1049,14 +1048,6 @@ static const int32_t dof_upsample_fpt_unival_max[] = { // Added 1, }; -static const int32_t grid_vpt_unival_max[] = { // Added - -1, -}; - -static const int32_t grid_fpt_unival_max[] = { // Added - -1, -}; - static const int32_t transparency_vpt_unival_max[] = { // Added -1, }; @@ -2043,16 +2034,6 @@ static const shader_sub_table DOF_table[] = { // Added }, }; -static const shader_sub_table GRID_table[] = { // Added - { - SHADER_FT_SUB_GRID, - grid_vpt_unival_max, - grid_fpt_unival_max, - "grid", - "grid", - }, -}; - static const shader_sub_table TRANSPARENCY_table[] = { // Added { SHADER_FT_SUB_TRANSPARENCY, @@ -3109,7 +3090,6 @@ const shader_table shader_ft_table[] = { shader_table_struct(IMGFILT), shader_table_struct(SPRITE), shader_table_struct(DOF), // Added - shader_table_struct(GRID), // Added shader_table_struct(TRANSPARENCY), // Added }; diff --git a/src/CRE/shader_ft.hpp b/src/CRE/shader_ft.hpp index 7860f5bd..fa70aa39 100644 --- a/src/CRE/shader_ft.hpp +++ b/src/CRE/shader_ft.hpp @@ -74,7 +74,6 @@ enum shader_ft_enum { SHADER_FT_IMGFILT, SHADER_FT_SPRITE, SHADER_FT_DOF, // Added - SHADER_FT_GRID, // Added SHADER_FT_TRANSPARENCY, // Added SHADER_FT_END, SHADER_FT_MAX, diff --git a/src/ReDIVA/render.cpp b/src/ReDIVA/render.cpp index 03b225da..fc56e9e5 100644 --- a/src/ReDIVA/render.cpp +++ b/src/ReDIVA/render.cpp @@ -102,6 +102,7 @@ struct common_data_struct { struct render_data { GLuint grid_vao; GL::ArrayBuffer grid_vbo; + GL::UniformBuffer grid_ubo; render_data(); ~render_data(); @@ -336,16 +337,20 @@ void render_set_scale_index(int32_t index) { void draw_pass_3d_grid(render_context* rctx) { rctx->camera->update_data(); + mat4 view_projection; + mat4_transpose(&rctx->camera->view_projection, &view_projection); + render->grid_ubo.WriteMemory(view_projection); + gl_state_enable_blend(); gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); gl_state_set_blend_equation(GL_FUNC_ADD); gl_state_enable_depth_test(); gl_state_set_depth_mask(GL_TRUE); - shaders_ft.set(SHADER_FT_GRID); - rctx->obj_scene_ubo.Bind(0); + shaders_dev.set(SHADER_DEV_GRID); + render->grid_ubo.Bind(0); gl_state_bind_vertex_array(render->grid_vao); - shaders_ft.draw_arrays(GL_LINES, 0, (GLsizei)grid_vertex_count); + shaders_dev.draw_arrays(GL_LINES, 0, (GLsizei)grid_vertex_count); gl_state_use_program(0); gl_state_disable_depth_test(); @@ -449,10 +454,13 @@ void render_data::load_common_data() { gl_state_bind_array_buffer(0); gl_state_bind_vertex_array(0); + grid_ubo.Create(sizeof(mat4)); + free(grid_verts); } void render_data::unload_common_data() { + grid_ubo.Destroy(); grid_vbo.Destroy(); if (grid_vao) { diff --git a/src/ReDIVA/x_pv_game.cpp b/src/ReDIVA/x_pv_game.cpp index e32b2f44..2445ef3c 100644 --- a/src/ReDIVA/x_pv_game.cpp +++ b/src/ReDIVA/x_pv_game.cpp @@ -5506,9 +5506,11 @@ bool x_pv_game::ctrl() { gl_state_bind_framebuffer(d3d_gl_fbo[next_idx]); gl_state_active_bind_texture_2d(0, tex->tex); glViewport(0, 0, width, height); - shaders_dev.set(SHADER_DEV_CLAMP_COLORS); + uniform_value[U_REDUCE] = 0; + shaders_ft.set(SHADER_FT_REDUCE); glBeginQuery(GL_SAMPLES_PASSED, d3d_query[next_idx]); - RenderTexture::Draw(&shaders_dev); + rctx_ptr->render.draw_quad(width, height, + 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); glEndQuery(GL_SAMPLES_PASSED); gl_state_bind_texture_2d(0); gl_state_bind_framebuffer(0);