Fixed potential crash when using frame_texture
This commit is contained in:
@@ -163,11 +163,20 @@ HOOK(void, FASTCALL, rndr__Render__free, 0x00000001404AB900, rndr::Render* rend)
|
||||
rend->free();
|
||||
}
|
||||
|
||||
HOOK(void, FASTCALL, rndr__Render__frame_texture_free, 0x00000001404AE6C0, rndr::Render* rend) {
|
||||
return rend->frame_texture_free();
|
||||
}
|
||||
|
||||
HOOK(void, FASTCALL, rndr__Render__render_texture_set, 0x00000001404B1560,
|
||||
rndr::Render* rend, texture* render_texture, bool task_photo) {
|
||||
rend->render_texture_set(render_texture, task_photo);
|
||||
}
|
||||
|
||||
HOOK(int32_t, FASTCALL, rndr__Render__frame_texture_load, 0x00000001404B1600,
|
||||
rndr::Render* rend, int32_t slot, rndr::Render::FrameTextureType type, texture* tex) {
|
||||
return rend->frame_texture_load(slot, type, tex);
|
||||
}
|
||||
|
||||
HOOK(void, FASTCALL, rndr__Render__movie_texture_set, 0x00000001404B16A0,
|
||||
rndr::Render* rend, texture* movie_texture) {
|
||||
rend->movie_texture_set(movie_texture);
|
||||
@@ -183,6 +192,11 @@ HOOK(void, FASTCALL, rndr__Render__movie_texture_free, 0x00000001404B18F0,
|
||||
rend->movie_texture_free(movie_texture);
|
||||
}
|
||||
|
||||
HOOK(bool, FASTCALL, rndr__Render__frame_texture_unload, 0x00000001404B30A0,
|
||||
rndr::Render* rend, int32_t slot, texture* tex) {
|
||||
return rend->frame_texture_unload(slot, tex);
|
||||
}
|
||||
|
||||
HOOK(void, FASTCALL, rndr__RenderManager__rndpass_pre_proc, 0x0000000140502C90) {
|
||||
render_data_context rend_data_ctx(GL_REND_STATE_PRE_3D);
|
||||
rend_data_ctx.state.get();
|
||||
@@ -362,10 +376,13 @@ void hook_funcs() {
|
||||
INSTALL_HOOK(rndr__Render__init_post_process_buffers);
|
||||
INSTALL_HOOK(rndr__Render__init_render_buffers);
|
||||
INSTALL_HOOK(rndr__Render__free);
|
||||
INSTALL_HOOK(rndr__Render__frame_texture_free);
|
||||
INSTALL_HOOK(rndr__Render__render_texture_set);
|
||||
INSTALL_HOOK(rndr__Render__frame_texture_load);
|
||||
INSTALL_HOOK(rndr__Render__movie_texture_set);
|
||||
INSTALL_HOOK(rndr__Render__render_texture_free);
|
||||
INSTALL_HOOK(rndr__Render__movie_texture_free);
|
||||
INSTALL_HOOK(rndr__Render__frame_texture_unload);
|
||||
|
||||
INSTALL_HOOK(rndr__RenderManager__rndpass_pre_proc);
|
||||
INSTALL_HOOK(rndr__RenderManager__render_all);
|
||||
|
||||
@@ -508,6 +508,46 @@ namespace rndr {
|
||||
}
|
||||
}
|
||||
|
||||
void Render::frame_texture_free() {
|
||||
for (Render::FrameTexture& i : frame_texture) {
|
||||
for (Render::FrameTextureData& j : i.data) {
|
||||
j.texture = 0;
|
||||
j.render_texture.Free();
|
||||
j.type = FRAME_TEXTURE_MAX;
|
||||
}
|
||||
|
||||
i.capture = false;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t Render::frame_texture_load(int32_t slot, Render::FrameTextureType type, texture* tex) {
|
||||
if (!tex || slot < 0 || slot >= 6)
|
||||
return -1;
|
||||
|
||||
for (Render::FrameTextureData& i : frame_texture[slot].data)
|
||||
if (!i.texture) {
|
||||
i.render_texture.SetColorDepthTextures(tex->glid);
|
||||
i.texture = tex;
|
||||
i.type = type;
|
||||
return (int32_t)(&i - frame_texture[slot].data);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool Render::frame_texture_unload(int32_t slot, texture* tex) {
|
||||
if (!tex || slot < 0 || slot >= 6)
|
||||
return false;
|
||||
|
||||
for (Render::FrameTextureData& i : frame_texture[slot].data)
|
||||
if (i.texture == tex) {
|
||||
i.render_texture.Free();
|
||||
i.texture = 0;
|
||||
i.type = FRAME_TEXTURE_MAX;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Render::free() {
|
||||
if (transparency) {
|
||||
delete transparency;
|
||||
|
||||
@@ -185,6 +185,9 @@ namespace rndr {
|
||||
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(render_data_context& rend_data_ctx, const cam_data& cam);
|
||||
void frame_texture_free();
|
||||
int32_t frame_texture_load(int32_t slot, FrameTextureType type, texture* tex);
|
||||
bool frame_texture_unload(int32_t slot, texture* tex);
|
||||
void free();
|
||||
vec2 get_taa_offset();
|
||||
void init_render_buffers(int32_t width, int32_t height,
|
||||
|
||||
Reference in New Issue
Block a user