diff --git a/include/reign.h b/include/reign.h index 7b91d40..2717d25 100644 --- a/include/reign.h +++ b/include/reign.h @@ -98,7 +98,6 @@ struct RE_back_cg { struct RE_plugin { struct draw_plugin plugin; - enum RE_plugin_version version; int sprite; int nr_instances; struct RE_instance **instances; diff --git a/src/3d/3d_internal.h b/src/3d/3d_internal.h index 4aeab24..3d34815 100644 --- a/src/3d/3d_internal.h +++ b/src/3d/3d_internal.h @@ -193,6 +193,8 @@ struct billboard_texture { // reign.c +extern enum RE_plugin_version re_plugin_version; + void RE_instance_update_local_transform(struct RE_instance *inst); // model.c @@ -208,7 +210,7 @@ struct archive_data *RE_get_aar_entry(struct archive *aar, const char *dir, cons // renderer.c -struct RE_renderer *RE_renderer_new(enum RE_plugin_version version); +struct RE_renderer *RE_renderer_new(void); void RE_renderer_free(struct RE_renderer *r); void RE_renderer_set_viewport_size(struct RE_renderer *r, int width, int height); bool RE_renderer_load_billboard_texture(struct RE_renderer *r, int cg_no); diff --git a/src/3d/reign.c b/src/3d/reign.c index c34cbe7..db1a712 100644 --- a/src/3d/reign.c +++ b/src/3d/reign.c @@ -34,6 +34,8 @@ #include "vm.h" #include "xsystem4.h" +enum RE_plugin_version re_plugin_version; + static struct RE_instance *create_instance(struct RE_plugin *plugin) { struct RE_instance *instance = xcalloc(1, sizeof(struct RE_instance)); @@ -207,6 +209,8 @@ static void update_bones(struct RE_instance *inst) struct RE_plugin *RE_plugin_new(enum RE_plugin_version version) { + re_plugin_version = version; + char *aar_path = gamedir_path("Data/ReignData.red"); int error = ARCHIVE_SUCCESS; struct archive *aar = (struct archive *)aar_open(aar_path, MMAP_IF_64BIT, &error); @@ -220,7 +224,6 @@ struct RE_plugin *RE_plugin_new(enum RE_plugin_version version) return NULL; struct RE_plugin *plugin = xcalloc(1, sizeof(struct RE_plugin)); - plugin->version = version; plugin->plugin.name = "ReignEngine"; plugin->plugin.update = RE_render; plugin->plugin.to_json = RE_to_json; @@ -262,7 +265,7 @@ bool RE_plugin_bind(struct RE_plugin *plugin, int sprite) struct sact_sprite *sp = sact_try_get_sprite(sprite); if (!sp) return false; - plugin->renderer = RE_renderer_new(plugin->version); + plugin->renderer = RE_renderer_new(); plugin->sprite = sprite; sprite_bind_plugin(sp, &plugin->plugin); struct texture *texture = sprite_get_texture(sp); diff --git a/src/3d/renderer.c b/src/3d/renderer.c index 1c09af9..2bf13ad 100644 --- a/src/3d/renderer.c +++ b/src/3d/renderer.c @@ -59,7 +59,7 @@ enum draw_phase { DRAW_TRANSPARENT, }; -static GLuint load_shader(const char *vertex_shader_path, const char *fragment_shader_path, enum RE_plugin_version version) +static GLuint load_shader(const char *vertex_shader_path, const char *fragment_shader_path) { char defines[256]; snprintf(defines, sizeof(defines), @@ -68,7 +68,7 @@ static GLuint load_shader(const char *vertex_shader_path, const char *fragment_s "#define ENGINE %d", RE_REIGN_PLUGIN, RE_TAPIR_PLUGIN, - version); + re_plugin_version); GLuint program = glCreateProgram(); GLuint vertex_shader = gfx_load_shader_file(vertex_shader_path, GL_VERTEX_SHADER, defines); GLuint fragment_shader = gfx_load_shader_file(fragment_shader_path, GL_FRAGMENT_SHADER, defines); @@ -101,12 +101,12 @@ static GLuint load_shader(const char *vertex_shader_path, const char *fragment_s return program; } -static void init_shadow_renderer(struct shadow_renderer *sr, enum RE_plugin_version version) +static void init_shadow_renderer(struct shadow_renderer *sr) { GLint orig_fbo; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &orig_fbo); - sr->program = load_shader("shaders/reign_shadow.v.glsl", "shaders/reign_shadow.f.glsl", version); + sr->program = load_shader("shaders/reign_shadow.v.glsl", "shaders/reign_shadow.f.glsl"); sr->local_transform = glGetUniformLocation(sr->program, "local_transform"); sr->view_transform = glGetUniformLocation(sr->program, "view_transform"); sr->has_bones = glGetUniformLocation(sr->program, "has_bones"); @@ -136,13 +136,13 @@ static void destroy_shadow_renderer(struct shadow_renderer *sr) glDeleteProgram(sr->program); } -static void init_outline_renderer(struct outline_renderer *or, enum RE_plugin_version version) +static void init_outline_renderer(struct outline_renderer *or) { - if (version < RE_TAPIR_PLUGIN) { + if (re_plugin_version < RE_TAPIR_PLUGIN) { or->program = 0; return; } - or->program = load_shader("shaders/reign_outline.v.glsl", "shaders/reign_outline.f.glsl", version); + or->program = load_shader("shaders/reign_outline.v.glsl", "shaders/reign_outline.f.glsl"); or->local_transform = glGetUniformLocation(or->program, "local_transform"); or->view_transform = glGetUniformLocation(or->program, "view_transform"); or->proj_transform = glGetUniformLocation(or->program, "proj_transform"); @@ -203,11 +203,11 @@ static void destroy_billboard_mesh(struct RE_renderer *r) glDeleteBuffers(1, &r->billboard_attr_buffer); } -struct RE_renderer *RE_renderer_new(enum RE_plugin_version version) +struct RE_renderer *RE_renderer_new(void) { struct RE_renderer *r = xcalloc(1, sizeof(struct RE_renderer)); - r->program = load_shader("shaders/reign.v.glsl", "shaders/reign.f.glsl", version); + r->program = load_shader("shaders/reign.v.glsl", "shaders/reign.f.glsl"); r->view_transform = glGetUniformLocation(r->program, "view_transform"); r->texture = glGetUniformLocation(r->program, "tex"); r->local_transform = glGetUniformLocation(r->program, "local_transform"); @@ -258,8 +258,8 @@ struct RE_renderer *RE_renderer_new(enum RE_plugin_version version) glGenRenderbuffers(1, &r->depth_buffer); - init_shadow_renderer(&r->shadow, version); - init_outline_renderer(&r->outline, version); + init_shadow_renderer(&r->shadow); + init_outline_renderer(&r->outline); init_billboard_mesh(r); r->billboard_textures = ht_create(256); r->last_frame_timestamp = SDL_GetTicks(); @@ -913,7 +913,7 @@ void RE_render(struct sact_sprite *sp) if (!r || plugin->suspended) return; - if (plugin->version == RE_TAPIR_PLUGIN) { + if (re_plugin_version == RE_TAPIR_PLUGIN) { uint32_t timestamp = SDL_GetTicks(); RE_build_model(plugin, timestamp - r->last_frame_timestamp); r->last_frame_timestamp = timestamp;