Skip to content

Commit 2ee4ac1

Browse files
committed
Little Bits
-=-=-=-=-=- -Fixed small bugs all around -Added ability to show/hide entire sections of the spatial (3D) tree -WIP new vehicle (not ready yet) based on Bullet
1 parent c3e1d7b commit 2ee4ac1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+3941
-1755
lines changed

core/variant_call.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
264264
//VCALL_LOCALMEM2R(String,erase);
265265
VCALL_LOCALMEM0R(String,hash);
266266
VCALL_LOCALMEM0R(String,md5_text);
267+
VCALL_LOCALMEM0R(String,md5_buffer);
267268
VCALL_LOCALMEM0R(String,empty);
268269
VCALL_LOCALMEM0R(String,is_abs_path);
269270
VCALL_LOCALMEM0R(String,is_rel_path);
@@ -573,7 +574,6 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
573574
VCALL_PTR0R( Matrix32, affine_inverse );
574575
VCALL_PTR0R( Matrix32, get_rotation );
575576
VCALL_PTR0R( Matrix32, get_origin );
576-
VCALL_PTR0R( Matrix32, get_scale );
577577
VCALL_PTR0R( Matrix32, orthonormalized );
578578
VCALL_PTR1R( Matrix32, rotated );
579579
VCALL_PTR1R( Matrix32, scaled );
@@ -1167,7 +1167,8 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
11671167
ADDFUNC1(STRING,STRING,String,ord_at,INT,"at",varray());
11681168
// ADDFUNC2(STRING,String,erase,INT,INT,varray());
11691169
ADDFUNC0(STRING,INT,String,hash,varray());
1170-
ADDFUNC0(STRING,STRING,String,md5_text,varray());
1170+
ADDFUNC0(STRING,INT,String,md5_text,varray());
1171+
ADDFUNC0(STRING,INT,String,md5_buffer,varray());
11711172
ADDFUNC0(STRING,BOOL,String,empty,varray());
11721173
ADDFUNC0(STRING,BOOL,String,is_abs_path,varray());
11731174
ADDFUNC0(STRING,BOOL,String,is_rel_path,varray());
@@ -1390,7 +1391,6 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
13901391
ADDFUNC0(MATRIX32,MATRIX32,Matrix32,affine_inverse,varray());
13911392
ADDFUNC0(MATRIX32,REAL,Matrix32,get_rotation,varray());
13921393
ADDFUNC0(MATRIX32,VECTOR2,Matrix32,get_origin,varray());
1393-
ADDFUNC0(MATRIX32,VECTOR2,Matrix32,get_scale,varray());
13941394
ADDFUNC0(MATRIX32,MATRIX32,Matrix32,orthonormalized,varray());
13951395
ADDFUNC1(MATRIX32,MATRIX32,Matrix32,rotated,REAL,"phi",varray());
13961396
ADDFUNC1(MATRIX32,MATRIX32,Matrix32,scaled,VECTOR2,"scale",varray());

drivers/gles2/rasterizer_gles2.cpp

Lines changed: 149 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282

8383
#endif
8484

85+
static RasterizerGLES2* _singleton = NULL;
86+
8587
static const GLenum prim_type[]={GL_POINTS,GL_LINES,GL_TRIANGLES,GL_TRIANGLE_FAN};
8688

8789
_FORCE_INLINE_ static void _set_color_attrib(const Color& p_color) {
@@ -381,39 +383,96 @@ Image RasterizerGLES2::_get_gl_image_and_format(const Image& p_image, Image::For
381383
} break;
382384
case Image::FORMAT_BC1: {
383385

384-
r_gl_components=1; //doesn't matter much
385-
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT1_EXT;
386-
r_compressed=true;
386+
if (!s3tc_supported) {
387+
388+
if (!image.empty()) {
389+
image.decompress();
390+
}
391+
r_gl_components=4;
392+
r_gl_format=GL_RGBA;
393+
r_has_alpha_cache=true;
394+
395+
} else {
396+
397+
r_gl_components=1; //doesn't matter much
398+
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT1_EXT;
399+
r_compressed=true;
400+
};
387401

388402
} break;
389403
case Image::FORMAT_BC2: {
390-
r_gl_components=1; //doesn't matter much
391-
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT3_EXT;
392-
r_has_alpha_cache=true;
393-
r_compressed=true;
404+
405+
if (!s3tc_supported) {
406+
407+
if (!image.empty()) {
408+
image.decompress();
409+
}
410+
r_gl_components=4;
411+
r_gl_format=GL_RGBA;
412+
r_has_alpha_cache=true;
413+
414+
} else {
415+
r_gl_components=1; //doesn't matter much
416+
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT3_EXT;
417+
r_has_alpha_cache=true;
418+
r_compressed=true;
419+
};
394420

395421
} break;
396422
case Image::FORMAT_BC3: {
397423

398-
r_gl_components=1; //doesn't matter much
399-
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT5_EXT;
400-
r_has_alpha_cache=true;
401-
r_compressed=true;
424+
if (!s3tc_supported) {
425+
426+
if (!image.empty()) {
427+
image.decompress();
428+
}
429+
r_gl_components=4;
430+
r_gl_format=GL_RGBA;
431+
r_has_alpha_cache=true;
432+
433+
} else {
434+
r_gl_components=1; //doesn't matter much
435+
r_gl_format=_EXT_COMPRESSED_RGBA_S3TC_DXT5_EXT;
436+
r_has_alpha_cache=true;
437+
r_compressed=true;
438+
};
402439

403440
} break;
404441
case Image::FORMAT_BC4: {
405442

406-
r_gl_format=_EXT_COMPRESSED_RED_RGTC1;
407-
r_gl_components=1; //doesn't matter much
408-
r_compressed=true;
443+
if (!s3tc_supported) {
444+
445+
if (!image.empty()) {
446+
image.decompress();
447+
}
448+
r_gl_components=4;
449+
r_gl_format=GL_RGBA;
450+
r_has_alpha_cache=true;
451+
452+
} else {
453+
454+
r_gl_format=_EXT_COMPRESSED_RED_RGTC1;
455+
r_gl_components=1; //doesn't matter much
456+
r_compressed=true;
457+
};
409458

410459
} break;
411460
case Image::FORMAT_BC5: {
412461

462+
if (!s3tc_supported) {
413463

414-
r_gl_format=_EXT_COMPRESSED_RG_RGTC2;
415-
r_gl_components=1; //doesn't matter much
416-
r_compressed=true;
464+
if (!image.empty()) {
465+
image.decompress();
466+
}
467+
r_gl_components=4;
468+
r_gl_format=GL_RGBA;
469+
r_has_alpha_cache=true;
470+
471+
} else {
472+
r_gl_format=_EXT_COMPRESSED_RG_RGTC2;
473+
r_gl_components=1; //doesn't matter much
474+
r_compressed=true;
475+
};
417476
} break;
418477
case Image::FORMAT_PVRTC2: {
419478

@@ -1078,6 +1137,15 @@ void RasterizerGLES2::texture_set_reload_hook(RID p_texture,ObjectID p_owner,con
10781137
}
10791138

10801139

1140+
GLuint RasterizerGLES2::_texture_get_name(RID p_tex) {
1141+
1142+
Texture * texture = texture_owner.get(p_tex);
1143+
ERR_FAIL_COND_V(!texture, 0);
1144+
1145+
return texture->tex_id;
1146+
};
1147+
1148+
10811149
/* SHADER API */
10821150

10831151
RID RasterizerGLES2::shader_create(VS::ShaderMode p_mode) {
@@ -3995,17 +4063,17 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const {
39954063
if (p_shader->mode==VS::SHADER_MATERIAL) {
39964064
//print_line("setting code to id.. "+itos(p_shader->custom_code_id));
39974065
Vector<const char*> enablers;
3998-
if (fragment_flags.use_color_interp)
4066+
if (fragment_flags.use_color_interp || vertex_flags.use_color_interp)
39994067
enablers.push_back("#define ENABLE_COLOR_INTERP\n");
4000-
if (fragment_flags.use_uv_interp)
4068+
if (fragment_flags.use_uv_interp || vertex_flags.use_uv_interp)
40014069
enablers.push_back("#define ENABLE_UV_INTERP\n");
4002-
if (fragment_flags.use_uv2_interp)
4070+
if (fragment_flags.use_uv2_interp || vertex_flags.use_uv2_interp)
40034071
enablers.push_back("#define ENABLE_UV2_INTERP\n");
4004-
if (fragment_flags.use_tangent_interp)
4072+
if (fragment_flags.use_tangent_interp || vertex_flags.use_tangent_interp)
40054073
enablers.push_back("#define ENABLE_TANGENT_INTERP\n");
4006-
if (fragment_flags.use_var1_interp)
4074+
if (fragment_flags.use_var1_interp || vertex_flags.use_var1_interp)
40074075
enablers.push_back("#define ENABLE_VAR1_INTERP\n");
4008-
if (fragment_flags.use_var2_interp)
4076+
if (fragment_flags.use_var2_interp || vertex_flags.use_var2_interp)
40094077
enablers.push_back("#define ENABLE_VAR2_INTERP\n");
40104078
if (fragment_flags.uses_texscreen) {
40114079
enablers.push_back("#define ENABLE_TEXSCREEN\n");
@@ -4444,6 +4512,7 @@ bool RasterizerGLES2::_setup_material(const Geometry *p_geometry,const Material
44444512
material_shader.set_conditional(MaterialShaderGLES2::USE_SHADOW_PCF,shadow_filter==SHADOW_FILTER_PCF5 || shadow_filter==SHADOW_FILTER_PCF13);
44454513
material_shader.set_conditional(MaterialShaderGLES2::USE_SHADOW_PCF_HQ,shadow_filter==SHADOW_FILTER_PCF13);
44464514
material_shader.set_conditional(MaterialShaderGLES2::USE_SHADOW_ESM,shadow_filter==SHADOW_FILTER_ESM);
4515+
material_shader.set_conditional(MaterialShaderGLES2::USE_LIGHTMAP_ON_UV2,p_material->flags[VS::MATERIAL_FLAG_LIGHTMAP_ON_UV2]);
44474516

44484517
if (p_opaque_pass && p_material->depth_draw_mode==VS::MATERIAL_DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA && p_material->shader_cache && p_material->shader_cache->has_alpha) {
44494518

@@ -4716,7 +4785,8 @@ void RasterizerGLES2::_setup_light(uint16_t p_light) {
47164785

47174786
}
47184787
//print_line("shadow split: "+rtos(li->shadow_split));
4719-
} else
4788+
}
4789+
47204790
material_shader.set_uniform(MaterialShaderGLES2::SHADOW_DARKENING,li->base->vars[VS::LIGHT_PARAM_SHADOW_DARKENING]);
47214791
//matrix
47224792

@@ -5545,6 +5615,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
55455615
const Skeleton *prev_skeleton =NULL;
55465616
uint8_t prev_sort_flags=0xFF;
55475617
const BakedLightData *prev_baked_light=NULL;
5618+
RID prev_baked_light_texture;
55485619

55495620
Geometry::Type prev_geometry_type=Geometry::GEOMETRY_INVALID;
55505621

@@ -5561,6 +5632,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
55615632
material_shader.set_conditional(MaterialShaderGLES2::LIGHT_USE_PSSM4,false);
55625633
material_shader.set_conditional(MaterialShaderGLES2::SHADELESS,false);
55635634
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE,false);
5635+
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
55645636
// material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_TEXTURE,false);
55655637

55665638
}
@@ -5585,6 +5657,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
55855657

55865658
bool rebind=false;
55875659
bool bind_baked_light_octree=false;
5660+
bool bind_baked_lightmap=false;
55885661
bool additive=false;
55895662

55905663

@@ -5704,7 +5777,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
57045777
}
57055778

57065779
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE,false);
5707-
// material_shader.set_conditional(MaterialShaderGLES2::USE_AMBIENT_TEXTURE,false);
5780+
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
57085781

57095782
if (!additive && baked_light) {
57105783

@@ -5722,7 +5795,37 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
57225795
}
57235796
} else if (baked_light->mode==VS::BAKED_LIGHT_LIGHTMAPS) {
57245797

5725-
//material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_TEXTURE,true);
5798+
5799+
int lightmap_idx = e->instance->baked_lightmap_id;
5800+
5801+
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
5802+
bind_baked_lightmap=false;
5803+
5804+
5805+
if (baked_light->lightmaps.has(lightmap_idx)) {
5806+
5807+
5808+
RID texid = baked_light->lightmaps[lightmap_idx];
5809+
5810+
if (prev_baked_light!=baked_light || texid!=prev_baked_light_texture) {
5811+
5812+
5813+
Texture *tex = texture_owner.get(texid);
5814+
if (tex) {
5815+
5816+
glActiveTexture(GL_TEXTURE5);
5817+
glBindTexture(tex->target,tex->tex_id); //bind the texture
5818+
}
5819+
5820+
prev_baked_light_texture=texid;
5821+
}
5822+
5823+
if (texid.is_valid()) {
5824+
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,true);
5825+
bind_baked_lightmap=true;
5826+
}
5827+
5828+
}
57265829
}
57275830
}
57285831

@@ -5793,6 +5896,14 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
57935896

57945897
}
57955898

5899+
if (bind_baked_lightmap && (baked_light!=prev_baked_light || rebind)) {
5900+
5901+
material_shader.set_uniform(MaterialShaderGLES2::AMBIENT_LIGHTMAP, 5);
5902+
material_shader.set_uniform(MaterialShaderGLES2::AMBIENT_LIGHTMAP_MULTIPLIER, baked_light->lightmap_multiplier);
5903+
5904+
}
5905+
5906+
57965907
_set_cull(e->mirror,p_reverse_cull);
57975908

57985909

@@ -8212,9 +8323,13 @@ void RasterizerGLES2::_update_framebuffer() {
82128323

82138324
}
82148325

8215-
void RasterizerGLES2::set_base_framebuffer(GLuint p_id) {
8326+
void RasterizerGLES2::set_base_framebuffer(GLuint p_id, Vector2 p_size) {
82168327

82178328
base_framebuffer=p_id;
8329+
8330+
if (p_size.x != 0) {
8331+
window_size = p_size;
8332+
};
82188333
}
82198334

82208335
#if 0
@@ -8753,8 +8868,15 @@ void RasterizerGLES2::set_use_framebuffers(bool p_use) {
87538868
use_framebuffers=p_use;
87548869
}
87558870

8871+
RasterizerGLES2* RasterizerGLES2::get_singleton() {
8872+
8873+
return _singleton;
8874+
};
8875+
87568876
RasterizerGLES2::RasterizerGLES2(bool p_compress_arrays,bool p_keep_ram_copy,bool p_default_fragment_lighting,bool p_use_reload_hooks) {
87578877

8878+
_singleton = this;
8879+
87588880
keep_copies=p_keep_ram_copy;
87598881
use_reload_hooks=p_use_reload_hooks;
87608882
pack_arrays=p_compress_arrays;

drivers/gles2/rasterizer_gles2.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,8 @@ class RasterizerGLES2 : public Rasterizer {
11751175
virtual void texture_set_size_override(RID p_texture,int p_width, int p_height);
11761176
virtual void texture_set_reload_hook(RID p_texture,ObjectID p_owner,const StringName& p_function) const;
11771177

1178+
GLuint _texture_get_name(RID p_tex);
1179+
11781180
/* SHADER API */
11791181

11801182
virtual RID shader_create(VS::ShaderMode p_mode=VS::SHADER_MATERIAL);
@@ -1508,7 +1510,7 @@ class RasterizerGLES2 : public Rasterizer {
15081510

15091511
virtual int get_render_info(VS::RenderInfo p_info);
15101512

1511-
void set_base_framebuffer(GLuint p_id);
1513+
void set_base_framebuffer(GLuint p_id, Vector2 p_size = Vector2(0, 0));
15121514

15131515
virtual void flush_frame(); //not necesary in most cases
15141516
void set_extensions(const char *p_strings);
@@ -1520,6 +1522,7 @@ class RasterizerGLES2 : public Rasterizer {
15201522

15211523
virtual bool has_feature(VS::Features p_feature) const;
15221524

1525+
static RasterizerGLES2* get_singleton();
15231526

15241527
RasterizerGLES2(bool p_compress_arrays=false,bool p_keep_ram_copy=true,bool p_default_fragment_lighting=true,bool p_use_reload_hooks=false);
15251528
virtual ~RasterizerGLES2();

0 commit comments

Comments
 (0)