diff --git a/src/DivaGL/Glitter/glitter.hpp b/src/DivaGL/Glitter/glitter.hpp index 67c9e8a..e84f783 100644 --- a/src/DivaGL/Glitter/glitter.hpp +++ b/src/DivaGL/Glitter/glitter.hpp @@ -347,7 +347,6 @@ namespace Glitter { struct RenderScene; struct RenderSceneX; - struct BatchShaderData; struct Scene; struct SceneX; class GltParticleManager; diff --git a/src/DivaGL/Glitter/render_scene.cpp b/src/DivaGL/Glitter/render_scene.cpp index 0201d94..70d5ecd 100644 --- a/src/DivaGL/Glitter/render_scene.cpp +++ b/src/DivaGL/Glitter/render_scene.cpp @@ -128,8 +128,8 @@ namespace Glitter { gl_state_set_blend_func(blend_src, blend_dst); gl_state_set_blend_equation(GL_FUNC_ADD); - GLuint texture = rctx->empty_texture_2d; - GLuint mask_texture = rctx->empty_texture_2d; + GLuint texture = rctx->empty_texture_2d->glid; + GLuint mask_texture = rctx->empty_texture_2d->glid; if (rend_group->type != PARTICLE_LINE && rend_group->texture) { texture = rend_group->texture; if (rend_group->mask_texture) { @@ -1975,8 +1975,8 @@ namespace Glitter { gl_state_set_blend_func(blend_src, blend_dst); gl_state_set_blend_equation(GL_FUNC_ADD); - GLuint texture = rctx->empty_texture_2d; - GLuint mask_texture = rctx->empty_texture_2d; + GLuint texture = rctx->empty_texture_2d->glid; + GLuint mask_texture = rctx->empty_texture_2d->glid; if (rend_group->type != PARTICLE_LINE && rend_group->texture) { texture = rend_group->texture; if (rend_group->mask_texture) { diff --git a/src/DivaGL/mdl/disp_manager.cpp b/src/DivaGL/mdl/disp_manager.cpp index eea2844..da12b13 100644 --- a/src/DivaGL/mdl/disp_manager.cpp +++ b/src/DivaGL/mdl/disp_manager.cpp @@ -1982,8 +1982,8 @@ namespace mdl { void(*func)(const ObjSubMeshArgs * args) = draw_sub_mesh_default; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map); + gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); gl_state_active_texture(0); gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); @@ -2142,8 +2142,8 @@ namespace mdl { void(*func)(const ObjSubMeshArgs * args) = draw_sub_mesh_default; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map); + gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); gl_state_active_texture(0); gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); @@ -2221,8 +2221,8 @@ namespace mdl { render_context* rctx = rctx_ptr; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map); + gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); gl_state_active_texture(0); gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); diff --git a/src/DivaGL/mdl/draw_object.cpp b/src/DivaGL/mdl/draw_object.cpp index a937acf..5453e80 100644 --- a/src/DivaGL/mdl/draw_object.cpp +++ b/src/DivaGL/mdl/draw_object.cpp @@ -466,7 +466,7 @@ namespace mdl { tex_id = (*textures)[texdata->tex_index >> 20]; if (tex_id == -1) - tex_id = rctx->empty_texture_2d;; + tex_id = rctx->empty_texture_2d->glid;; gl_state_active_bind_texture_2d(tex_index, tex_id); @@ -503,7 +503,7 @@ namespace mdl { sub_mesh->index_offset); if (tex_id != -1) - gl_state_active_bind_texture_2d(tex_index, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(tex_index, rctx->empty_texture_2d->glid); gl_state_enable_cull_face(); draw_object_vertex_attrib_reset_default(args); @@ -646,7 +646,7 @@ static void draw_object_material_reset_default(const obj_material_data* mat_data } static void draw_object_material_reset_reflect() { - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid); gl_state_enable_cull_face(); uniform_value_reset(); } @@ -919,7 +919,7 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) { tex_id = (*textures)[texdata->tex_index >> 20]; if (tex_id == -1) - tex_id = rctx->empty_texture_2d;; + tex_id = rctx->empty_texture_2d->glid;; gl_state_active_bind_texture_2d(i, tex_id); diff --git a/src/DivaGL/render.cpp b/src/DivaGL/render.cpp index 0826f1f..7e80dd4 100644 --- a/src/DivaGL/render.cpp +++ b/src/DivaGL/render.cpp @@ -1278,7 +1278,7 @@ namespace rndr { shader_data.g_texcoord_transforms[7] = mat.row1; } else { - gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d->glid); gl_state_bind_sampler(5, rctx->render_samplers[2]); shader_data.g_texcoord_transforms[6] = { 1.0f, 0.0f, 0.0f, 0.0f }; @@ -1286,9 +1286,9 @@ namespace rndr { } } else { - gl_state_active_bind_texture_2d(4, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(4, rctx->empty_texture_2d->glid); gl_state_bind_sampler(4, rctx->render_samplers[2]); - gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d->glid); gl_state_bind_sampler(5, rctx->render_samplers[2]); shader_data.g_texcoord_transforms[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; @@ -1311,7 +1311,7 @@ namespace rndr { shader_data.g_flare_coef.z = 1.0f; } else { - gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d->glid); gl_state_bind_sampler(7, rctx->render_samplers[2]); } diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index 4de2608..e763a52 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -356,26 +356,24 @@ samplers(), render_samplers(), sprite_samplers(), screen_width(), screen_height( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - static const GLenum target_cube_map_array[] = { - GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, - GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, - GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z + static const void* empty_texture_2d_array[] = { + empty_texture_data, }; - glGenTextures(1, &empty_texture_2d); - gl_state_bind_texture_2d(empty_texture_2d); - texture_set_params(GL_TEXTURE_2D, 0, false); - glCompressedTexImage2D(GL_TEXTURE_2D, 0, - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 4, 4, 0, 8, empty_texture_data); - gl_state_bind_texture_2d(0); + empty_texture_2d = texture_load_tex_2d(texture_id(0x2F, 0), + GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 4, 4, 0, empty_texture_2d_array, false); - glGenTextures(1, &empty_texture_cube_map); - gl_state_bind_texture_cube_map(empty_texture_cube_map); - texture_set_params(GL_TEXTURE_CUBE_MAP, 0, false); - for (int32_t side = 0; side < 6; side++) - glCompressedTexImage2D(target_cube_map_array[side], 0, - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 4, 4, 0, 8, empty_texture_data); - gl_state_bind_texture_cube_map(0); + static const void* empty_texture_cube_map_array[] = { + empty_texture_data, + empty_texture_data, + empty_texture_data, + empty_texture_data, + empty_texture_data, + empty_texture_data, + }; + + empty_texture_cube_map = texture_load_tex_cube_map(texture_id(0x2F, 1), + GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 4, 4, 0, empty_texture_cube_map_array); static const vec4 border_color = 0.0f; @@ -475,8 +473,8 @@ render_context::~render_context() { glDeleteSamplers(4, render_samplers); glDeleteSamplers(18, samplers); - glDeleteTextures(1, &empty_texture_cube_map); - glDeleteTextures(1, &empty_texture_2d); + texture_release(empty_texture_cube_map); + texture_release(empty_texture_2d); obj_skinning_ubo.Destroy(); obj_batch_ubo.Destroy(); diff --git a/src/DivaGL/render_context.hpp b/src/DivaGL/render_context.hpp index f199bb0..06357cc 100644 --- a/src/DivaGL/render_context.hpp +++ b/src/DivaGL/render_context.hpp @@ -411,8 +411,8 @@ struct render_context { GL::UniformBuffer obj_batch_ubo; GL::UniformBuffer obj_skinning_ubo; - GLuint empty_texture_2d; - GLuint empty_texture_cube_map; + texture* empty_texture_2d; + texture* empty_texture_cube_map; GLuint samplers[18]; GLuint render_samplers[4]; diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index f7279fc..efc1a36 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -765,7 +765,7 @@ namespace rndr { if (effect_texture) gl_state_active_bind_texture_2d(14, effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); if (pass_sw[RND_PASSID_REFLECT] && reflect) { RenderTexture& refl_tex = get_render_texture(0); @@ -773,7 +773,7 @@ namespace rndr { uniform->arr[U_WATER_REFLECT] = 1; } else { - gl_state_active_bind_texture_2d(15, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(15, rctx->empty_texture_2d->glid); uniform->arr[U_WATER_REFLECT] = 0; } @@ -1048,7 +1048,7 @@ namespace rndr { if (effect_texture) gl_state_active_bind_texture_2d(14, effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); gl_state_bind_sampler(14, rctx->render_samplers[0]); gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); gl_state_enable_depth_test(); @@ -1736,8 +1736,8 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { draw_state.self_shadow = true; } else { - gl_state_active_bind_texture_2d(19, rctx->empty_texture_2d); - gl_state_active_bind_texture_2d(20, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(19, rctx->empty_texture_2d->glid); + gl_state_active_bind_texture_2d(20, rctx->empty_texture_2d->glid); gl_state_active_texture(0); draw_state.self_shadow = false; } @@ -1791,7 +1791,7 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { } for (; j < 2; j++) - gl_state_active_bind_texture_2d(6 + j, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(6 + j, rctx->empty_texture_2d->glid); gl_state_active_texture(0); light_set* set = &light_set_data[LIGHT_SET_MAIN]; diff --git a/src/DivaGL/sprite.cpp b/src/DivaGL/sprite.cpp index c1d135f..6603409 100644 --- a/src/DivaGL/sprite.cpp +++ b/src/DivaGL/sprite.cpp @@ -611,13 +611,13 @@ namespace spr { gl_state_bind_sampler(1, j.sampler); } else if (!gl_state.texture_binding_2d[1]) - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid); } else { if (!gl_state.texture_binding_2d[0]) - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid); if (!gl_state.texture_binding_2d[1]) - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d); + gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid); } shaders_ft.set(j.shader); @@ -1360,9 +1360,9 @@ namespace spr { static void draw_sprite_begin() { gl_state_disable_blend(true); - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d, true); + gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid, true); gl_state_bind_sampler(0, 0, true); - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d, true); + gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid, true); gl_state_bind_sampler(1, 0, true); gl_state_bind_sampler(7, 0, true); gl_state_set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO, true);