Browse Source

Added render target size multiplier option.

Fix formatting
Malcolm Nixon 2 năm trước cách đây
mục cha
commit
d91e75b6f7

+ 3 - 0
modules/openxr/doc_classes/OpenXRInterface.xml

@@ -43,6 +43,9 @@
 		<member name="display_refresh_rate" type="float" setter="set_display_refresh_rate" getter="get_display_refresh_rate" default="0.0">
 		<member name="display_refresh_rate" type="float" setter="set_display_refresh_rate" getter="get_display_refresh_rate" default="0.0">
 			The display refresh rate for the current HMD. Only functional if this feature is supported by the OpenXR runtime and after the interface has been initialized.
 			The display refresh rate for the current HMD. Only functional if this feature is supported by the OpenXR runtime and after the interface has been initialized.
 		</member>
 		</member>
+		<member name="render_target_size_multiplier" type="float" setter="set_render_target_size_multiplier" getter="get_render_target_size_multiplier" default="1.0">
+			The render size multiplier for the current HMD. Must be set before the interface has been initialized.
+		</member>
 	</members>
 	</members>
 	<signals>
 	<signals>
 		<signal name="pose_recentered">
 		<signal name="pose_recentered">

+ 10 - 2
modules/openxr/openxr_api.cpp

@@ -1418,8 +1418,8 @@ Size2 OpenXRAPI::get_recommended_target_size() {
 
 
 	Size2 target_size;
 	Size2 target_size;
 
 
-	target_size.width = view_configuration_views[0].recommendedImageRectWidth;
-	target_size.height = view_configuration_views[0].recommendedImageRectHeight;
+	target_size.width = view_configuration_views[0].recommendedImageRectWidth * render_target_size_multiplier;
+	target_size.height = view_configuration_views[0].recommendedImageRectHeight * render_target_size_multiplier;
 
 
 	return target_size;
 	return target_size;
 }
 }
@@ -1953,6 +1953,14 @@ Array OpenXRAPI::get_available_display_refresh_rates() const {
 	return Array();
 	return Array();
 }
 }
 
 
+double OpenXRAPI::get_render_target_size_multiplier() const {
+	return render_target_size_multiplier;
+}
+
+void OpenXRAPI::set_render_target_size_multiplier(double multiplier) {
+	render_target_size_multiplier = multiplier;
+}
+
 OpenXRAPI::OpenXRAPI() {
 OpenXRAPI::OpenXRAPI() {
 	// OpenXRAPI is only constructed if OpenXR is enabled.
 	// OpenXRAPI is only constructed if OpenXR is enabled.
 	singleton = this;
 	singleton = this;

+ 5 - 0
modules/openxr/openxr_api.h

@@ -116,6 +116,7 @@ private:
 	XrSessionState session_state = XR_SESSION_STATE_UNKNOWN;
 	XrSessionState session_state = XR_SESSION_STATE_UNKNOWN;
 	bool running = false;
 	bool running = false;
 	XrFrameState frame_state = { XR_TYPE_FRAME_STATE, NULL, 0, 0, false };
 	XrFrameState frame_state = { XR_TYPE_FRAME_STATE, NULL, 0, 0, false };
+	double render_target_size_multiplier = 1.0;
 
 
 	OpenXRGraphicsExtensionWrapper *graphics_extension = nullptr;
 	OpenXRGraphicsExtensionWrapper *graphics_extension = nullptr;
 	XrSystemGraphicsProperties graphics_properties;
 	XrSystemGraphicsProperties graphics_properties;
@@ -362,6 +363,10 @@ public:
 	void set_display_refresh_rate(float p_refresh_rate);
 	void set_display_refresh_rate(float p_refresh_rate);
 	Array get_available_display_refresh_rates() const;
 	Array get_available_display_refresh_rates() const;
 
 
+	// Render Target size multiplier
+	double get_render_target_size_multiplier() const;
+	void set_render_target_size_multiplier(double multiplier);
+
 	// action map
 	// action map
 	String get_default_action_map_resource_name();
 	String get_default_action_map_resource_name();
 
 

+ 21 - 0
modules/openxr/openxr_interface.cpp

@@ -47,6 +47,11 @@ void OpenXRInterface::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_display_refresh_rate", "refresh_rate"), &OpenXRInterface::set_display_refresh_rate);
 	ClassDB::bind_method(D_METHOD("set_display_refresh_rate", "refresh_rate"), &OpenXRInterface::set_display_refresh_rate);
 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "display_refresh_rate"), "set_display_refresh_rate", "get_display_refresh_rate");
 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "display_refresh_rate"), "set_display_refresh_rate", "get_display_refresh_rate");
 
 
+	// Render Target size multiplier
+	ClassDB::bind_method(D_METHOD("get_render_target_size_multiplier"), &OpenXRInterface::get_render_target_size_multiplier);
+	ClassDB::bind_method(D_METHOD("set_render_target_size_multiplier", "multiplier"), &OpenXRInterface::set_render_target_size_multiplier);
+	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "render_target_size_multiplier"), "set_render_target_size_multiplier", "get_render_target_size_multiplier");
+
 	ClassDB::bind_method(D_METHOD("is_action_set_active", "name"), &OpenXRInterface::is_action_set_active);
 	ClassDB::bind_method(D_METHOD("is_action_set_active", "name"), &OpenXRInterface::is_action_set_active);
 	ClassDB::bind_method(D_METHOD("set_action_set_active", "name", "active"), &OpenXRInterface::set_action_set_active);
 	ClassDB::bind_method(D_METHOD("set_action_set_active", "name", "active"), &OpenXRInterface::set_action_set_active);
 	ClassDB::bind_method(D_METHOD("get_action_sets"), &OpenXRInterface::get_action_sets);
 	ClassDB::bind_method(D_METHOD("get_action_sets"), &OpenXRInterface::get_action_sets);
@@ -657,6 +662,22 @@ Array OpenXRInterface::get_action_sets() const {
 	return arr;
 	return arr;
 }
 }
 
 
+double OpenXRInterface::get_render_target_size_multiplier() const {
+	if (openxr_api == nullptr) {
+		return 1.0;
+	} else {
+		return openxr_api->get_render_target_size_multiplier();
+	}
+}
+
+void OpenXRInterface::set_render_target_size_multiplier(double multiplier) {
+	if (openxr_api == nullptr) {
+		return;
+	} else {
+		openxr_api->set_render_target_size_multiplier(multiplier);
+	}
+}
+
 Size2 OpenXRInterface::get_render_target_size() {
 Size2 OpenXRInterface::get_render_target_size() {
 	if (openxr_api == nullptr) {
 	if (openxr_api == nullptr) {
 		return Size2();
 		return Size2();

+ 3 - 0
modules/openxr/openxr_interface.h

@@ -127,6 +127,9 @@ public:
 	void set_action_set_active(const String &p_action_set, bool p_active);
 	void set_action_set_active(const String &p_action_set, bool p_active);
 	Array get_action_sets() const;
 	Array get_action_sets() const;
 
 
+	double get_render_target_size_multiplier() const;
+	void set_render_target_size_multiplier(double multiplier);
+
 	virtual Size2 get_render_target_size() override;
 	virtual Size2 get_render_target_size() override;
 	virtual uint32_t get_view_count() override;
 	virtual uint32_t get_view_count() override;
 	virtual Transform3D get_camera_transform() override;
 	virtual Transform3D get_camera_transform() override;