mirror of
https://github.com/godotengine/godot.git
synced 2025-11-01 06:01:14 +00:00
Merge pull request #99407 from devloglogan/rec-resolution
Allow using custom `Rect2i` for rendering with OpenXR
This commit is contained in:
commit
3014eec40d
25 changed files with 215 additions and 19 deletions
|
|
@ -143,6 +143,7 @@ private:
|
|||
bool running = false;
|
||||
XrFrameState frame_state = { XR_TYPE_FRAME_STATE, nullptr, 0, 0, false };
|
||||
double render_target_size_multiplier = 1.0;
|
||||
Rect2i render_region;
|
||||
|
||||
OpenXRGraphicsExtensionWrapper *graphics_extension = nullptr;
|
||||
XrSystemGraphicsProperties graphics_properties;
|
||||
|
|
@ -341,6 +342,7 @@ private:
|
|||
XrSpace play_space = XR_NULL_HANDLE;
|
||||
double render_target_size_multiplier = 1.0;
|
||||
uint64_t frame = 0;
|
||||
Rect2i render_region;
|
||||
|
||||
uint32_t view_count = 0;
|
||||
XrView *views = nullptr;
|
||||
|
|
@ -352,6 +354,15 @@ private:
|
|||
double z_near = 0.0;
|
||||
double z_far = 0.0;
|
||||
|
||||
XrCompositionLayerProjection projection_layer = {
|
||||
XR_TYPE_COMPOSITION_LAYER_PROJECTION, // type
|
||||
nullptr, // next
|
||||
0, // layerFlags
|
||||
XR_NULL_HANDLE, // space
|
||||
0, // viewCount
|
||||
nullptr // views
|
||||
};
|
||||
|
||||
Size2i main_swapchain_size;
|
||||
OpenXRSwapChainInfo main_swapchains[OPENXR_SWAPCHAIN_MAX];
|
||||
} render_state;
|
||||
|
|
@ -361,6 +372,7 @@ private:
|
|||
static void _set_render_display_info(XrTime p_predicted_display_time, bool p_should_render);
|
||||
static void _set_render_play_space(uint64_t p_play_space);
|
||||
static void _set_render_state_multiplier(double p_render_target_size_multiplier);
|
||||
static void _set_render_state_render_region(const Rect2i &p_render_region);
|
||||
|
||||
_FORCE_INLINE_ void allocate_view_buffers(uint32_t p_view_count, bool p_submit_depth_buffer) {
|
||||
// If we're rendering on a separate thread, we may still be processing the last frame, don't communicate this till we're ready...
|
||||
|
|
@ -402,6 +414,13 @@ private:
|
|||
rendering_server->call_on_render_thread(callable_mp_static(&OpenXRAPI::_set_render_state_multiplier).bind(p_render_target_size_multiplier));
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ void set_render_state_render_region(const Rect2i &p_render_region) {
|
||||
RenderingServer *rendering_server = RenderingServer::get_singleton();
|
||||
ERR_FAIL_NULL(rendering_server);
|
||||
|
||||
rendering_server->call_on_render_thread(callable_mp_static(&OpenXRAPI::_set_render_state_render_region).bind(p_render_region));
|
||||
}
|
||||
|
||||
public:
|
||||
XrInstance get_instance() const { return instance; }
|
||||
XrSystemId get_system_id() const { return system_id; }
|
||||
|
|
@ -491,6 +510,7 @@ public:
|
|||
RID get_velocity_depth_texture();
|
||||
void set_velocity_target_size(const Size2i &p_target_size);
|
||||
Size2i get_velocity_target_size();
|
||||
const XrCompositionLayerProjection *get_projection_layer() const;
|
||||
void post_draw_viewport(RID p_render_target);
|
||||
void end_frame();
|
||||
|
||||
|
|
@ -503,6 +523,9 @@ public:
|
|||
double get_render_target_size_multiplier() const;
|
||||
void set_render_target_size_multiplier(double multiplier);
|
||||
|
||||
Rect2i get_render_region() const;
|
||||
void set_render_region(const Rect2i &p_render_region);
|
||||
|
||||
// Foveation settings
|
||||
bool is_foveation_supported() const;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue