1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-20 14:45:44 +00:00

Merge pull request #106880 from dsnopek/meta-depth-api-nonhacks

Minor rendering and XR changes to allow Meta enivornment depth API to work entirely from GDExtension
This commit is contained in:
Thaddeus Crews
2025-06-02 18:51:19 -05:00
4 changed files with 29 additions and 8 deletions

View File

@@ -2261,10 +2261,6 @@ void OpenXRAPI::pre_render() {
create_main_swapchains(swapchain_size);
}
for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
wrapper->on_pre_render();
}
void *view_locate_info_next_pointer = nullptr;
for (OpenXRExtensionWrapper *extension : frame_info_extensions) {
void *np = extension->set_view_locate_info_and_get_next_pointer(view_locate_info_next_pointer);
@@ -2335,6 +2331,10 @@ void OpenXRAPI::pre_render() {
// Reset this, we haven't found a viewport for output yet
render_state.has_xr_viewport = false;
for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
wrapper->on_pre_render();
}
}
bool OpenXRAPI::pre_draw_viewport(RID p_render_target) {

View File

@@ -2655,6 +2655,22 @@ void TextureStorage::_texture_format_from_rd(RD::DataFormat p_rd_format, Texture
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
} break; // astc 8x8
case RD::DATA_FORMAT_D16_UNORM: {
r_format.image_format = Image::FORMAT_RH;
r_format.rd_format = RD::DATA_FORMAT_D16_UNORM;
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
} break;
case RD::DATA_FORMAT_D32_SFLOAT: {
r_format.image_format = Image::FORMAT_RF;
r_format.rd_format = RD::DATA_FORMAT_D32_SFLOAT;
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
} break;
default: {
ERR_FAIL_MSG("Unsupported image format");

View File

@@ -732,9 +732,6 @@ void RendererViewport::draw_viewports(bool p_swap_buffers) {
Ref<XRInterface> xr_interface;
XRServer *xr_server = XRServer::get_singleton();
if (xr_server != nullptr) {
// let our XR server know we're about to render our frames so we can get our frame timing
xr_server->pre_render();
// retrieve the interface responsible for rendering
xr_interface = xr_server->get_primary_interface();
}

View File

@@ -73,6 +73,15 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
uint64_t time_usec = OS::get_singleton()->get_ticks_usec();
RENDER_TIMESTAMP("Prepare Render Frame");
#ifndef XR_DISABLED
XRServer *xr_server = XRServer::get_singleton();
if (xr_server != nullptr) {
// Let XR server know we're about to render a frame.
xr_server->pre_render();
}
#endif // XR_DISABLED
RSG::scene->update(); //update scenes stuff before updating instances
RSG::canvas->update();
@@ -88,7 +97,6 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
RSG::rasterizer->end_frame(p_swap_buffers);
#ifndef XR_DISABLED
XRServer *xr_server = XRServer::get_singleton();
if (xr_server != nullptr) {
// let our XR server know we're done so we can get our frame timing
xr_server->end_frame();