From 20b87a510cf69ed5bc7584bef4724e9ec29ccfa6 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Thu, 28 Dec 2023 02:32:17 +0300 Subject: [PATCH] Added other EtcObj types --- src/CRE/mdl/disp_manager.cpp | 264 +++++++++++++++++++++++--- src/CRE/mdl/draw_object.cpp | 6 +- src/CRE/render_manager.cpp | 6 - src/CRE/shader_dev.cpp | 27 --- src/CRE/shader_dev.hpp | 1 - src/ReDIVA/data_test/glitter_test.cpp | 3 +- src/ReDIVA/glitter_editor.cpp | 26 ++- src/ReDIVA/glitter_editor.hpp | 1 + src/ReDIVA/render.cpp | 27 +-- 9 files changed, 265 insertions(+), 96 deletions(-) diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index f58093e4..d50765ae 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -841,8 +841,89 @@ namespace mdl { gl_state_bind_element_array_buffer(0); } + static size_t gen_grid_vertices(std::vector& data, + int32_t w, int32_t h, int32_t ws, int32_t hs) { + const int32_t ws_half = ws / 2; + const int32_t hs_half = hs / 2; + const float_t w_flt = (float_t)w; + const float_t h_flt = (float_t)h; + + const float_t width = w_flt * 0.5f; + const float_t height = h_flt * 0.5f; + + data.reserve(6ULL * 2 * ws * 2); + for (int32_t i = 0; i <= ws; i++) { + if (i == ws_half) + continue; + + const float_t w = (float_t)i * (w_flt / ((float_t)ws_half * 2.0f)) - width; + data.push_back(w); + data.push_back(0.0f); + data.push_back(-height); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(w); + data.push_back(0.0f); + data.push_back(height); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + } + + data.reserve(6ULL * 2 * hs * 2); + for (int32_t i = 0; i <= hs; i++) { + if (i == hs_half) + continue; + + const float_t h = (float_t)i * (h_flt / ((float_t)hs_half * 2.0f)) - height; + data.push_back(-width); + data.push_back(0.0f); + data.push_back(h); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(width); + data.push_back(0.0f); + data.push_back(h); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + } + + size_t center_offset = data.size(); + + data.reserve(6ULL * 2 * 2 * 2); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(-height); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(height); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(-width); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(width); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + return center_offset; + } + static void gen_cube_vertices(std::vector& data) { - data.resize(sizeof(vec3) * 2 * 4 * 6); + data.resize(6ULL * 2 * 4 * 6); vec3* vtx = (vec3*)data.data(); *vtx++ = { -1.0f, -1.0f, -1.0f }; @@ -932,7 +1013,7 @@ namespace mdl { if (slices < 2 || stacks < 2) return; - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(radius); @@ -950,7 +1031,7 @@ namespace mdl { float_t xz = cosf(stack_angle); float_t y = sinf(stack_angle); - data.reserve(sizeof(vec3) * 2 * slices); + data.reserve(6ULL * 2 * slices); for (int32_t j = 0; j < slices; j++) { float_t slice_angle = (float_t)((double_t)j * slice_step); @@ -968,7 +1049,7 @@ namespace mdl { } } - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(-radius); @@ -1098,6 +1179,114 @@ namespace mdl { return wire_offset; } + static void gen_plane_vertices(std::vector& data) { + data.push_back(1.0f); + data.push_back(0.0f); + data.push_back(1.0f); + + data.push_back(0.0f); + data.push_back(1.0f); + data.push_back(0.0f); + + data.push_back(1.0f); + data.push_back(0.0f); + data.push_back(-1.0f); + + data.push_back(0.0f); + data.push_back(1.0f); + data.push_back(0.0f); + + data.push_back(-1.0f); + data.push_back(0.0f); + data.push_back(1.0f); + + data.push_back(0.0f); + data.push_back(1.0f); + data.push_back(0.0f); + + data.push_back(-1.0f); + data.push_back(0.0f); + data.push_back(-1.0f); + + data.push_back(0.0f); + data.push_back(1.0f); + data.push_back(0.0f); + } + + static void gen_line_vertices(std::vector& data, float_t length) { + length *= 0.5f; + + data.reserve(6ULL * 2); + + data.push_back(0.0f); + data.push_back(length); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(-length); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + } + + static void gen_cross_vertices(std::vector& data) { + data.reserve(6ULL * 2 * 6); + + data.push_back(-1.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(1.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(-1.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(1.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(-1.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(1.0f); + + data.push_back(0.0f); + data.push_back(0.0f); + data.push_back(0.0f); + } + static void gen_capsule_vertices(std::vector& data, int32_t slices, int32_t stacks, float_t length, float_t radius) { if (slices < 2 || stacks < 2) @@ -1112,7 +1301,7 @@ namespace mdl { length *= 0.5f; - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(radius + length); @@ -1130,7 +1319,7 @@ namespace mdl { float_t xz = cosf(stack_angle); float_t y = sinf(stack_angle); - data.reserve(sizeof(vec3) * 2 * slices); + data.reserve(6ULL * 2 * slices); for (int32_t j = 0; j < slices; j++) { float_t slice_angle = (float_t)((double_t)j * slice_step); @@ -1153,7 +1342,7 @@ namespace mdl { float_t xz = cosf(stack_angle); float_t y = sinf(stack_angle); - data.reserve(sizeof(vec3) * 2 * slices); + data.reserve(6ULL * 2 * slices); for (int32_t j = 0; j < slices; j++) { float_t slice_angle = (float_t)((double_t)j * slice_step); @@ -1171,7 +1360,7 @@ namespace mdl { } } - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(-radius - length); @@ -1320,7 +1509,7 @@ namespace mdl { length *= 0.5f; - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(radius + length); @@ -1340,7 +1529,7 @@ namespace mdl { float_t y_n = y; y *= radius + length; - data.reserve(sizeof(vec3) * 2 * slices); + data.reserve(6ULL * 2 * slices); for (int32_t j = 0; j < slices; j++) { float_t slice_angle = (float_t)((double_t)j * slice_step); @@ -1358,7 +1547,7 @@ namespace mdl { } } - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(-radius - length); @@ -1383,7 +1572,7 @@ namespace mdl { if (slices < 2 || stacks < 0) return; - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(half_height); @@ -1400,7 +1589,7 @@ namespace mdl { float_t y = lerp_def(half_height, -half_height, (float_t)i / (float_t)stacks); float_t radius = lerp_def(top, base, (float_t)i / (float_t)stacks); - data.reserve(sizeof(vec3) * 2 * slices); + data.reserve(6ULL * 2 * slices); for (int32_t j = 0; j < slices; j++) { float_t slice_angle = (float_t)((double_t)j * slice_step); @@ -1418,7 +1607,7 @@ namespace mdl { } } - data.reserve(sizeof(vec3) * 2); + data.reserve(6ULL * 2); data.push_back(0.0f); data.push_back(-half_height); @@ -1584,6 +1773,20 @@ namespace mdl { case mdl::ETC_OBJ_LINE: { EtcObjLine& line = etc->data.line; + vec3 origin = (line.pos[0] + line.pos[1]) * 0.5f; + mat4_add_translate(&mat, &origin, &mat); + + vec3 dir = vec3::normalize(line.pos[1] - line.pos[0]); + vec3 up = { 0.0f, 1.0f, 0.0f }; + vec3 axis; + float_t angle; + Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir); + + mat4 m = mat4_identity; + mat4_mul_rotation(&m, &axis, angle, &m); + mat4_mul(&m, &mat, &mat); + + length = vec3::distance(line.pos[0], line.pos[1]); } break; case mdl::ETC_OBJ_CROSS: { EtcObjCross& cross = etc->data.cross; @@ -1658,6 +1861,7 @@ namespace mdl { && fabsf(i.data.cone.base - etc->data.cone.base) < 0.00001f && fabsf(i.data.cone.height - etc->data.cone.height) < 0.00001f || type == mdl::ETC_OBJ_LINE + && fabsf(vec3::distance(i.data.line.pos[0], i.data.line.pos[1]) - length) < 0.00001f || type == mdl::ETC_OBJ_CROSS || type == mdl::ETC_OBJ_CAPSULE // Added && i.data.capsule.slices == etc->data.capsule.slices @@ -1742,7 +1946,10 @@ namespace mdl { case mdl::ETC_OBJ_GRID: { EtcObjGrid& grid = etc->data.grid; - etc_vertex_array->count = (GLsizei)(vtx_data.size() / 6); + size_t center_offset = gen_grid_vertices(vtx_data, grid.w, grid.h, grid.ws, grid.hs); + + etc_vertex_array->offset = 0; + etc_vertex_array->count = (GLsizei)(center_offset / 6); } break; case mdl::ETC_OBJ_CUBE: { EtcObjCube& cube = etc->data.cube; @@ -1769,6 +1976,8 @@ namespace mdl { case mdl::ETC_OBJ_PLANE: { EtcObjPlane& plane = etc->data.plane; + gen_plane_vertices(vtx_data); + etc_vertex_array->count = (GLsizei)(vtx_data.size() / 6); } break; case mdl::ETC_OBJ_CONE: { @@ -1779,11 +1988,15 @@ namespace mdl { case mdl::ETC_OBJ_LINE: { EtcObjLine& line = etc->data.line; + gen_line_vertices(vtx_data, length); + etc_vertex_array->count = (GLsizei)(vtx_data.size() / 6); } break; case mdl::ETC_OBJ_CROSS: { EtcObjCross& cross = etc->data.cross; + gen_cross_vertices(vtx_data); + etc_vertex_array->count = (GLsizei)(vtx_data.size() / 6); } break; case mdl::ETC_OBJ_CAPSULE: { // Added @@ -1976,7 +2189,7 @@ namespace mdl { mat4 mat; mat4_translate(&i, &mat); - mdl::DispManager::entry_obj_etc(&mat, &etc); + entry_obj_etc(&mat, &etc); } if (show_mat_center && type == OBJ_TYPE_TRANSLUCENT) @@ -1990,7 +2203,7 @@ namespace mdl { mat4 mat; mat4_translate(&i, &mat); - mdl::DispManager::entry_obj_etc(&mat, &etc); + entry_obj_etc(&mat, &etc); } } @@ -2836,12 +3049,12 @@ namespace mdl { return entry_obj_by_object_info(mat, obj_info, blend_color, 0, 0, 0, 0, false, local); } - bool mdl::DispManager::entry_obj_by_object_info_instanced(object_info obj_info, + bool DispManager::entry_obj_by_object_info_instanced(object_info obj_info, const std::vector& instances, float_t alpha) { return entry_obj_by_object_info_instanced(obj_info, instances, 1.0, 1.0, 1.0, alpha); } - bool mdl::DispManager::entry_obj_by_object_info_instanced(object_info obj_info, + bool DispManager::entry_obj_by_object_info_instanced(object_info obj_info, const std::vector& instances, float_t r, float_t g, float_t b, float_t a) { const vec4 blend_color = { r, g, b, a }; if (!instances.size()) @@ -2921,11 +3134,11 @@ namespace mdl { data->init_etc(this, mat, etc); if (etc->color.a == 0xFF) { if (!local && (obj_flags & OBJ_SHADOW)) - mdl::DispManager::entry_list((mdl::ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data); - mdl::DispManager::entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL : OBJ_TYPE_OPAQUE, data); + entry_list((mdl::ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data); + entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL : OBJ_TYPE_OPAQUE, data); } else - mdl::DispManager::entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL : OBJ_TYPE_TRANSLUCENT, data); + entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL : OBJ_TYPE_TRANSLUCENT, data); } void DispManager::entry_obj_user(const mat4* mat, UserArgsFunc func, void* data, ObjType type) { @@ -2996,7 +3209,10 @@ namespace mdl { case mdl::ETC_OBJ_SPHERE: case mdl::ETC_OBJ_PLANE: case mdl::ETC_OBJ_CONE: + break; case mdl::ETC_OBJ_LINE: + length = vec3::distance(etc->data.line.pos[0], etc->data.line.pos[1]); + break; case mdl::ETC_OBJ_CROSS: break; case mdl::ETC_OBJ_CAPSULE: // Added @@ -3040,7 +3256,9 @@ namespace mdl { return i.vertex_array; break; case mdl::ETC_OBJ_LINE: - return i.vertex_array; + if (fabsf(vec3::distance(i.data.line.pos[0], i.data.line.pos[1]) - length) < 0.00001f) + return i.vertex_array; + break; case mdl::ETC_OBJ_CROSS: return i.vertex_array; case mdl::ETC_OBJ_CAPSULE: // Added diff --git a/src/CRE/mdl/draw_object.cpp b/src/CRE/mdl/draw_object.cpp index 998cc539..108798d8 100644 --- a/src/CRE/mdl/draw_object.cpp +++ b/src/CRE/mdl/draw_object.cpp @@ -122,7 +122,11 @@ namespace mdl { shaders_ft.draw_elements(GL_TRIANGLES, etc->count, GL_UNSIGNED_INT, 0); break; case mdl::ETC_OBJ_GRID: + glLineWidth(0.2f); shaders_ft.draw_arrays(GL_LINES, 0, etc->count); + glLineWidth(2.0f); + shaders_ft.draw_arrays(GL_LINES, (GLint)etc->count, 4); + glLineWidth(1.0f); break; case mdl::ETC_OBJ_CUBE: if (etc->data.sphere.wire) @@ -137,7 +141,7 @@ namespace mdl { shaders_ft.draw_elements(GL_TRIANGLES, etc->count, GL_UNSIGNED_INT, (void*)etc->offset); break; case mdl::ETC_OBJ_PLANE: - shaders_ft.draw_arrays(GL_TRIANGLES, 0, etc->count); + shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, etc->count); break; case mdl::ETC_OBJ_CONE: if (etc->data.cone.wire) diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index e2491459..62253a97 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -837,12 +837,6 @@ namespace rndr { Glitter::glt_particle_manager->DispScenes(Glitter::DISP_OPAQUE); - extern bool draw_grid_3d; - if (draw_grid_3d) { - extern void draw_pass_3d_grid(render_context * rctx); - draw_pass_3d_grid(rctx); - } - gl_state_enable_depth_test(); gl_state_set_depth_mask(GL_TRUE); if (draw_pass_3d[DRAW_PASS_3D_TRANSPARENT]) diff --git a/src/CRE/shader_dev.cpp b/src/CRE/shader_dev.cpp index 23c8e4ad..eaa36eef 100644 --- a/src/CRE/shader_dev.cpp +++ b/src/CRE/shader_dev.cpp @@ -25,30 +25,14 @@ static const int32_t glitter_particle_wireframe_fpt_unival_max[] = { -1, }; -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 uniform_name GRID_uniform[] = { - U_INVALID, -}; - static const bool GLITTER_PT_WIREFRAME_permut[] = { false, }; -static const bool GRID_permut[] = { - false, -}; - static const shader_sub_table GLITTER_PT_WIREFRAME_table[] = { { SHADER_DEV_SUB_GLITTER_PT_WIREFRAME, @@ -59,16 +43,6 @@ 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 +64,6 @@ const shader_table shader_dev_table[] = { 0, 0, }, - 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 e4cbbd97..21a11c15 100644 --- a/src/CRE/shader_dev.hpp +++ b/src/CRE/shader_dev.hpp @@ -12,7 +12,6 @@ enum shader_dev_enum { SHADER_DEV_FFP = 0, SHADER_DEV_GLITTER_PT_WIREFRAME, - SHADER_DEV_GRID, SHADER_DEV_END, SHADER_DEV_MAX, }; diff --git a/src/ReDIVA/data_test/glitter_test.cpp b/src/ReDIVA/data_test/glitter_test.cpp index 5d35938e..9464622a 100644 --- a/src/ReDIVA/data_test/glitter_test.cpp +++ b/src/ReDIVA/data_test/glitter_test.cpp @@ -54,7 +54,6 @@ extern int32_t height; extern render_context* rctx_ptr; extern bool input_reset; extern bool input_locked; -extern bool draw_grid_3d; TaskDataTestGlitterParticle::TaskDataTestGlitterParticle() : hash(), dw(), frame(), auto_and_repeat(), reload(), pv_mode(), show_grid(), rebuild_geff() { @@ -173,7 +172,7 @@ bool TaskDataTestGlitterParticle::dest() { void TaskDataTestGlitterParticle::disp() { if (show_grid) { mdl::EtcObj etc(mdl::ETC_OBJ_GRID); - etc.color = 0xFF000000; + etc.color = color_black; etc.data.grid.w = 50; etc.data.grid.h = 50; etc.data.grid.ws = 50; diff --git a/src/ReDIVA/glitter_editor.cpp b/src/ReDIVA/glitter_editor.cpp index 0d5df1e3..f2a90e9c 100644 --- a/src/ReDIVA/glitter_editor.cpp +++ b/src/ReDIVA/glitter_editor.cpp @@ -73,7 +73,6 @@ extern vec2i internal_2d_res; extern vec2i internal_3d_res; extern bool input_reset; extern bool input_locked; -extern bool draw_grid_3d; extern bool close; extern bool global_context_menu; @@ -340,10 +339,10 @@ void GlitterEditor::CurveEditor::SetFlag(const Glitter::CurveTypeFlags type_flag GlitterEditor::GlitterEditor() : test(), create_popup(), load(), load_wait(), load_data(), load_data_wait(), load_popup(), load_data_popup(), load_error_list_popup(), save(), save_popup(), save_compress(), save_encrypt(), close(), close_editor(), input_play(), input_reload(), input_pause(), input_pause_temp(), input_reset(), -effect_group_add(), draw_flags(), resource_flags(), effect_flags(), emitter_flags(), particle_flags(), -load_glt_type(), save_glt_type(), load_data_type(), frame_counter(), old_frame_counter(), -start_frame(), end_frame(), counter(), effect_group(), scene(), hash(), selected_type(), -selected_resource(), selected_effect(), selected_emitter(), selected_particle(), +effect_group_add(), show_grid(), draw_flags(), resource_flags(), effect_flags(), emitter_flags(), +particle_flags(), load_glt_type(), save_glt_type(), load_data_type(), frame_counter(), +old_frame_counter(), start_frame(), end_frame(), counter(), effect_group(), scene(), hash(), +selected_type(), selected_resource(), selected_effect(), selected_emitter(), selected_particle(), selected_edit_resource(), selected_edit_effect(), selected_edit_emitter(), selected_edit_particle() { } @@ -364,7 +363,6 @@ bool GlitterEditor::init() { Glitter::glt_particle_manager->emission = 1.0f; Glitter::glt_particle_manager->draw_all = true; Glitter::glt_particle_manager->draw_all_mesh = true; - draw_grid_3d = true; reset(); dtm_stg_load(0); @@ -1166,8 +1164,6 @@ bool GlitterEditor::dest() { dtm_stg_unload(); Glitter::glt_particle_manager->FreeSceneEffect(scene_counter); Glitter::glt_particle_manager->UnloadEffectGroup(hash); - - draw_grid_3d = false; return true; } @@ -1177,6 +1173,16 @@ void GlitterEditor::disp() { if (draw_flags & GLITTER_EDITOR_DISP_EMITTER_TYPE) glitter_editor_draw_emitter_type(this); + + if (show_grid) { + mdl::EtcObj etc(mdl::ETC_OBJ_GRID); + etc.color = color_black; + etc.data.grid.w = 50; + etc.data.grid.h = 50; + etc.data.grid.ws = 50; + etc.data.grid.hs = 50; + rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + } } void GlitterEditor::window() { @@ -2415,7 +2421,7 @@ static void glitter_editor_test_window(GlitterEditor* glt_edt) { ImGui::Separator(); - ImGui::CheckboxEnterKeyPressed("Show Grid", &draw_grid_3d); + ImGui::CheckboxEnterKeyPressed("Show Grid", &glt_edt->show_grid); ImGui::CheckboxEnterKeyPressed("Draw All", &Glitter::glt_particle_manager->draw_all); @@ -3107,7 +3113,7 @@ static void glitter_editor_play_manager(GlitterEditor* glt_edt) { ImGui::Separator(); - ImGui::CheckboxEnterKeyPressed("Grid", &draw_grid_3d); + ImGui::CheckboxEnterKeyPressed("Show Grid", &glt_edt->show_grid); ImGui::CheckboxEnterKeyPressed("Draw All", &Glitter::glt_particle_manager->draw_all); diff --git a/src/ReDIVA/glitter_editor.hpp b/src/ReDIVA/glitter_editor.hpp index aaefe0fe..541f9566 100644 --- a/src/ReDIVA/glitter_editor.hpp +++ b/src/ReDIVA/glitter_editor.hpp @@ -93,6 +93,7 @@ public: bool input_pause_temp; bool input_reset; bool effect_group_add; + bool show_grid; glitter_editor_disp_flags draw_flags; glitter_editor_flags resource_flags; glitter_editor_flags effect_flags; diff --git a/src/ReDIVA/render.cpp b/src/ReDIVA/render.cpp index fc56e9e5..a21a1e16 100644 --- a/src/ReDIVA/render.cpp +++ b/src/ReDIVA/render.cpp @@ -120,8 +120,7 @@ render_data* render; ImFont* imgui_font_arial; -bool draw_imgui = true; -bool draw_grid_3d = false; +bool draw_imgui = true; const double_t render_scale_table[] = { 1.0 / 4.0, // 25% @@ -334,30 +333,6 @@ void render_set_scale_index(int32_t index) { scale_index = index >= 0 && index < RENDER_SCALE_MAX ? index : RENDER_SCALE_100; } -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_dev.set(SHADER_DEV_GRID); - render->grid_ubo.Bind(0); - gl_state_bind_vertex_array(render->grid_vao); - shaders_dev.draw_arrays(GL_LINES, 0, (GLsizei)grid_vertex_count); - gl_state_use_program(0); - - gl_state_disable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_blend(); -} - float_t rob_frame = 0.0f; render_data::render_data() : grid_vao() {