From 6607029894dd5b00e2bd0e6749231bf50acf1687 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Wed, 23 Aug 2023 16:35:39 +0300 Subject: [PATCH] Forgot few things --- src/CRE/shader.cpp | 14 +++++++++++--- src/CRE/shader.hpp | 4 +++- src/CRE/shader_dev.cpp | 1 - src/CRE/shader_ft.cpp | 7 ++++++- src/CRE/shader_ft.hpp | 1 + 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/CRE/shader.cpp b/src/CRE/shader.cpp index c1c3af2b..0a74ff24 100644 --- a/src/CRE/shader.cpp +++ b/src/CRE/shader.cpp @@ -291,8 +291,8 @@ void shader::unbind() { gl_state_use_program(0); } -shader_set_data::shader_set_data() : size(), shaders(), curr_shader(), -primitive_restart(), primitive_restart_index(), get_index_by_name_func() { +shader_set_data::shader_set_data() : size(), shaders(), curr_shader(), primitive_restart(), +primitive_restart_index(), get_index_by_name_func(), get_name_by_index_func() { } @@ -393,6 +393,12 @@ int32_t shader_set_data::get_index_by_name(const char* name) { } const char* shader_set_data::get_name_by_index(int32_t index) { + if (get_name_by_index_func) { + const char* name = get_name_by_index_func(index); + if (name) + return name; + } + if (index >= 0 && index < size) return shaders[index].name; return 0; @@ -401,7 +407,7 @@ const char* shader_set_data::get_name_by_index(int32_t index) { void shader_set_data::load(farc* f, bool ignore_cache, const char* name, const shader_table* shaders_table, const size_t size, const shader_bind_func* bind_func_table, const size_t bind_func_table_size, - PFNSHADERGETINDEXFUNCPROC get_index_by_name) { + PFNSHADERGETINDEXFUNCPROC get_index_by_name, PFNSHADERGETNAMEFUNCPROC get_name_by_index) { if (!this || !f || !shaders_table || !size) return; @@ -704,6 +710,7 @@ void shader_set_data::load(farc* f, bool ignore_cache, shader_cache_farc.write(temp_buf, FARC_COMPRESS_FArC, false); this->get_index_by_name_func = get_index_by_name; + this->get_name_by_index_func = get_name_by_index; } void shader_set_data::set(uint32_t index) { @@ -758,6 +765,7 @@ void shader_set_data::unload() { this->shaders = 0; get_index_by_name_func = 0; + get_name_by_index_func = 0; } static GLuint shader_compile_shader(GLenum type, const char* data, const char* file) { diff --git a/src/CRE/shader.hpp b/src/CRE/shader.hpp index 996d4e63..a538608d 100644 --- a/src/CRE/shader.hpp +++ b/src/CRE/shader.hpp @@ -45,6 +45,7 @@ struct shader; struct shader_set_data; typedef int32_t (*PFNSHADERGETINDEXFUNCPROC)(const char* name); +typedef const char* (*PFNSHADERGETNAMEFUNCPROC)(int32_t index); typedef void (*PFNSHADERBINDFUNCPROC)(shader_set_data* set, shader* shad); @@ -93,6 +94,7 @@ struct shader_set_data { GLuint primitive_restart_index; PFNSHADERGETINDEXFUNCPROC get_index_by_name_func; + PFNSHADERGETNAMEFUNCPROC get_name_by_index_func; shader_set_data(); @@ -108,7 +110,7 @@ struct shader_set_data { void load(farc* f, bool ignore_cache, const char* name, const shader_table* shaders_table, const size_t size, const shader_bind_func* bind_func_table, const size_t bind_func_table_size, - PFNSHADERGETINDEXFUNCPROC get_index_by_name); + PFNSHADERGETINDEXFUNCPROC get_index_by_name, PFNSHADERGETNAMEFUNCPROC get_name_by_index); void set(uint32_t index); void unload(); }; diff --git a/src/CRE/shader_dev.cpp b/src/CRE/shader_dev.cpp index e8b9f88a..1ea22d3d 100644 --- a/src/CRE/shader_dev.cpp +++ b/src/CRE/shader_dev.cpp @@ -38,7 +38,6 @@ const shader_table shader_dev_table[] = { }, }; -#undef shader_table_struct #undef shader_table_struct const size_t shader_dev_table_size = diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index f0a2b8e1..227017c4 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -3129,7 +3129,6 @@ const shader_table shader_ft_table[] = { shader_table_struct(TRANSPARENCY), // Added }; -#undef shader_table_struct #undef shader_table_struct const size_t shader_ft_table_size = @@ -3262,6 +3261,12 @@ int32_t shader_ft_get_index_by_name(const char* name) { return -1; } +const char* shader_ft_get_name_by_index(int32_t index) { + if (index == SHADER_FT_GLASEYE) + return "EYEBALL"; + return 0; +} + static void glass_eye_calc(glass_eye_struct* glass_eye) { float_t v2 = glass_eye->field_28; glass_eye->field_64 = glass_eye->field_2C / v2; diff --git a/src/CRE/shader_ft.hpp b/src/CRE/shader_ft.hpp index 6d4c8387..bbd1cd68 100644 --- a/src/CRE/shader_ft.hpp +++ b/src/CRE/shader_ft.hpp @@ -87,3 +87,4 @@ extern const size_t shader_ft_bind_func_table_size; extern shader_set_data shaders_ft; extern int32_t shader_ft_get_index_by_name(const char* name); +extern const char* shader_ft_get_name_by_index(int32_t index);