You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
-Added google play services (needed for some stuff)
-Added new screen resizing options, stretch_2d is removed, new much more flexible ones. -Fixed bug in viewport (can create more instances in 3d-in-2d demo now) -Can set android permissions and screen sizes manually in the export settings -Changed export templates extension to .tpz (too many people unzipped the manually..) -File dialog now ensures that the proper extension is used (will not allow to save without it) -Fixed bug that made collision exceptions not work in 2D
This commit is contained in:
@@ -770,7 +770,7 @@ void Physics2DServerSW::body_remove_collision_exception(RID p_body, RID p_body_b
|
||||
Body2DSW *body = body_owner.get(p_body);
|
||||
ERR_FAIL_COND(!body);
|
||||
|
||||
body->remove_exception(p_body);
|
||||
body->remove_exception(p_body_b);
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -494,6 +494,7 @@ public:
|
||||
};
|
||||
|
||||
virtual void canvas_begin()=0;
|
||||
virtual void canvas_disable_blending()=0;
|
||||
virtual void canvas_set_opacity(float p_opacity)=0;
|
||||
virtual void canvas_set_blend_mode(VS::MaterialBlendMode p_mode)=0;
|
||||
virtual void canvas_begin_rect(const Matrix32& p_transform)=0;;
|
||||
|
||||
@@ -1384,7 +1384,7 @@ void RasterizerDummy::set_viewport(const VS::ViewportRect& p_viewport) {
|
||||
|
||||
}
|
||||
|
||||
void RasterizerDummy::set_render_target(RID p_render_target,bool p_transparent_bg) {
|
||||
void RasterizerDummy::set_render_target(RID p_render_target, bool p_transparent_bg, bool p_vflip) {
|
||||
|
||||
|
||||
}
|
||||
@@ -1455,6 +1455,12 @@ void RasterizerDummy::canvas_begin() {
|
||||
|
||||
|
||||
}
|
||||
void RasterizerDummy::canvas_disable_blending() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void RasterizerDummy::canvas_set_opacity(float p_opacity) {
|
||||
|
||||
|
||||
|
||||
@@ -627,7 +627,7 @@ public:
|
||||
virtual void begin_frame();
|
||||
|
||||
virtual void set_viewport(const VS::ViewportRect& p_viewport);
|
||||
virtual void set_render_target(RID p_render_target,bool p_transparent_bg=false);
|
||||
virtual void set_render_target(RID p_render_target,bool p_transparent_bg=false,bool p_vflip=false);
|
||||
virtual void clear_viewport(const Color& p_color);
|
||||
virtual void capture_viewport(Image* r_capture);
|
||||
|
||||
@@ -652,6 +652,7 @@ public:
|
||||
/* CANVAS API */
|
||||
|
||||
virtual void canvas_begin();
|
||||
virtual void canvas_disable_blending();
|
||||
virtual void canvas_set_opacity(float p_opacity);
|
||||
virtual void canvas_set_blend_mode(VS::MaterialBlendMode p_mode);
|
||||
virtual void canvas_begin_rect(const Matrix32& p_transform);
|
||||
|
||||
@@ -1145,6 +1145,15 @@ void VisualServerRaster::viewport_set_render_target_vflip(RID p_viewport,bool p_
|
||||
|
||||
}
|
||||
|
||||
void VisualServerRaster::viewport_set_render_target_to_screen_rect(RID p_viewport,const Rect2& p_rect) {
|
||||
|
||||
Viewport *viewport = viewport_owner.get( p_viewport );
|
||||
ERR_FAIL_COND(!viewport);
|
||||
|
||||
viewport->rt_to_screen_rect=p_rect;
|
||||
|
||||
}
|
||||
|
||||
bool VisualServerRaster::viewport_get_render_target_vflip(RID p_viewport) const{
|
||||
|
||||
const Viewport *viewport = viewport_owner.get( p_viewport );
|
||||
@@ -5458,6 +5467,8 @@ void VisualServerRaster::_draw_viewport(Viewport *p_viewport,int p_ofs_x, int p_
|
||||
void VisualServerRaster::_draw_viewports() {
|
||||
|
||||
//draw viewports for render targets
|
||||
|
||||
List<Viewport*> to_blit;
|
||||
List<Viewport*> to_disable;
|
||||
for(SelfList<Viewport> *E=viewport_update_list.first();E;E=E->next()) {
|
||||
|
||||
@@ -5472,6 +5483,9 @@ void VisualServerRaster::_draw_viewports() {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (vp->rt_to_screen_rect!=Rect2())
|
||||
to_blit.push_back(vp);
|
||||
|
||||
rasterizer->set_render_target(vp->render_target,vp->transparent_bg,vp->render_target_vflip);
|
||||
_draw_viewport(vp,0,0,vp->rect.width,vp->rect.height);
|
||||
|
||||
@@ -5491,6 +5505,38 @@ void VisualServerRaster::_draw_viewports() {
|
||||
to_disable.pop_front();
|
||||
}
|
||||
|
||||
|
||||
//draw RTs directly to screen when requested
|
||||
|
||||
for (List<Viewport*>::Element *E=to_blit.front();E;E=E->next()) {
|
||||
|
||||
int window_w = OS::get_singleton()->get_video_mode().width;
|
||||
int window_h = OS::get_singleton()->get_video_mode().height;
|
||||
|
||||
ViewportRect desired_rect;
|
||||
desired_rect.x = desired_rect.y = 0;
|
||||
desired_rect.width = window_w;
|
||||
desired_rect.height = window_h;
|
||||
|
||||
if ( viewport_rect.x != desired_rect.x ||
|
||||
viewport_rect.y != desired_rect.y ||
|
||||
viewport_rect.width != desired_rect.width ||
|
||||
viewport_rect.height != desired_rect.height ) {
|
||||
|
||||
viewport_rect=desired_rect;
|
||||
|
||||
rasterizer->set_viewport(viewport_rect);
|
||||
}
|
||||
|
||||
rasterizer->canvas_begin();
|
||||
rasterizer->canvas_disable_blending();
|
||||
rasterizer->canvas_begin_rect(Matrix32());
|
||||
rasterizer->canvas_draw_rect(E->get()->rt_to_screen_rect,0,Rect2(Point2(),E->get()->rt_to_screen_rect.size),E->get()->render_target_texture,Color(1,1,1));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//draw viewports attached to screen
|
||||
|
||||
for(Map<RID,int>::Element *E=screen_viewports.front();E;E=E->next()) {
|
||||
|
||||
@@ -481,6 +481,8 @@ class VisualServerRaster : public VisualServer {
|
||||
RID render_target;
|
||||
RID render_target_texture;
|
||||
|
||||
Rect2 rt_to_screen_rect;
|
||||
|
||||
bool hide_scenario;
|
||||
bool hide_canvas;
|
||||
bool transparent_bg;
|
||||
@@ -913,6 +915,7 @@ public:
|
||||
virtual RID viewport_get_render_target_texture(RID p_viewport) const;
|
||||
virtual void viewport_set_render_target_vflip(RID p_viewport,bool p_enable);
|
||||
virtual bool viewport_get_render_target_vflip(RID p_viewport) const;
|
||||
virtual void viewport_set_render_target_to_screen_rect(RID p_viewport,const Rect2& p_rect);
|
||||
|
||||
virtual void viewport_queue_screen_capture(RID p_viewport);
|
||||
virtual Image viewport_get_screen_capture(RID p_viewport) const;
|
||||
|
||||
@@ -891,6 +891,7 @@ public:
|
||||
|
||||
FUNC2(viewport_set_render_target_vflip,RID,bool);
|
||||
FUNC1RC(bool,viewport_get_render_target_vflip,RID);
|
||||
FUNC2(viewport_set_render_target_to_screen_rect,RID,const Rect2&);
|
||||
|
||||
FUNC1(viewport_queue_screen_capture,RID);
|
||||
FUNC1RC(Image,viewport_get_screen_capture,RID);
|
||||
|
||||
@@ -592,6 +592,7 @@ public:
|
||||
|
||||
virtual void viewport_attach_to_screen(RID p_viewport,int p_screen=0)=0;
|
||||
virtual void viewport_detach(RID p_viewport)=0;
|
||||
virtual void viewport_set_render_target_to_screen_rect(RID p_viewport,const Rect2& p_rect)=0;
|
||||
|
||||
enum RenderTargetUpdateMode {
|
||||
RENDER_TARGET_UPDATE_DISABLED,
|
||||
@@ -611,6 +612,8 @@ public:
|
||||
virtual void viewport_queue_screen_capture(RID p_viewport)=0;
|
||||
virtual Image viewport_get_screen_capture(RID p_viewport) const=0;
|
||||
|
||||
|
||||
|
||||
struct ViewportRect {
|
||||
|
||||
int x,y,width,height;
|
||||
|
||||
Reference in New Issue
Block a user