2017-10-07 21:51:17 +08:00
/*************************************************************************/
2021-08-23 13:23:16 +08:00
/* xr_interface_extension.h */
2017-10-07 21:51:17 +08:00
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/*************************************************************************/
2021-01-02 03:13:46 +08:00
/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
2017-10-07 21:51:17 +08:00
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
2021-08-23 13:23:16 +08:00
# ifndef XR_INTERFACE_EXTENSION_H
# define XR_INTERFACE_EXTENSION_H
2017-10-07 21:51:17 +08:00
2020-04-08 22:47:36 +08:00
# include "servers/xr/xr_interface.h"
2017-10-07 21:51:17 +08:00
2021-08-23 13:23:16 +08:00
class XRInterfaceExtension : public XRInterface {
GDCLASS ( XRInterfaceExtension , XRInterface ) ;
2017-10-07 21:51:17 +08:00
2021-08-23 13:23:16 +08:00
public :
private :
bool can_add_blits = false ;
Vector < BlitToScreen > blits ;
2017-10-07 21:51:17 +08:00
protected :
2021-08-23 13:23:16 +08:00
_THREAD_SAFE_CLASS_
2017-10-07 21:51:17 +08:00
2019-06-01 21:42:22 +08:00
static void _bind_methods ( ) ;
2017-10-07 21:51:17 +08:00
public :
/** general interface information **/
2020-07-10 18:34:39 +08:00
virtual StringName get_name ( ) const override ;
2021-08-23 13:23:16 +08:00
virtual uint32_t get_capabilities ( ) const override ;
GDVIRTUAL0RC ( StringName , _get_name ) ;
GDVIRTUAL0RC ( uint32_t , _get_capabilities ) ;
2017-10-07 21:51:17 +08:00
2020-07-10 18:34:39 +08:00
virtual bool is_initialized ( ) const override ;
virtual bool initialize ( ) override ;
virtual void uninitialize ( ) override ;
2017-10-07 21:51:17 +08:00
2021-08-23 13:23:16 +08:00
GDVIRTUAL0RC ( bool , _is_initialized ) ;
GDVIRTUAL0R ( bool , _initialize ) ;
GDVIRTUAL0 ( _uninitialize ) ;
2021-08-29 14:05:11 +08:00
/** input and output **/
virtual PackedStringArray get_suggested_tracker_names ( ) const override ; /* return a list of likely/suggested tracker names */
virtual PackedStringArray get_suggested_pose_names ( const StringName & p_tracker_name ) const override ; /* return a list of likely/suggested action names for this tracker */
2021-08-23 13:23:16 +08:00
virtual TrackingStatus get_tracking_status ( ) const override ;
2021-08-29 14:05:11 +08:00
virtual void trigger_haptic_pulse ( const String & p_action_name , const StringName & p_tracker_name , double p_frequency , double p_amplitude , double p_duration_sec , double p_delay_sec = 0 ) override ;
GDVIRTUAL0RC ( PackedStringArray , _get_suggested_tracker_names ) ;
GDVIRTUAL1RC ( PackedStringArray , _get_suggested_pose_names , const StringName & ) ;
2021-08-23 13:23:16 +08:00
GDVIRTUAL0RC ( uint32_t , _get_tracking_status ) ;
2021-08-29 14:05:11 +08:00
GDVIRTUAL6 ( _trigger_haptic_pulse , const String & , const StringName & , double , double , double , double ) ;
2021-08-23 13:23:16 +08:00
/** specific to VR **/
2021-06-27 19:51:30 +08:00
virtual bool supports_play_area_mode ( XRInterface : : PlayAreaMode p_mode ) override ; /* query if this interface supports this play area mode */
virtual XRInterface : : PlayAreaMode get_play_area_mode ( ) const override ; /* get the current play area mode */
virtual bool set_play_area_mode ( XRInterface : : PlayAreaMode p_mode ) override ; /* change the play area mode, note that this should return false if the mode is not available */
virtual PackedVector3Array get_play_area ( ) const override ; /* if available, returns an array of vectors denoting the play area the player can move around in */
GDVIRTUAL1RC ( bool , _supports_play_area_mode , XRInterface : : PlayAreaMode ) ;
GDVIRTUAL0RC ( uint32_t , _get_play_area_mode ) ;
GDVIRTUAL1RC ( bool , _set_play_area_mode , uint32_t ) ;
GDVIRTUAL0RC ( PackedVector3Array , _get_play_area ) ;
2021-08-23 13:23:16 +08:00
2017-10-07 21:51:17 +08:00
/** specific to AR **/
2020-07-10 18:34:39 +08:00
virtual bool get_anchor_detection_is_enabled ( ) const override ;
virtual void set_anchor_detection_is_enabled ( bool p_enable ) override ;
virtual int get_camera_feed_id ( ) override ;
2017-10-07 21:51:17 +08:00
2021-08-23 13:23:16 +08:00
GDVIRTUAL0RC ( bool , _get_anchor_detection_is_enabled ) ;
GDVIRTUAL1 ( _set_anchor_detection_is_enabled , bool ) ;
GDVIRTUAL0RC ( int , _get_camera_feed_id ) ;
2017-10-07 21:51:17 +08:00
/** rendering and internal **/
2021-08-23 13:23:16 +08:00
virtual Size2 get_render_target_size ( ) override ;
2021-05-07 21:19:04 +08:00
virtual uint32_t get_view_count ( ) override ;
virtual Transform3D get_camera_transform ( ) override ;
virtual Transform3D get_transform_for_view ( uint32_t p_view , const Transform3D & p_cam_transform ) override ;
2021-08-28 12:32:40 +08:00
virtual CameraMatrix get_projection_for_view ( uint32_t p_view , double p_aspect , double p_z_near , double p_z_far ) override ;
2017-10-07 21:51:17 +08:00
2021-08-23 13:23:16 +08:00
GDVIRTUAL0R ( Size2 , _get_render_target_size ) ;
GDVIRTUAL0R ( uint32_t , _get_view_count ) ;
GDVIRTUAL0R ( Transform3D , _get_camera_transform ) ;
GDVIRTUAL2R ( Transform3D , _get_transform_for_view , uint32_t , const Transform3D & ) ;
2021-08-28 12:32:40 +08:00
GDVIRTUAL4R ( PackedFloat64Array , _get_projection_for_view , uint32_t , double , double , double ) ;
2021-08-23 13:23:16 +08:00
2021-08-28 12:32:40 +08:00
void add_blit ( RID p_render_target , Rect2 p_src_rect , Rect2i p_dst_rect , bool p_use_layer = false , uint32_t p_layer = 0 , bool p_apply_lens_distortion = false , Vector2 p_eye_center = Vector2 ( ) , double p_k1 = 0.0 , double p_k2 = 0.0 , double p_upscale = 1.0 , double p_aspect_ratio = 1.0 ) ;
2021-05-07 21:19:04 +08:00
virtual Vector < BlitToScreen > commit_views ( RID p_render_target , const Rect2 & p_screen_rect ) override ;
2021-08-23 13:23:16 +08:00
GDVIRTUAL2 ( _commit_views , RID , const Rect2 & ) ;
2017-10-07 21:51:17 +08:00
2020-07-10 18:34:39 +08:00
virtual void process ( ) override ;
virtual void notification ( int p_what ) override ;
2021-05-07 21:19:04 +08:00
2021-08-23 13:23:16 +08:00
GDVIRTUAL0 ( _process ) ;
GDVIRTUAL1 ( _notification , int ) ;
2021-08-29 10:52:19 +08:00
/* access to some internals we need */
RID get_render_target_texture ( RID p_render_target ) ;
// RID get_render_target_depth(RID p_render_target);
2017-10-07 21:51:17 +08:00
} ;
2021-08-23 13:23:16 +08:00
# endif // !XR_INTERFACE_EXTENSION_H