1 /*************************************************************************/
2 /*  visual_server_raster.h                                               */
3 /*************************************************************************/
4 /*                       This file is part of:                           */
5 /*                           GODOT ENGINE                                */
6 /*                      https://godotengine.org                          */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur.                 */
9 /* Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md)    */
10 /*                                                                       */
11 /* Permission is hereby granted, free of charge, to any person obtaining */
12 /* a copy of this software and associated documentation files (the       */
13 /* "Software"), to deal in the Software without restriction, including   */
14 /* without limitation the rights to use, copy, modify, merge, publish,   */
15 /* distribute, sublicense, and/or sell copies of the Software, and to    */
16 /* permit persons to whom the Software is furnished to do so, subject to */
17 /* the following conditions:                                             */
18 /*                                                                       */
19 /* The above copyright notice and this permission notice shall be        */
20 /* included in all copies or substantial portions of the Software.       */
21 /*                                                                       */
22 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
23 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
24 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
25 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
26 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
27 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
28 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
29 /*************************************************************************/
30 #ifndef VISUAL_SERVER_RASTER_H
31 #define VISUAL_SERVER_RASTER_H
32 
33 #include "allocators.h"
34 #include "octree.h"
35 #include "servers/visual/rasterizer.h"
36 #include "servers/visual_server.h"
37 
38 /**
39 	@author Juan Linietsky <reduzio@gmail.com>
40 */
41 
42 class VisualServerRaster : public VisualServer {
43 
44 	enum {
45 
46 		MAX_INSTANCE_CULL = 8192,
47 		MAX_INSTANCE_LIGHTS = 4,
48 		LIGHT_CACHE_DIRTY = -1,
49 		MAX_LIGHTS_CULLED = 256,
50 		MAX_ROOM_CULL = 32,
51 		MAX_EXTERIOR_PORTALS = 128,
52 		MAX_LIGHT_SAMPLERS = 256,
53 		INSTANCE_ROOMLESS_MASK = (1 << 20)
54 
55 	};
56 
57 	struct Room {
58 
59 		bool occlude_exterior;
60 		BSP_Tree bounds;
RoomRoom61 		Room() { occlude_exterior = true; }
62 	};
63 
64 	BalloonAllocator<> octree_allocator;
65 
66 	struct OctreeAllocator {
67 
68 		static BalloonAllocator<> *allocator;
69 
allocOctreeAllocator70 		_FORCE_INLINE_ static void *alloc(size_t p_size) { return allocator->alloc(p_size); }
freeOctreeAllocator71 		_FORCE_INLINE_ static void free(void *p_ptr) { return allocator->free(p_ptr); }
72 	};
73 
74 	struct Portal {
75 
76 		bool enabled;
77 		float disable_distance;
78 		Color disable_color;
79 		float connect_range;
80 		Vector<Point2> shape;
81 		Rect2 bounds;
82 
PortalPortal83 		Portal() {
84 			enabled = true;
85 			disable_distance = 50;
86 			disable_color = Color();
87 			connect_range = 0.8;
88 		}
89 	};
90 
91 	struct BakedLight {
92 
93 		Rasterizer::BakedLightData data;
94 		DVector<int> sampler;
95 		AABB octree_aabb;
96 		Size2i octree_tex_size;
97 		Size2i light_tex_size;
98 	};
99 
100 	struct BakedLightSampler {
101 
102 		float params[BAKED_LIGHT_SAMPLER_MAX];
103 		int resolution;
104 		Vector<Vector3> dp_cache;
105 
BakedLightSamplerBakedLightSampler106 		BakedLightSampler() {
107 			params[BAKED_LIGHT_SAMPLER_STRENGTH] = 1.0;
108 			params[BAKED_LIGHT_SAMPLER_ATTENUATION] = 1.0;
109 			params[BAKED_LIGHT_SAMPLER_RADIUS] = 1.0;
110 			params[BAKED_LIGHT_SAMPLER_DETAIL_RATIO] = 0.1;
111 			resolution = 16;
112 		}
113 	};
114 
115 	void _update_baked_light_sampler_dp_cache(BakedLightSampler *blsamp);
116 	struct Camera {
117 
118 		enum Type {
119 			PERSPECTIVE,
120 			ORTHOGONAL
121 		};
122 		Type type;
123 		float fov;
124 		float znear, zfar;
125 		float size;
126 		uint32_t visible_layers;
127 		bool vaspect;
128 		RID env;
129 
130 		Transform transform;
131 
CameraCamera132 		Camera() {
133 
134 			visible_layers = 0xFFFFFFFF;
135 			fov = 60;
136 			type = PERSPECTIVE;
137 			znear = 0.1;
138 			zfar = 100;
139 			size = 1.0;
140 			vaspect = false;
141 		}
142 	};
143 
144 	struct Instance;
145 	typedef Set<Instance *, Comparator<Instance *>, OctreeAllocator> InstanceSet;
146 	struct Scenario;
147 
148 	struct Instance {
149 
150 		enum {
151 
152 			MAX_LIGHTS = 4
153 		};
154 
155 		RID self;
156 		OctreeElementID octree_id;
157 		Scenario *scenario;
158 		bool update;
159 		bool update_aabb;
160 		bool update_materials;
161 		Instance *update_next;
162 		InstanceType base_type;
163 
164 		RID base_rid;
165 
166 		AABB aabb;
167 		AABB transformed_aabb;
168 		uint32_t object_ID;
169 		bool visible;
170 		bool visible_in_all_rooms;
171 		uint32_t layer_mask;
172 		float draw_range_begin;
173 		float draw_range_end;
174 		float extra_margin;
175 
176 		Rasterizer::InstanceData data;
177 
178 		Set<Instance *> auto_rooms;
179 		Set<Instance *> valid_auto_rooms;
180 		Instance *room;
181 		List<Instance *>::Element *RE;
182 		Instance *baked_light;
183 		List<Instance *>::Element *BLE;
184 		Instance *sampled_light;
185 		bool exterior;
186 
187 		uint64_t last_render_pass;
188 		uint64_t last_frame_pass;
189 
190 		uint64_t version; // changes to this, and changes to base increase version
191 
192 		InstanceSet lights;
193 		bool light_cache_dirty;
194 
195 		struct RoomInfo {
196 
197 			Transform affine_inverse;
198 			Room *room;
199 			List<Instance *> owned_geometry_instances;
200 			List<Instance *> owned_portal_instances;
201 			List<Instance *> owned_room_instances;
202 			List<Instance *> owned_light_instances; //not used, but just for the sake of it
203 			Set<Instance *> disconnected_child_portals;
204 			Set<Instance *> owned_autoroom_geometry;
205 			uint64_t last_visited_pass;
RoomInfoInstance::RoomInfo206 			RoomInfo() { last_visited_pass = 0; }
207 		};
208 
209 		struct PortalInfo {
210 
211 			Portal *portal;
212 			Set<Instance *> candidate_set;
213 			Instance *connected;
214 			uint64_t last_visited_pass;
215 
216 			Plane plane_cache;
217 			Vector<Vector3> transformed_point_cache;
218 
PortalInfoInstance::PortalInfo219 			PortalInfo() {
220 				connected = NULL;
221 				last_visited_pass = 0;
222 			}
223 		};
224 
225 		struct LightInfo {
226 
227 			RID instance;
228 			int light_set_index;
229 			uint64_t last_version;
230 			uint64_t last_add_pass;
231 			List<RID>::Element *D; // directional light in scenario
232 			InstanceSet affected;
233 			bool enabled;
234 			float dtc; //distance to camera, used for sorting
235 
LightInfoInstance::LightInfo236 			LightInfo() {
237 
238 				D = NULL;
239 				light_set_index = -1;
240 				last_add_pass = 0;
241 				enabled = true;
242 			}
243 		};
244 
245 		struct BakedLightInfo {
246 
247 			BakedLight *baked_light;
248 			Transform affine_inverse;
249 			List<Instance *> owned_instances;
250 		};
251 
252 		struct BakedLightSamplerInfo {
253 
254 			Set<Instance *> baked_lights;
255 			Set<Instance *> owned_instances;
256 			BakedLightSampler *sampler;
257 			int resolution;
258 			Vector<Color> light_bufer;
259 			RID sampled_light;
260 			uint64_t last_pass;
261 			Transform xform; // viewspace normal to lightspace, might not use one.
BakedLightSamplerInfoInstance::BakedLightSamplerInfo262 			BakedLightSamplerInfo() {
263 				sampler = NULL;
264 				last_pass = 0;
265 				resolution = 0;
266 			}
267 		};
268 
269 		struct ParticlesInfo {
270 
271 			RID instance;
272 		};
273 
274 		RoomInfo *room_info;
275 		LightInfo *light_info;
276 		ParticlesInfo *particles_info;
277 		PortalInfo *portal_info;
278 		BakedLightInfo *baked_light_info;
279 		BakedLightSamplerInfo *baked_light_sampler_info;
280 
InstanceInstance281 		Instance() {
282 			octree_id = 0;
283 			update_next = 0;
284 			object_ID = 0;
285 			last_render_pass = 0;
286 			last_frame_pass = 0;
287 			light_info = 0;
288 			particles_info = 0;
289 			update_next = NULL;
290 			update = false;
291 			visible = true;
292 			data.cast_shadows = SHADOW_CASTING_SETTING_ON;
293 			data.receive_shadows = true;
294 			data.depth_scale = false;
295 			data.billboard = false;
296 			data.billboard_y = false;
297 			data.baked_light = NULL;
298 			data.baked_light_octree_xform = NULL;
299 			data.baked_lightmap_id = -1;
300 			version = 1;
301 			room_info = NULL;
302 			room = NULL;
303 			RE = NULL;
304 			portal_info = NULL;
305 			exterior = false;
306 			layer_mask = 1;
307 			draw_range_begin = 0;
308 			draw_range_end = 0;
309 			extra_margin = 0;
310 			visible_in_all_rooms = false;
311 			update_aabb = false;
312 			update_materials = false;
313 
314 			baked_light = NULL;
315 			baked_light_info = NULL;
316 			baked_light_sampler_info = NULL;
317 			sampled_light = NULL;
318 			BLE = NULL;
319 
320 			light_cache_dirty = true;
321 		}
322 
~InstanceInstance323 		~Instance() {
324 
325 			if (light_info)
326 				memdelete(light_info);
327 			if (particles_info)
328 				memdelete(particles_info);
329 			if (room_info)
330 				memdelete(room_info);
331 			if (portal_info)
332 				memdelete(portal_info);
333 			if (baked_light_info)
334 				memdelete(baked_light_info);
335 		};
336 	};
337 
338 	struct _InstanceLightsort {
339 
operator_InstanceLightsort340 		bool operator()(const Instance *p_A, const Instance *p_B) const { return p_A->light_info->dtc < p_B->light_info->dtc; }
341 	};
342 
343 	struct Scenario {
344 
345 		ScenarioDebugMode debug;
346 		RID self;
347 		// well wtf, balloon allocator is slower?
348 		typedef ::Octree<Instance, true> Octree;
349 
350 		Octree octree;
351 
352 		List<RID> directional_lights;
353 		RID environment;
354 		RID fallback_environment;
355 
356 		Instance *dirty_instances;
357 
ScenarioScenario358 		Scenario() {
359 			dirty_instances = NULL;
360 			debug = SCENARIO_DEBUG_DISABLED;
361 		}
362 	};
363 
364 	mutable RID_Owner<Rasterizer::CanvasItemMaterial> canvas_item_material_owner;
365 
366 	struct CanvasItem : public Rasterizer::CanvasItem {
367 
368 		RID parent; // canvas it belongs to
369 		List<CanvasItem *>::Element *E;
370 		RID viewport;
371 		int z;
372 		bool z_relative;
373 		bool sort_y;
374 		float opacity;
375 		float self_opacity;
376 		bool use_parent_material;
377 
378 		Vector<CanvasItem *> child_items;
379 
CanvasItemCanvasItem380 		CanvasItem() {
381 			E = NULL;
382 			z = 0;
383 			opacity = 1;
384 			self_opacity = 1;
385 			sort_y = false;
386 			use_parent_material = false;
387 			z_relative = true;
388 		}
389 	};
390 
391 	struct CanvasItemPtrSort {
392 
operatorCanvasItemPtrSort393 		_FORCE_INLINE_ bool operator()(const CanvasItem *p_left, const CanvasItem *p_right) const {
394 
395 			if (Math::abs(p_left->xform.elements[2].y - p_right->xform.elements[2].y) < CMP_EPSILON)
396 				return p_left->xform.elements[2].x < p_right->xform.elements[2].x;
397 			else
398 				return p_left->xform.elements[2].y < p_right->xform.elements[2].y;
399 		}
400 	};
401 
402 	struct CanvasLightOccluder;
403 
404 	struct CanvasLightOccluderPolygon {
405 
406 		bool active;
407 		Rect2 aabb;
408 		CanvasOccluderPolygonCullMode cull_mode;
409 		RID occluder;
410 		Set<Rasterizer::CanvasLightOccluderInstance *> owners;
411 
CanvasLightOccluderPolygonCanvasLightOccluderPolygon412 		CanvasLightOccluderPolygon() {
413 			active = false;
414 			cull_mode = CANVAS_OCCLUDER_POLYGON_CULL_DISABLED;
415 		}
416 	};
417 
418 	RID_Owner<CanvasLightOccluderPolygon> canvas_light_occluder_polygon_owner;
419 
420 	RID_Owner<Rasterizer::CanvasLightOccluderInstance> canvas_light_occluder_owner;
421 
422 	struct CanvasLight;
423 
424 	struct Canvas {
425 
426 		Set<RID> viewports;
427 		struct ChildItem {
428 
429 			Point2 mirror;
430 			CanvasItem *item;
431 		};
432 
433 		Set<Rasterizer::CanvasLight *> lights;
434 		Set<Rasterizer::CanvasLightOccluderInstance *> occluders;
435 
436 		Vector<ChildItem> child_items;
437 		Color modulate;
438 
find_itemCanvas439 		int find_item(CanvasItem *p_item) {
440 			for (int i = 0; i < child_items.size(); i++) {
441 				if (child_items[i].item == p_item)
442 					return i;
443 			}
444 			return -1;
445 		}
erase_itemCanvas446 		void erase_item(CanvasItem *p_item) {
447 			int idx = find_item(p_item);
448 			if (idx >= 0)
449 				child_items.remove(idx);
450 		}
451 
CanvasCanvas452 		Canvas() { modulate = Color(1, 1, 1, 1); }
453 	};
454 
455 	RID_Owner<Rasterizer::CanvasLight> canvas_light_owner;
456 
457 	struct Viewport {
458 
459 		RID self;
460 		RID parent;
461 
462 		VisualServer::ViewportRect rect;
463 		RID camera;
464 		RID scenario;
465 		RID viewport_data;
466 
467 		RenderTargetUpdateMode render_target_update_mode;
468 		RID render_target;
469 		RID render_target_texture;
470 
471 		Rect2 rt_to_screen_rect;
472 
473 		bool hide_scenario;
474 		bool hide_canvas;
475 		bool transparent_bg;
476 		bool queue_capture;
477 		bool render_target_vflip;
478 		bool render_target_clear_on_new_frame;
479 		bool render_target_clear;
480 		bool disable_environment;
481 
482 		Image capture;
483 
484 		bool rendered_in_prev_frame;
485 
486 		struct CanvasKey {
487 
488 			int layer;
489 			RID canvas;
490 			bool operator<(const CanvasKey &p_canvas) const {
491 				if (layer == p_canvas.layer) return canvas < p_canvas.canvas;
492 				return layer < p_canvas.layer;
493 			}
CanvasKeyViewport::CanvasKey494 			CanvasKey() { layer = 0; }
CanvasKeyViewport::CanvasKey495 			CanvasKey(const RID &p_canvas, int p_layer) {
496 				canvas = p_canvas;
497 				layer = p_layer;
498 			}
499 		};
500 
501 		struct CanvasData {
502 
503 			Canvas *canvas;
504 			Matrix32 transform;
505 			int layer;
506 		};
507 
508 		Matrix32 global_transform;
509 
510 		Map<RID, CanvasData> canvas_map;
511 
512 		SelfList<Viewport> update_list;
513 
ViewportViewport514 		Viewport() :
515 				update_list(this) {
516 			transparent_bg = false;
517 			render_target_update_mode = RENDER_TARGET_UPDATE_WHEN_VISIBLE;
518 			queue_capture = false;
519 			rendered_in_prev_frame = false;
520 			render_target_vflip = false;
521 			render_target_clear_on_new_frame = true;
522 			render_target_clear = true;
523 			disable_environment = false;
524 		}
525 	};
526 
527 	SelfList<Viewport>::List viewport_update_list;
528 
529 	Map<RID, int> screen_viewports;
530 
531 	struct CullRange {
532 
533 		Plane nearp;
534 		float min, max;
535 		float z_near, z_far;
536 
add_aabbCullRange537 		void add_aabb(const AABB &p_aabb) {
538 		}
539 	};
540 
541 	struct Cursor {
542 
543 		Point2 pos;
544 		float rot;
545 		RID texture;
546 		Point2 center;
547 		bool visible;
548 		Rect2 region;
CursorCursor549 		Cursor() {
550 
551 			rot = 0;
552 			visible = false;
553 			region = Rect2();
554 		};
555 	};
556 
557 	Rect2 canvas_clip;
558 	Color clear_color;
559 
560 	static void *instance_pair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int);
561 	static void instance_unpair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int, void *);
562 
563 	Instance *instance_cull_result[MAX_INSTANCE_CULL];
564 	Instance *instance_shadow_cull_result[MAX_INSTANCE_CULL]; //used for generating shadowmaps
565 	Instance *light_cull_result[MAX_LIGHTS_CULLED];
566 	int light_cull_count;
567 
568 	Instance *exterior_portal_cull_result[MAX_EXTERIOR_PORTALS];
569 	int exterior_portal_cull_count;
570 	bool exterior_visited;
571 
572 	Instance *light_sampler_cull_result[MAX_LIGHT_SAMPLERS];
573 	int light_samplers_culled;
574 
575 	Instance *room_cull_result[MAX_ROOM_CULL];
576 	int room_cull_count;
577 	bool room_cull_enabled;
578 	bool light_discard_enabled;
579 	bool shadows_enabled;
580 	int black_margin[4];
581 	RID black_image[4];
582 
583 	Vector<Vector3> aabb_random_points;
584 	Vector<Vector3> transformed_aabb_random_points;
585 
586 	void _instance_validate_autorooms(Instance *p_geometry);
587 
588 	void _portal_disconnect(Instance *p_portal, bool p_cleanup = false);
589 	void _portal_attempt_connect(Instance *p_portal);
590 	void _dependency_queue_update(RID p_rid, bool p_update_aabb = false, bool p_update_materials = false);
591 	_FORCE_INLINE_ void _instance_queue_update(Instance *p_instance, bool p_update_aabb = false, bool p_update_materials = false);
592 	void _update_instances();
593 	void _update_instance_aabb(Instance *p_instance);
594 	void _update_instance(Instance *p_instance);
595 	void _free_attached_instances(RID p_rid, bool p_free_scenario = false);
596 	void _clean_up_owner(RID_OwnerBase *p_owner, String p_type);
597 
598 	Instance *instance_update_list;
599 
600 	//RID default_scenario;
601 	//RID default_viewport;
602 
603 	RID test_cube;
604 
605 	mutable RID_Owner<Room> room_owner;
606 	mutable RID_Owner<Portal> portal_owner;
607 
608 	mutable RID_Owner<BakedLight> baked_light_owner;
609 	mutable RID_Owner<BakedLightSampler> baked_light_sampler_owner;
610 
611 	mutable RID_Owner<Camera> camera_owner;
612 	mutable RID_Owner<Viewport> viewport_owner;
613 
614 	mutable RID_Owner<Scenario> scenario_owner;
615 	mutable RID_Owner<Instance> instance_owner;
616 
617 	mutable RID_Owner<Canvas> canvas_owner;
618 	mutable RID_Owner<CanvasItem> canvas_item_owner;
619 
620 	Map<RID, Set<RID> > instance_dependency_map;
621 	Map<RID, Set<Instance *> > skeleton_dependency_map;
622 
623 	ViewportRect viewport_rect;
624 	_FORCE_INLINE_ void _instance_draw(Instance *p_instance);
625 
626 	bool _test_portal_cull(Camera *p_camera, Instance *p_portal_from, Instance *p_portal_to);
627 	void _cull_portal(Camera *p_camera, Instance *p_portal, Instance *p_from_portal);
628 	void _cull_room(Camera *p_camera, Instance *p_room, Instance *p_from_portal = NULL);
629 	void _process_sampled_light(const Transform &p_camera, Instance *p_sampled_light, bool p_linear_colorspace);
630 
631 	void _render_no_camera(Viewport *p_viewport, Camera *p_camera, Scenario *p_scenario);
632 	void _render_camera(Viewport *p_viewport, Camera *p_camera, Scenario *p_scenario);
633 	static void _render_canvas_item_viewport(VisualServer *p_self, void *p_vp, const Rect2 &p_rect);
634 	void _render_canvas_item_tree(CanvasItem *p_canvas_item, const Matrix32 &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, Rasterizer::CanvasLight *p_lights);
635 	void _render_canvas_item(CanvasItem *p_canvas_item, const Matrix32 &p_transform, const Rect2 &p_clip_rect, float p_opacity, int p_z, Rasterizer::CanvasItem **z_list, Rasterizer::CanvasItem **z_last_list, CanvasItem *p_canvas_clip, CanvasItem *p_material_owner);
636 	void _render_canvas(Canvas *p_canvas, const Matrix32 &p_transform, Rasterizer::CanvasLight *p_lights, Rasterizer::CanvasLight *p_masked_lights);
637 	void _light_mask_canvas_items(int p_z, Rasterizer::CanvasItem *p_canvas_item, Rasterizer::CanvasLight *p_masked_lights);
638 
639 	Vector<Vector3> _camera_generate_endpoints(Instance *p_light, Camera *p_camera, float p_range_min, float p_range_max);
640 	Vector<Plane> _camera_generate_orthogonal_planes(Instance *p_light, Camera *p_camera, float p_range_min, float p_range_max);
641 
642 	void _light_instance_update_lispsm_shadow(Instance *p_light, Scenario *p_scenario, Camera *p_camera, const CullRange &p_cull_range);
643 	void _light_instance_update_pssm_shadow(Instance *p_light, Scenario *p_scenario, Camera *p_camera, const CullRange &p_cull_range);
644 
645 	void _light_instance_update_shadow(Instance *p_light, Scenario *p_scenario, Camera *p_camera, const CullRange &p_cull_range);
646 
647 	uint64_t render_pass;
648 	int changes;
649 	bool draw_extra_frame;
650 
651 	void _draw_viewport_camera(Viewport *p_viewport, bool p_ignore_camera);
652 	void _draw_viewport(Viewport *p_viewport, int p_ofs_x, int p_ofs_y, int p_parent_w, int p_parent_h);
653 	void _draw_viewports();
654 	void _draw_cursors_and_margins();
655 
656 	Rasterizer *rasterizer;
657 
658 public:
659 	virtual RID texture_create();
660 	virtual void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = TEXTURE_FLAGS_DEFAULT);
661 	virtual void texture_set_data(RID p_texture, const Image &p_image, CubeMapSide p_cube_side = CUBEMAP_LEFT);
662 	virtual Image texture_get_data(RID p_texture, CubeMapSide p_cube_side = CUBEMAP_LEFT) const;
663 	virtual void texture_set_flags(RID p_texture, uint32_t p_flags);
664 	virtual uint32_t texture_get_flags(RID p_texture) const;
665 	virtual Image::Format texture_get_format(RID p_texture) const;
666 	virtual uint32_t texture_get_width(RID p_texture) const;
667 	virtual uint32_t texture_get_height(RID p_texture) const;
668 	virtual void texture_set_size_override(RID p_texture, int p_width, int p_height);
669 	virtual bool texture_can_stream(RID p_texture) const;
670 	virtual void texture_set_reload_hook(RID p_texture, ObjectID p_owner, const StringName &p_function) const;
671 
672 	virtual void texture_set_path(RID p_texture, const String &p_path);
673 	virtual String texture_get_path(RID p_texture) const;
674 
675 	virtual void texture_debug_usage(List<TextureInfo> *r_info);
676 
677 	virtual void texture_set_shrink_all_x2_on_set_data(bool p_enable);
678 
679 	/* SHADER API */
680 
681 	virtual RID shader_create(ShaderMode p_mode = SHADER_MATERIAL);
682 
683 	virtual void shader_set_mode(RID p_shader, ShaderMode p_mode);
684 	virtual ShaderMode shader_get_mode(RID p_shader) const;
685 
686 	virtual void shader_set_code(RID p_shader, const String &p_vertex, const String &p_fragment, const String &p_light, int p_vertex_ofs = 0, int p_fragment_ofs = 0, int p_light_ofs = 0);
687 	virtual String shader_get_vertex_code(RID p_shader) const;
688 	virtual String shader_get_fragment_code(RID p_shader) const;
689 	virtual String shader_get_light_code(RID p_shader) const;
690 
691 	virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const;
692 
693 	virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture);
694 	virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const;
695 
696 	/* COMMON MATERIAL API */
697 
698 	virtual RID material_create();
699 
700 	virtual void material_set_shader(RID p_shader_material, RID p_shader);
701 	virtual RID material_get_shader(RID p_shader_material) const;
702 
703 	virtual void material_set_param(RID p_material, const StringName &p_param, const Variant &p_value);
704 	virtual Variant material_get_param(RID p_material, const StringName &p_param) const;
705 
706 	virtual void material_set_flag(RID p_material, MaterialFlag p_flag, bool p_enabled);
707 	virtual bool material_get_flag(RID p_material, MaterialFlag p_flag) const;
708 
709 	virtual void material_set_depth_draw_mode(RID p_material, MaterialDepthDrawMode p_mode);
710 	virtual MaterialDepthDrawMode material_get_depth_draw_mode(RID p_material) const;
711 
712 	virtual void material_set_blend_mode(RID p_material, MaterialBlendMode p_mode);
713 	virtual MaterialBlendMode material_get_blend_mode(RID p_material) const;
714 
715 	virtual void material_set_line_width(RID p_material, float p_line_width);
716 	virtual float material_get_line_width(RID p_material) const;
717 
718 	/* FIXED MATERIAL */
719 
720 	virtual RID fixed_material_create();
721 
722 	virtual void fixed_material_set_flag(RID p_material, FixedMaterialFlags p_flag, bool p_enabled);
723 	virtual bool fixed_material_get_flag(RID p_material, FixedMaterialFlags p_flag) const;
724 
725 	virtual void fixed_material_set_param(RID p_material, FixedMaterialParam p_parameter, const Variant &p_value);
726 	virtual Variant fixed_material_get_param(RID p_material, FixedMaterialParam p_parameter) const;
727 
728 	virtual void fixed_material_set_texture(RID p_material, FixedMaterialParam p_parameter, RID p_texture);
729 	virtual RID fixed_material_get_texture(RID p_material, FixedMaterialParam p_parameter) const;
730 
731 	virtual void fixed_material_set_texcoord_mode(RID p_material, FixedMaterialParam p_parameter, FixedMaterialTexCoordMode p_mode);
732 	virtual FixedMaterialTexCoordMode fixed_material_get_texcoord_mode(RID p_material, FixedMaterialParam p_parameter) const;
733 
734 	virtual void fixed_material_set_uv_transform(RID p_material, const Transform &p_transform);
735 	virtual Transform fixed_material_get_uv_transform(RID p_material) const;
736 
737 	virtual void fixed_material_set_light_shader(RID p_material, FixedMaterialLightShader p_shader);
738 	virtual FixedMaterialLightShader fixed_material_get_light_shader(RID p_material) const;
739 
740 	virtual void fixed_material_set_point_size(RID p_material, float p_size);
741 	virtual float fixed_material_get_point_size(RID p_material) const;
742 
743 	/* SURFACE API */
744 	virtual RID mesh_create();
745 
746 	virtual void mesh_set_morph_target_count(RID p_mesh, int p_amount);
747 	virtual int mesh_get_morph_target_count(RID p_mesh) const;
748 
749 	virtual void mesh_set_morph_target_mode(RID p_mesh, MorphTargetMode p_mode);
750 	virtual MorphTargetMode mesh_get_morph_target_mode(RID p_mesh) const;
751 
752 	virtual void mesh_add_custom_surface(RID p_mesh, const Variant &p_dat); //this is used by each platform in a different way
753 
754 	virtual void mesh_add_surface(RID p_mesh, PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes = Array(), bool p_alpha_sort = false);
755 	virtual Array mesh_get_surface_arrays(RID p_mesh, int p_surface) const;
756 	virtual Array mesh_get_surface_morph_arrays(RID p_mesh, int p_surface) const;
757 
758 	virtual void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material, bool p_owned = false);
759 	virtual RID mesh_surface_get_material(RID p_mesh, int p_surface) const;
760 
761 	virtual int mesh_surface_get_array_len(RID p_mesh, int p_surface) const;
762 	virtual int mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const;
763 	virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const;
764 	virtual PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const;
765 
766 	virtual void mesh_remove_surface(RID p_mesh, int p_index);
767 	virtual int mesh_get_surface_count(RID p_mesh) const;
768 
769 	virtual void mesh_set_custom_aabb(RID p_mesh, const AABB &p_aabb);
770 	virtual AABB mesh_get_custom_aabb(RID p_mesh) const;
771 
772 	virtual void mesh_clear(RID p_mesh);
773 
774 	/* MULTIMESH API */
775 
776 	virtual RID multimesh_create();
777 	virtual void multimesh_set_instance_count(RID p_multimesh, int p_count);
778 	virtual int multimesh_get_instance_count(RID p_multimesh) const;
779 
780 	virtual void multimesh_set_mesh(RID p_multimesh, RID p_mesh);
781 	virtual void multimesh_set_aabb(RID p_multimesh, const AABB &p_aabb);
782 	virtual void multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform &p_transform);
783 	virtual void multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color);
784 
785 	virtual RID multimesh_get_mesh(RID p_multimesh) const;
786 	virtual AABB multimesh_get_aabb(RID p_multimesh, const AABB &p_aabb) const;
787 	virtual Transform multimesh_instance_get_transform(RID p_multimesh, int p_index) const;
788 	virtual Color multimesh_instance_get_color(RID p_multimesh, int p_index) const;
789 
790 	virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible);
791 	virtual int multimesh_get_visible_instances(RID p_multimesh) const;
792 
793 	/* IMMEDIATE API */
794 
795 	virtual RID immediate_create();
796 	virtual void immediate_begin(RID p_immediate, PrimitiveType p_rimitive, RID p_texture = RID());
797 	virtual void immediate_vertex(RID p_immediate, const Vector3 &p_vertex);
798 	virtual void immediate_normal(RID p_immediate, const Vector3 &p_normal);
799 	virtual void immediate_tangent(RID p_immediate, const Plane &p_tangent);
800 	virtual void immediate_color(RID p_immediate, const Color &p_color);
801 	virtual void immediate_uv(RID p_immediate, const Vector2 &p_uv);
802 	virtual void immediate_uv2(RID p_immediate, const Vector2 &tex_uv);
803 	virtual void immediate_end(RID p_immediate);
804 	virtual void immediate_clear(RID p_immediate);
805 	virtual void immediate_set_material(RID p_immediate, RID p_material);
806 	virtual RID immediate_get_material(RID p_immediate) const;
807 
808 	/* PARTICLES API */
809 
810 	virtual RID particles_create();
811 
812 	virtual void particles_set_amount(RID p_particles, int p_amount);
813 	virtual int particles_get_amount(RID p_particles) const;
814 
815 	virtual void particles_set_emitting(RID p_particles, bool p_emitting);
816 	virtual bool particles_is_emitting(RID p_particles) const;
817 
818 	virtual void particles_set_visibility_aabb(RID p_particles, const AABB &p_visibility);
819 	virtual AABB particles_get_visibility_aabb(RID p_particles) const;
820 
821 	virtual void particles_set_emission_half_extents(RID p_particles, const Vector3 &p_half_extents);
822 	virtual Vector3 particles_get_emission_half_extents(RID p_particles) const;
823 
824 	virtual void particles_set_emission_base_velocity(RID p_particles, const Vector3 &p_base_velocity);
825 	virtual Vector3 particles_get_emission_base_velocity(RID p_particles) const;
826 
827 	virtual void particles_set_emission_points(RID p_particles, const DVector<Vector3> &p_points);
828 	virtual DVector<Vector3> particles_get_emission_points(RID p_particles) const;
829 
830 	virtual void particles_set_gravity_normal(RID p_particles, const Vector3 &p_normal);
831 	virtual Vector3 particles_get_gravity_normal(RID p_particles) const;
832 
833 	virtual void particles_set_variable(RID p_particles, ParticleVariable p_variable, float p_value);
834 	virtual float particles_get_variable(RID p_particles, ParticleVariable p_variable) const;
835 
836 	virtual void particles_set_randomness(RID p_particles, ParticleVariable p_variable, float p_randomness);
837 	virtual float particles_get_randomness(RID p_particles, ParticleVariable p_variable) const;
838 
839 	virtual void particles_set_color_phase_pos(RID p_particles, int p_phase, float p_pos);
840 	virtual float particles_get_color_phase_pos(RID p_particles, int p_phase) const;
841 
842 	virtual void particles_set_color_phases(RID p_particles, int p_phases);
843 	virtual int particles_get_color_phases(RID p_particles) const;
844 
845 	virtual void particles_set_color_phase_color(RID p_particles, int p_phase, const Color &p_color);
846 	virtual Color particles_get_color_phase_color(RID p_particles, int p_phase) const;
847 
848 	virtual void particles_set_attractors(RID p_particles, int p_attractors);
849 	virtual int particles_get_attractors(RID p_particles) const;
850 
851 	virtual void particles_set_attractor_pos(RID p_particles, int p_attractor, const Vector3 &p_pos);
852 	virtual Vector3 particles_get_attractor_pos(RID p_particles, int p_attractor) const;
853 
854 	virtual void particles_set_attractor_strength(RID p_particles, int p_attractor, float p_force);
855 	virtual float particles_get_attractor_strength(RID p_particles, int p_attractor) const;
856 
857 	virtual void particles_set_material(RID p_particles, RID p_material, bool p_owned = false);
858 	virtual RID particles_get_material(RID p_particles) const;
859 
860 	virtual void particles_set_height_from_velocity(RID p_particles, bool p_enable);
861 	virtual bool particles_has_height_from_velocity(RID p_particles) const;
862 
863 	virtual void particles_set_use_local_coordinates(RID p_particles, bool p_enable);
864 	virtual bool particles_is_using_local_coordinates(RID p_particles) const;
865 
866 	/* Light API */
867 
868 	virtual RID light_create(LightType p_type);
869 	virtual LightType light_get_type(RID p_light) const;
870 
871 	virtual void light_set_color(RID p_light, LightColor p_type, const Color &p_color);
872 	virtual Color light_get_color(RID p_light, LightColor p_type) const;
873 
874 	virtual void light_set_shadow(RID p_light, bool p_enabled);
875 	virtual bool light_has_shadow(RID p_light) const;
876 
877 	virtual void light_set_volumetric(RID p_light, bool p_enabled);
878 	virtual bool light_is_volumetric(RID p_light) const;
879 
880 	virtual void light_set_projector(RID p_light, RID p_texture);
881 	virtual RID light_get_projector(RID p_light) const;
882 
883 	virtual void light_set_param(RID p_light, LightParam p_var, float p_value);
884 	virtual float light_get_param(RID p_light, LightParam p_var) const;
885 
886 	virtual void light_set_operator(RID p_light, LightOp p_op);
887 	virtual LightOp light_get_operator(RID p_light) const;
888 
889 	virtual void light_omni_set_shadow_mode(RID p_light, LightOmniShadowMode p_mode);
890 	virtual LightOmniShadowMode light_omni_get_shadow_mode(RID p_light) const;
891 
892 	virtual void light_directional_set_shadow_mode(RID p_light, LightDirectionalShadowMode p_mode);
893 	virtual LightDirectionalShadowMode light_directional_get_shadow_mode(RID p_light) const;
894 	virtual void light_directional_set_shadow_param(RID p_light, LightDirectionalShadowParam p_param, float p_value);
895 	virtual float light_directional_get_shadow_param(RID p_light, LightDirectionalShadowParam p_param) const;
896 
897 	/* SKELETON API */
898 
899 	virtual RID skeleton_create();
900 	virtual void skeleton_resize(RID p_skeleton, int p_bones);
901 	virtual int skeleton_get_bone_count(RID p_skeleton) const;
902 	virtual void skeleton_bone_set_transform(RID p_skeleton, int p_bone, const Transform &p_transform);
903 	virtual Transform skeleton_bone_get_transform(RID p_skeleton, int p_bone);
904 
905 	/* ROOM API */
906 
907 	virtual RID room_create();
908 	virtual void room_set_bounds(RID p_room, const BSP_Tree &p_bounds);
909 	virtual BSP_Tree room_get_bounds(RID p_room) const;
910 
911 	/* PORTAL API */
912 
913 	virtual RID portal_create();
914 	virtual void portal_set_shape(RID p_portal, const Vector<Point2> &p_shape);
915 	virtual Vector<Point2> portal_get_shape(RID p_portal) const;
916 	virtual void portal_set_enabled(RID p_portal, bool p_enabled);
917 	virtual bool portal_is_enabled(RID p_portal) const;
918 	virtual void portal_set_disable_distance(RID p_portal, float p_distance);
919 	virtual float portal_get_disable_distance(RID p_portal) const;
920 	virtual void portal_set_disabled_color(RID p_portal, const Color &p_color);
921 	virtual Color portal_get_disabled_color(RID p_portal) const;
922 	virtual void portal_set_connect_range(RID p_portal, float p_range);
923 	virtual float portal_get_connect_range(RID p_portal) const;
924 
925 	/* BAKED LIGHT */
926 
927 	virtual RID baked_light_create();
928 
929 	virtual void baked_light_set_mode(RID p_baked_light, BakedLightMode p_mode);
930 	virtual BakedLightMode baked_light_get_mode(RID p_baked_light) const;
931 
932 	virtual void baked_light_set_octree(RID p_baked_light, const DVector<uint8_t> p_octree);
933 	virtual DVector<uint8_t> baked_light_get_octree(RID p_baked_light) const;
934 
935 	virtual void baked_light_set_light(RID p_baked_light, const DVector<uint8_t> p_light);
936 	virtual DVector<uint8_t> baked_light_get_light(RID p_baked_light) const;
937 
938 	virtual void baked_light_set_sampler_octree(RID p_baked_light, const DVector<int> &p_sampler);
939 	virtual DVector<int> baked_light_get_sampler_octree(RID p_baked_light) const;
940 
941 	virtual void baked_light_set_lightmap_multiplier(RID p_baked_light, float p_multiplier);
942 	virtual float baked_light_get_lightmap_multiplier(RID p_baked_light) const;
943 
944 	virtual void baked_light_add_lightmap(RID p_baked_light, const RID p_texture, int p_id);
945 	virtual void baked_light_clear_lightmaps(RID p_baked_light);
946 
947 	virtual void baked_light_set_realtime_color_enabled(RID p_baked_light, const bool p_enabled);
948 	virtual bool baked_light_get_realtime_color_enabled(RID p_baked_light) const;
949 
950 	virtual void baked_light_set_realtime_color(RID p_baked_light, const Color &p_color);
951 	virtual Color baked_light_get_realtime_color(RID p_baked_light) const;
952 
953 	virtual void baked_light_set_realtime_energy(RID p_baked_light, const float p_energy);
954 	virtual float baked_light_get_realtime_energy(RID p_baked_light) const;
955 
956 	/* BAKED LIGHT SAMPLER */
957 
958 	virtual RID baked_light_sampler_create();
959 
960 	virtual void baked_light_sampler_set_param(RID p_baked_light_sampler, BakedLightSamplerParam p_param, float p_value);
961 	virtual float baked_light_sampler_get_param(RID p_baked_light_sampler, BakedLightSamplerParam p_param) const;
962 
963 	virtual void baked_light_sampler_set_resolution(RID p_baked_light_sampler, int p_resolution);
964 	virtual int baked_light_sampler_get_resolution(RID p_baked_light_sampler) const;
965 
966 	/* CAMERA API */
967 
968 	virtual RID camera_create();
969 	virtual void camera_set_perspective(RID p_camera, float p_fovy_degrees, float p_z_near, float p_z_far);
970 	virtual void camera_set_orthogonal(RID p_camera, float p_size, float p_z_near, float p_z_far);
971 	virtual void camera_set_transform(RID p_camera, const Transform &p_transform);
972 
973 	virtual void camera_set_visible_layers(RID p_camera, uint32_t p_layers);
974 	virtual uint32_t camera_get_visible_layers(RID p_camera) const;
975 
976 	virtual void camera_set_environment(RID p_camera, RID p_env);
977 	virtual RID camera_get_environment(RID p_camera) const;
978 
979 	virtual void camera_set_use_vertical_aspect(RID p_camera, bool p_enable);
980 	virtual bool camera_is_using_vertical_aspect(RID p_camera, bool p_enable) const;
981 
982 	/* VIEWPORT API */
983 
984 	virtual RID viewport_create();
985 
986 	virtual void viewport_attach_to_screen(RID p_viewport, int p_screen = 0);
987 	virtual void viewport_detach(RID p_viewport);
988 
989 	virtual void viewport_set_as_render_target(RID p_viewport, bool p_enable);
990 	virtual void viewport_set_render_target_update_mode(RID p_viewport, RenderTargetUpdateMode p_mode);
991 	virtual RenderTargetUpdateMode viewport_get_render_target_update_mode(RID p_viewport) const;
992 	virtual RID viewport_get_render_target_texture(RID p_viewport) const;
993 	virtual void viewport_set_render_target_vflip(RID p_viewport, bool p_enable);
994 	virtual bool viewport_get_render_target_vflip(RID p_viewport) const;
995 	virtual void viewport_set_render_target_clear_on_new_frame(RID p_viewport, bool p_enable);
996 	virtual bool viewport_get_render_target_clear_on_new_frame(RID p_viewport) const;
997 	virtual void viewport_render_target_clear(RID p_viewport);
998 	virtual void viewport_set_render_target_to_screen_rect(RID p_viewport, const Rect2 &p_rect);
999 
1000 	virtual void viewport_queue_screen_capture(RID p_viewport);
1001 	virtual Image viewport_get_screen_capture(RID p_viewport) const;
1002 
1003 	virtual void viewport_set_rect(RID p_viewport, const ViewportRect &p_rect);
1004 	virtual ViewportRect viewport_get_rect(RID p_viewport) const;
1005 
1006 	virtual void viewport_set_hide_scenario(RID p_viewport, bool p_hide);
1007 	virtual void viewport_set_hide_canvas(RID p_viewport, bool p_hide);
1008 	virtual void viewport_set_disable_environment(RID p_viewport, bool p_disable);
1009 	virtual void viewport_attach_camera(RID p_viewport, RID p_camera);
1010 	virtual void viewport_set_scenario(RID p_viewport, RID p_scenario);
1011 
1012 	virtual RID viewport_get_attached_camera(RID p_viewport) const;
1013 	virtual RID viewport_get_scenario(RID p_viewport) const;
1014 	virtual void viewport_attach_canvas(RID p_viewport, RID p_canvas);
1015 	virtual void viewport_remove_canvas(RID p_viewport, RID p_canvas);
1016 	virtual void viewport_set_canvas_transform(RID p_viewport, RID p_canvas, const Matrix32 &p_offset);
1017 	virtual Matrix32 viewport_get_canvas_transform(RID p_viewport, RID p_canvas) const;
1018 	virtual void viewport_set_global_canvas_transform(RID p_viewport, const Matrix32 &p_transform);
1019 	virtual Matrix32 viewport_get_global_canvas_transform(RID p_viewport) const;
1020 	virtual void viewport_set_canvas_layer(RID p_viewport, RID p_canvas, int p_layer);
1021 	virtual void viewport_set_transparent_background(RID p_viewport, bool p_enabled);
1022 	virtual bool viewport_has_transparent_background(RID p_viewport) const;
1023 
1024 	/* ENVIRONMENT API */
1025 
1026 	virtual RID environment_create();
1027 
1028 	virtual void environment_set_background(RID p_env, EnvironmentBG p_bg);
1029 	virtual EnvironmentBG environment_get_background(RID p_env) const;
1030 
1031 	virtual void environment_set_background_param(RID p_env, EnvironmentBGParam p_param, const Variant &p_value);
1032 	virtual Variant environment_get_background_param(RID p_env, EnvironmentBGParam p_param) const;
1033 
1034 	virtual void environment_set_enable_fx(RID p_env, EnvironmentFx p_effect, bool p_enabled);
1035 	virtual bool environment_is_fx_enabled(RID p_env, EnvironmentFx p_effect) const;
1036 
1037 	virtual void environment_fx_set_param(RID p_env, EnvironmentFxParam p_effect, const Variant &p_param);
1038 	virtual Variant environment_fx_get_param(RID p_env, EnvironmentFxParam p_effect) const;
1039 
1040 	/* SCENARIO API */
1041 
1042 	virtual RID scenario_create();
1043 
1044 	virtual void scenario_set_debug(RID p_scenario, ScenarioDebugMode p_debug_mode);
1045 	virtual void scenario_set_environment(RID p_scenario, RID p_environment);
1046 	virtual RID scenario_get_environment(RID p_scenario, RID p_environment) const;
1047 	virtual void scenario_set_fallback_environment(RID p_scenario, RID p_environment);
1048 
1049 	/* INSTANCING API */
1050 
1051 	virtual RID instance_create();
1052 
1053 	virtual void instance_set_base(RID p_instance, RID p_base);
1054 	virtual RID instance_get_base(RID p_instance) const;
1055 
1056 	virtual void instance_set_scenario(RID p_instance, RID p_scenario);
1057 	virtual RID instance_get_scenario(RID p_instance) const;
1058 
1059 	virtual void instance_set_layer_mask(RID p_instance, uint32_t p_mask);
1060 	virtual uint32_t instance_get_layer_mask(RID p_instance) const;
1061 
1062 	virtual AABB instance_get_base_aabb(RID p_instance) const;
1063 
1064 	virtual void instance_attach_object_instance_ID(RID p_instance, uint32_t p_ID);
1065 	virtual uint32_t instance_get_object_instance_ID(RID p_instance) const;
1066 
1067 	virtual void instance_attach_skeleton(RID p_instance, RID p_skeleton);
1068 	virtual RID instance_get_skeleton(RID p_instance) const;
1069 
1070 	virtual void instance_set_morph_target_weight(RID p_instance, int p_shape, float p_weight);
1071 	virtual float instance_get_morph_target_weight(RID p_instance, int p_shape) const;
1072 
1073 	virtual void instance_set_surface_material(RID p_instance, int p_surface, RID p_material);
1074 
1075 	virtual void instance_set_transform(RID p_instance, const Transform &p_transform);
1076 	virtual Transform instance_get_transform(RID p_instance) const;
1077 
1078 	virtual void instance_set_exterior(RID p_instance, bool p_enabled);
1079 	virtual bool instance_is_exterior(RID p_instance) const;
1080 
1081 	virtual void instance_set_room(RID p_instance, RID p_room);
1082 	virtual RID instance_get_room(RID p_instance) const;
1083 
1084 	virtual void instance_set_extra_visibility_margin(RID p_instance, real_t p_margin);
1085 	virtual real_t instance_get_extra_visibility_margin(RID p_instance) const;
1086 
1087 	virtual Vector<RID> instances_cull_aabb(const AABB &p_aabb, RID p_scenario = RID()) const;
1088 	virtual Vector<RID> instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario = RID()) const;
1089 	virtual Vector<RID> instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario = RID()) const;
1090 
1091 	virtual void instance_geometry_set_flag(RID p_instance, InstanceFlags p_flags, bool p_enabled);
1092 	virtual bool instance_geometry_get_flag(RID p_instance, InstanceFlags p_flags) const;
1093 
1094 	virtual void instance_geometry_set_cast_shadows_setting(RID p_instance, VS::ShadowCastingSetting p_shadow_casting_setting);
1095 	virtual VS::ShadowCastingSetting instance_geometry_get_cast_shadows_setting(RID p_instance) const;
1096 
1097 	virtual void instance_geometry_set_material_override(RID p_instance, RID p_material);
1098 	virtual RID instance_geometry_get_material_override(RID p_instance) const;
1099 
1100 	virtual void instance_geometry_set_draw_range(RID p_instance, float p_min, float p_max);
1101 	virtual float instance_geometry_get_draw_range_max(RID p_instance) const;
1102 	virtual float instance_geometry_get_draw_range_min(RID p_instance) const;
1103 
1104 	virtual void instance_geometry_set_baked_light(RID p_instance, RID p_baked_light);
1105 	virtual RID instance_geometry_get_baked_light(RID p_instance) const;
1106 
1107 	virtual void instance_geometry_set_baked_light_sampler(RID p_instance, RID p_baked_light_sampler);
1108 	virtual RID instance_geometry_get_baked_light_sampler(RID p_instance) const;
1109 
1110 	virtual void instance_geometry_set_baked_light_texture_index(RID p_instance, int p_tex_id);
1111 	virtual int instance_geometry_get_baked_light_texture_index(RID p_instance) const;
1112 
1113 	virtual void instance_light_set_enabled(RID p_instance, bool p_enabled);
1114 	virtual bool instance_light_is_enabled(RID p_instance) const;
1115 
1116 	/* CANVAS (2D) */
1117 
1118 	virtual RID canvas_create();
1119 	virtual void canvas_set_item_mirroring(RID p_canvas, RID p_item, const Point2 &p_mirroring);
1120 	virtual Point2 canvas_get_item_mirroring(RID p_canvas, RID p_item) const;
1121 	virtual void canvas_set_modulate(RID p_canvas, const Color &p_color);
1122 
1123 	virtual RID canvas_item_create();
1124 
1125 	virtual void canvas_item_set_parent(RID p_item, RID p_parent_item);
1126 	virtual RID canvas_item_get_parent(RID p_canvas_item) const;
1127 
1128 	virtual void canvas_item_set_visible(RID p_item, bool p_visible);
1129 	virtual bool canvas_item_is_visible(RID p_item) const;
1130 
1131 	virtual void canvas_item_set_blend_mode(RID p_canvas_item, MaterialBlendMode p_blend);
1132 	virtual void canvas_item_set_light_mask(RID p_canvas_item, int p_mask);
1133 
1134 	//virtual void canvas_item_set_rect(RID p_item, const Rect2& p_rect);
1135 	virtual void canvas_item_set_transform(RID p_item, const Matrix32 &p_transform);
1136 	virtual void canvas_item_set_clip(RID p_item, bool p_clip);
1137 	virtual void canvas_item_set_distance_field_mode(RID p_item, bool p_enable);
1138 	virtual void canvas_item_set_custom_rect(RID p_item, bool p_custom_rect, const Rect2 &p_rect = Rect2());
1139 	virtual void canvas_item_set_opacity(RID p_item, float p_opacity);
1140 	virtual float canvas_item_get_opacity(RID p_item, float p_opacity) const;
1141 	virtual void canvas_item_set_on_top(RID p_item, bool p_on_top);
1142 	virtual bool canvas_item_is_on_top(RID p_item) const;
1143 
1144 	virtual void canvas_item_set_self_opacity(RID p_item, float p_self_opacity);
1145 	virtual float canvas_item_get_self_opacity(RID p_item, float p_self_opacity) const;
1146 
1147 	virtual void canvas_item_attach_viewport(RID p_item, RID p_viewport);
1148 
1149 	virtual void canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = 1.0);
1150 	virtual void canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color);
1151 	virtual void canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color);
1152 	virtual void canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
1153 	virtual void canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false);
1154 	virtual void canvas_item_add_style_box(RID p_item, const Rect2 &p_rect, const Rect2 &p_source, RID p_texture, const Vector2 &p_topleft, const Vector2 &p_bottomright, bool p_draw_center = true, const Color &p_modulate = Color(1, 1, 1));
1155 	virtual void canvas_item_add_primitive(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture, float p_width = 1.0);
1156 	virtual void canvas_item_add_polygon(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), RID p_texture = RID());
1157 	virtual void canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), RID p_texture = RID(), int p_count = -1);
1158 	virtual void canvas_item_add_triangle_array_ptr(RID p_item, int p_count, const int *p_indices, const Point2 *p_points, const Color *p_colors, const Point2 *p_uvs = NULL, RID p_texture = RID());
1159 	virtual void canvas_item_add_set_transform(RID p_item, const Matrix32 &p_transform);
1160 	virtual void canvas_item_add_set_blend_mode(RID p_item, MaterialBlendMode p_blend);
1161 	virtual void canvas_item_add_clip_ignore(RID p_item, bool p_ignore);
1162 	virtual void canvas_item_set_sort_children_by_y(RID p_item, bool p_enable);
1163 	virtual void canvas_item_set_z(RID p_item, int p_z);
1164 	virtual void canvas_item_set_z_as_relative_to_parent(RID p_item, bool p_enable);
1165 	virtual void canvas_item_set_copy_to_backbuffer(RID p_item, bool p_enable, const Rect2 &p_rect);
1166 
1167 	virtual void canvas_item_set_material(RID p_item, RID p_material);
1168 	virtual void canvas_item_set_use_parent_material(RID p_item, bool p_enable);
1169 
1170 	virtual RID canvas_light_create();
1171 	virtual void canvas_light_attach_to_canvas(RID p_light, RID p_canvas);
1172 	virtual void canvas_light_set_enabled(RID p_light, bool p_enabled);
1173 	virtual void canvas_light_set_transform(RID p_light, const Matrix32 &p_transform);
1174 	virtual void canvas_light_set_scale(RID p_light, float p_scale);
1175 	virtual void canvas_light_set_texture(RID p_light, RID p_texture);
1176 	virtual void canvas_light_set_texture_offset(RID p_light, const Vector2 &p_offset);
1177 	virtual void canvas_light_set_color(RID p_light, const Color &p_color);
1178 	virtual void canvas_light_set_height(RID p_light, float p_height);
1179 	virtual void canvas_light_set_energy(RID p_light, float p_energy);
1180 	virtual void canvas_light_set_z_range(RID p_light, int p_min_z, int p_max_z);
1181 	virtual void canvas_light_set_layer_range(RID p_light, int p_min_layer, int p_max_layer);
1182 	virtual void canvas_light_set_item_mask(RID p_light, int p_mask);
1183 	virtual void canvas_light_set_item_shadow_mask(RID p_light, int p_mask);
1184 
1185 	virtual void canvas_light_set_mode(RID p_light, CanvasLightMode p_mode);
1186 	virtual void canvas_light_set_shadow_enabled(RID p_light, bool p_enabled);
1187 	virtual void canvas_light_set_shadow_buffer_size(RID p_light, int p_size);
1188 	virtual void canvas_light_set_shadow_esm_multiplier(RID p_light, float p_multiplier);
1189 	virtual void canvas_light_set_shadow_color(RID p_light, const Color &p_color);
1190 
1191 	virtual RID canvas_light_occluder_create();
1192 	virtual void canvas_light_occluder_attach_to_canvas(RID p_occluder, RID p_canvas);
1193 	virtual void canvas_light_occluder_set_enabled(RID p_occluder, bool p_enabled);
1194 	virtual void canvas_light_occluder_set_polygon(RID p_occluder, RID p_polygon);
1195 	virtual void canvas_light_occluder_set_transform(RID p_occluder, const Matrix32 &p_xform);
1196 	virtual void canvas_light_occluder_set_light_mask(RID p_occluder, int p_mask);
1197 
1198 	virtual RID canvas_occluder_polygon_create();
1199 	virtual void canvas_occluder_polygon_set_shape(RID p_occluder_polygon, const DVector<Vector2> &p_shape, bool p_close);
1200 	virtual void canvas_occluder_polygon_set_shape_as_lines(RID p_occluder_polygon, const DVector<Vector2> &p_shape);
1201 	virtual void canvas_occluder_polygon_set_cull_mode(RID p_occluder_polygon, CanvasOccluderPolygonCullMode p_mode);
1202 
1203 	virtual void canvas_item_clear(RID p_item);
1204 	virtual void canvas_item_raise(RID p_item);
1205 
1206 	/* CANVAS ITEM MATERIAL */
1207 
1208 	virtual RID canvas_item_material_create();
1209 	virtual void canvas_item_material_set_shader(RID p_material, RID p_shader);
1210 	virtual void canvas_item_material_set_shader_param(RID p_material, const StringName &p_param, const Variant &p_value);
1211 	virtual Variant canvas_item_material_get_shader_param(RID p_material, const StringName &p_param) const;
1212 	virtual void canvas_item_material_set_shading_mode(RID p_material, CanvasItemShadingMode p_mode);
1213 
1214 	/* BLACK BARS */
1215 
1216 	virtual void black_bars_set_margins(int p_left, int p_top, int p_right, int p_bottom);
1217 	virtual void black_bars_set_images(RID p_left, RID p_top, RID p_right, RID p_bottom);
1218 
1219 	/* FREE */
1220 
1221 	virtual void free(RID p_rid);
1222 
1223 	/* CUSTOM SHADE MODEL */
1224 
1225 	virtual void custom_shade_model_set_shader(int p_model, RID p_shader);
1226 	virtual RID custom_shade_model_get_shader(int p_model) const;
1227 	virtual void custom_shade_model_set_name(int p_model, const String &p_name);
1228 	virtual String custom_shade_model_get_name(int p_model) const;
1229 	virtual void custom_shade_model_set_param_info(int p_model, const List<PropertyInfo> &p_info);
1230 	virtual void custom_shade_model_get_param_info(int p_model, List<PropertyInfo> *p_info) const;
1231 
1232 	/* EVENT QUEUING */
1233 
1234 	virtual void draw();
1235 	virtual void sync();
1236 
1237 	virtual void init();
1238 	virtual void finish();
1239 
1240 	virtual bool has_changed() const;
1241 
1242 	/* RENDER INFO */
1243 
1244 	virtual int get_render_info(RenderInfo p_info);
1245 	virtual bool has_feature(Features p_feature) const;
1246 
1247 	RID get_test_cube();
1248 
1249 	virtual void set_boot_image(const Image &p_image, const Color &p_color, bool p_scale);
1250 	virtual void set_default_clear_color(const Color &p_color);
1251 	virtual Color get_default_clear_color() const;
1252 
1253 	virtual void set_time_scale(float p_scale);
1254 
1255 	VisualServerRaster(Rasterizer *p_rasterizer);
1256 	~VisualServerRaster();
1257 };
1258 
1259 #endif
1260