浏览代码

-fixed broken lighting in release version of godot for isometric light demo, fixes #1697

Juan Linietsky 10 年之前
父节点
当前提交
5c6b31c024

二进制
demos/2d/isometric_light/character_shder.res


二进制
demos/2d/isometric_light/cubio.scn


二进制
demos/2d/isometric_light/floor_shader.res


二进制
demos/2d/isometric_light/map.scn


二进制
demos/2d/isometric_light/tileset.res


二进制
demos/2d/isometric_light/wall_shader.res


+ 2 - 0
drivers/gles2/rasterizer_gles2.cpp

@@ -9452,6 +9452,7 @@ void RasterizerGLES2::canvas_render_items(CanvasItem *p_item_list,int p_z,const
 
 			while(light) {
 
+
 				if (ci->light_mask&light->item_mask && p_z>=light->z_min && p_z<=light->z_max && ci->global_rect_cache.intersects_transformed(light->xform_cache,light->rect_cache)) {
 
 					//intersects this light
@@ -9489,6 +9490,7 @@ void RasterizerGLES2::canvas_render_items(CanvasItem *p_item_list,int p_z,const
 
 					}
 
+
 					bool has_shadow = light->shadow_buffer.is_valid() && ci->light_mask&light->item_shadow_mask;
 
 					canvas_shader.set_conditional(CanvasShaderGLES2::USE_SHADOWS,has_shadow);

+ 4 - 0
servers/visual/visual_server_raster.cpp

@@ -7047,17 +7047,20 @@ void VisualServerRaster::_draw_viewport(Viewport *p_viewport,int p_ofs_x, int p_
 
 			for(Set<Rasterizer::CanvasLight*>::Element *F=E->get().canvas->lights.front();F;F=F->next()) {
 
+
 				Rasterizer::CanvasLight* cl=F->get();
 				if (cl->enabled && cl->texture.is_valid()) {
 					//not super efficient..
 					Size2 tsize(rasterizer->texture_get_width(cl->texture),rasterizer->texture_get_height(cl->texture));
 					tsize*=cl->scale;
+
 					Vector2 offset=tsize/2.0;
 					cl->rect_cache=Rect2(-offset+cl->texture_offset,tsize);
 					cl->xform_cache=xf * cl->xform;
 
 
 					if (clip_rect.intersects_transformed(cl->xform_cache,cl->rect_cache)) {
+
 						cl->filter_next_ptr=lights;
 						lights=cl;
 						cl->texture_cache=NULL;
@@ -7067,6 +7070,7 @@ void VisualServerRaster::_draw_viewport(Viewport *p_viewport,int p_ofs_x, int p_
 						cl->light_shader_xform = (cl->xform_cache * scale).affine_inverse();
 						cl->light_shader_pos=cl->xform_cache[2];
 						if (cl->shadow_buffer.is_valid()) {
+
 							cl->shadows_next_ptr=lights_with_shadow;
 							if (lights_with_shadow==NULL) {
 								shadow_rect = cl->xform_cache.xform(cl->rect_cache);