mirror of
https://github.com/godotengine/godot.git
synced 2024-10-23 21:51:35 +00:00
Fix color issues with OpenXR
This commit is contained in:
parent
3fab862c59
commit
8f035b2ab4
|
@ -325,10 +325,65 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
|
||||||
*r_swapchain_graphics_data = data;
|
*r_swapchain_graphics_data = data;
|
||||||
data->is_multiview = (p_array_size > 1);
|
data->is_multiview = (p_array_size > 1);
|
||||||
|
|
||||||
RenderingDevice::DataFormat format = RenderingDevice::DATA_FORMAT_R8G8B8A8_SRGB; // TODO set this based on p_swapchain_format
|
RenderingDevice::DataFormat format = RenderingDevice::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||||
RenderingDevice::TextureSamples samples = RenderingDevice::TEXTURE_SAMPLES_1; // TODO set this based on p_sample_count
|
RenderingDevice::TextureSamples samples = RenderingDevice::TEXTURE_SAMPLES_1;
|
||||||
uint64_t usage_flags = RenderingDevice::TEXTURE_USAGE_SAMPLING_BIT | RenderingDevice::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
|
uint64_t usage_flags = RenderingDevice::TEXTURE_USAGE_SAMPLING_BIT | RenderingDevice::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||||
|
|
||||||
|
switch (p_swapchain_format) {
|
||||||
|
case VK_FORMAT_R8G8B8A8_SRGB:
|
||||||
|
// Even though this is an sRGB framebuffer format we're using UNORM here.
|
||||||
|
// The reason here is because Godot does a linear to sRGB conversion while
|
||||||
|
// with the sRGB format, this conversion would be doubled by the hardware.
|
||||||
|
// This also means we're reading the values as is for our preview on screen.
|
||||||
|
// The OpenXR runtime however is still treating this as an sRGB format and
|
||||||
|
// will thus do an sRGB -> Linear conversion as expected.
|
||||||
|
// format = RenderingDevice::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||||
|
format = RenderingDevice::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||||
|
break;
|
||||||
|
case VK_FORMAT_B8G8R8A8_SRGB:
|
||||||
|
// format = RenderingDevice::DATA_FORMAT_B8G8R8A8_SRGB;
|
||||||
|
format = RenderingDevice::DATA_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
break;
|
||||||
|
case VK_FORMAT_R8G8B8A8_UINT:
|
||||||
|
format = RenderingDevice::DATA_FORMAT_R8G8B8A8_UINT;
|
||||||
|
break;
|
||||||
|
case VK_FORMAT_B8G8R8A8_UINT:
|
||||||
|
format = RenderingDevice::DATA_FORMAT_B8G8R8A8_UINT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// continue with our default value
|
||||||
|
print_line("Unsupported swapchain format ", p_swapchain_format);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (p_sample_count) {
|
||||||
|
case 1:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_4;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_8;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_16;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_32;
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
samples = RenderingDevice::TEXTURE_SAMPLES_64;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// continue with our default value
|
||||||
|
print_line("Unsupported sample count ", p_sample_count);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
Vector<RID> image_rids;
|
Vector<RID> image_rids;
|
||||||
Vector<RID> framebuffers;
|
Vector<RID> framebuffers;
|
||||||
|
|
||||||
|
|
|
@ -819,7 +819,7 @@ bool OpenXRAPI::create_swapchain(int64_t p_swapchain_format, uint32_t p_width, u
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!graphics_extension->get_swapchain_image_data(new_swapchain, p_swapchain_format, p_width, p_height, p_array_size, p_array_size, r_swapchain_graphics_data)) {
|
if (!graphics_extension->get_swapchain_image_data(new_swapchain, p_swapchain_format, p_width, p_height, p_sample_count, p_array_size, r_swapchain_graphics_data)) {
|
||||||
xrDestroySwapchain(new_swapchain);
|
xrDestroySwapchain(new_swapchain);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user