diff options
| -rw-r--r-- | drivers/dummy/rasterizer_dummy.h | 1 | ||||
| -rw-r--r-- | drivers/gles2/rasterizer_storage_gles2.cpp | 11 | ||||
| -rw-r--r-- | drivers/gles2/rasterizer_storage_gles2.h | 1 | ||||
| -rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.cpp | 11 | ||||
| -rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.h | 2 | ||||
| -rw-r--r-- | servers/visual/rasterizer.h | 1 | ||||
| -rw-r--r-- | servers/visual/visual_server_viewport.cpp | 2 | 
7 files changed, 28 insertions, 1 deletions
diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h index ddc0dd5fa9..214da82819 100644 --- a/drivers/dummy/rasterizer_dummy.h +++ b/drivers/dummy/rasterizer_dummy.h @@ -241,6 +241,7 @@ public:  	void textures_keep_original(bool p_enable) {}  	void texture_set_proxy(RID p_proxy, RID p_base) {} +	virtual Size2 texture_size_with_proxy(RID p_texture) const { return Size2(); }  	void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) {}  	/* SKY API */ diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 0f52a02363..d00d572ccf 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -846,6 +846,17 @@ void RasterizerStorageGLES2::textures_keep_original(bool p_enable) {  	config.keep_original_textures = p_enable;  } +Size2 RasterizerStorageGLES2::texture_size_with_proxy(RID p_texture) const { + +	const Texture *texture = texture_owner.getornull(p_texture); +	ERR_FAIL_COND_V(!texture, Size2()); +	if (texture->proxy) { +		return Size2(texture->proxy->width, texture->proxy->height); +	} else { +		return Size2(texture->width, texture->height); +	} +} +  void RasterizerStorageGLES2::texture_set_proxy(RID p_texture, RID p_proxy) {  	Texture *texture = texture_owner.getornull(p_texture);  	ERR_FAIL_COND(!texture); diff --git a/drivers/gles2/rasterizer_storage_gles2.h b/drivers/gles2/rasterizer_storage_gles2.h index ed21238db6..ba48ddd185 100644 --- a/drivers/gles2/rasterizer_storage_gles2.h +++ b/drivers/gles2/rasterizer_storage_gles2.h @@ -342,6 +342,7 @@ public:  	virtual void textures_keep_original(bool p_enable);  	virtual void texture_set_proxy(RID p_texture, RID p_proxy); +	virtual Size2 texture_size_with_proxy(RID p_texture) const;  	virtual void texture_set_detect_3d_callback(RID p_texture, VisualServer::TextureDetectCallback p_callback, void *p_userdata);  	virtual void texture_set_detect_srgb_callback(RID p_texture, VisualServer::TextureDetectCallback p_callback, void *p_userdata); diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 70037dfc33..9754cbe0f0 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -1687,6 +1687,17 @@ RID RasterizerStorageGLES3::texture_create_radiance_cubemap(RID p_source, int p_  	return texture_owner.make_rid(ctex);  } +Size2 RasterizerStorageGLES3::texture_size_with_proxy(RID p_texture) const { + +	const Texture *texture = texture_owner.getornull(p_texture); +	ERR_FAIL_COND_V(!texture, Size2()); +	if (texture->proxy) { +		return Size2(texture->proxy->width, texture->proxy->height); +	} else { +		return Size2(texture->width, texture->height); +	} +} +  void RasterizerStorageGLES3::texture_set_proxy(RID p_texture, RID p_proxy) {  	Texture *texture = texture_owner.get(p_texture); diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h index 811f9c8d80..ca45b1a814 100644 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ b/drivers/gles3/rasterizer_storage_gles3.h @@ -375,6 +375,8 @@ public:  	virtual void texture_set_detect_normal_callback(RID p_texture, VisualServer::TextureDetectCallback p_callback, void *p_userdata);  	virtual void texture_set_proxy(RID p_texture, RID p_proxy); +	virtual Size2 texture_size_with_proxy(RID p_texture) const; +  	virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable);  	/* SKY API */ diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 6f8a30070a..33081dcd0c 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -221,6 +221,7 @@ public:  	virtual void textures_keep_original(bool p_enable) = 0;  	virtual void texture_set_proxy(RID p_proxy, RID p_base) = 0; +	virtual Size2 texture_size_with_proxy(RID p_texture) const = 0;  	virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) = 0;  	/* SKY API */ diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index 92b17eae47..7a7ae3a823 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -97,7 +97,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E  				RasterizerCanvas::Light *cl = F->get();  				if (cl->enabled && cl->texture.is_valid()) {  					//not super efficient.. -					Size2 tsize(VSG::storage->texture_get_width(cl->texture), VSG::storage->texture_get_height(cl->texture)); +					Size2 tsize = VSG::storage->texture_size_with_proxy(cl->texture);  					tsize *= cl->scale;  					Vector2 offset = tsize / 2.0;  |