Expose RD::texture_native_handle

This commit is contained in:
Bastiaan Olij 2023-06-13 09:28:35 +10:00
parent dcd31a25b4
commit 6dd47e232b
8 changed files with 18 additions and 8 deletions

View File

@ -752,6 +752,14 @@
[b]Note:[/b] [param texture] requires the [constant TEXTURE_USAGE_CAN_COPY_FROM_BIT] to be retrieved. Otherwise, an error is printed and a empty [PackedByteArray] is returned. [b]Note:[/b] [param texture] requires the [constant TEXTURE_USAGE_CAN_COPY_FROM_BIT] to be retrieved. Otherwise, an error is printed and a empty [PackedByteArray] is returned.
</description> </description>
</method> </method>
<method name="texture_get_native_handle">
<return type="int" />
<param index="0" name="texture" type="RID" />
<description>
Returns the internal graphics handle for this texture object. For use when communicating with third-party APIs mostly with GDExtension.
[b]Note:[/b] This function returns a [code]uint64_t[/code] which internally maps to a [code]GLuint[/code] (OpenGL) or [code]VkImage[/code] (Vulkan).
</description>
</method>
<method name="texture_is_format_supported_for_usage" qualifiers="const"> <method name="texture_is_format_supported_for_usage" qualifiers="const">
<return type="bool" /> <return type="bool" />
<param index="0" name="format" type="int" enum="RenderingDevice.DataFormat" /> <param index="0" name="format" type="int" enum="RenderingDevice.DataFormat" />

View File

@ -3286,8 +3286,8 @@
<param index="0" name="texture" type="RID" /> <param index="0" name="texture" type="RID" />
<param index="1" name="srgb" type="bool" default="false" /> <param index="1" name="srgb" type="bool" default="false" />
<description> <description>
Returns the internal graphics handle for this texture object. For use when communicating with 3rd party APIs mostly with GDExternal. Returns the internal graphics handle for this texture object. For use when communicating with third-party APIs mostly with GDExtension.
[b]Note:[/b] This functions returns a [code]uint64_t[/code] which internally maps to a [code]GLuint[/code] (OpenGL) or [code]VkImage[/code] (Vulkan). [b]Note:[/b] This function returns a [code]uint64_t[/code] which internally maps to a [code]GLuint[/code] (OpenGL) or [code]VkImage[/code] (Vulkan).
</description> </description>
</method> </method>
<method name="texture_get_path" qualifiers="const"> <method name="texture_get_path" qualifiers="const">

View File

@ -2882,7 +2882,7 @@ Size2i RenderingDeviceVulkan::texture_size(RID p_texture) {
return Size2i(tex->width, tex->height); return Size2i(tex->width, tex->height);
} }
uint64_t RenderingDeviceVulkan::texture_native_handle(RID p_texture) { uint64_t RenderingDeviceVulkan::texture_get_native_handle(RID p_texture) {
_THREAD_SAFE_METHOD_ _THREAD_SAFE_METHOD_
Texture *tex = texture_owner.get_or_null(p_texture); Texture *tex = texture_owner.get_or_null(p_texture);

View File

@ -1083,7 +1083,7 @@ public:
virtual bool texture_is_shared(RID p_texture); virtual bool texture_is_shared(RID p_texture);
virtual bool texture_is_valid(RID p_texture); virtual bool texture_is_valid(RID p_texture);
virtual Size2i texture_size(RID p_texture); virtual Size2i texture_size(RID p_texture);
virtual uint64_t texture_native_handle(RID p_texture); virtual uint64_t texture_get_native_handle(RID p_texture);
virtual Error texture_copy(RID p_from_texture, RID p_to_texture, const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_size, uint32_t p_src_mipmap, uint32_t p_dst_mipmap, uint32_t p_src_layer, uint32_t p_dst_layer, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS); virtual Error texture_copy(RID p_from_texture, RID p_to_texture, const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_size, uint32_t p_src_mipmap, uint32_t p_dst_mipmap, uint32_t p_src_layer, uint32_t p_dst_layer, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS);
virtual Error texture_clear(RID p_texture, const Color &p_color, uint32_t p_base_mipmap, uint32_t p_mipmaps, uint32_t p_base_layer, uint32_t p_layers, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS); virtual Error texture_clear(RID p_texture, const Color &p_color, uint32_t p_base_mipmap, uint32_t p_mipmaps, uint32_t p_base_layer, uint32_t p_layers, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS);

View File

@ -37,7 +37,7 @@
#include "core/templates/rid.h" #include "core/templates/rid.h"
#include "storage/utilities.h" #include "storage/utilities.h"
// API definition for our RenderGeometryInstance class so we can expose this through GDExternal in the near future // API definition for our RenderGeometryInstance class so we can expose this through GDExtension in the near future
class RenderGeometryInstance { class RenderGeometryInstance {
public: public:
virtual ~RenderGeometryInstance() {} virtual ~RenderGeometryInstance() {}

View File

@ -1447,9 +1447,9 @@ uint64_t TextureStorage::texture_get_native_handle(RID p_texture, bool p_srgb) c
ERR_FAIL_COND_V(!tex, 0); ERR_FAIL_COND_V(!tex, 0);
if (p_srgb && tex->rd_texture_srgb.is_valid()) { if (p_srgb && tex->rd_texture_srgb.is_valid()) {
return RD::get_singleton()->texture_native_handle(tex->rd_texture_srgb); return RD::get_singleton()->texture_get_native_handle(tex->rd_texture_srgb);
} else { } else {
return RD::get_singleton()->texture_native_handle(tex->rd_texture); return RD::get_singleton()->texture_get_native_handle(tex->rd_texture);
} }
} }

View File

@ -720,6 +720,8 @@ void RenderingDevice::_bind_methods() {
ClassDB::bind_method(D_METHOD("texture_clear", "texture", "color", "base_mipmap", "mipmap_count", "base_layer", "layer_count", "post_barrier"), &RenderingDevice::texture_clear, DEFVAL(BARRIER_MASK_ALL_BARRIERS)); ClassDB::bind_method(D_METHOD("texture_clear", "texture", "color", "base_mipmap", "mipmap_count", "base_layer", "layer_count", "post_barrier"), &RenderingDevice::texture_clear, DEFVAL(BARRIER_MASK_ALL_BARRIERS));
ClassDB::bind_method(D_METHOD("texture_resolve_multisample", "from_texture", "to_texture", "post_barrier"), &RenderingDevice::texture_resolve_multisample, DEFVAL(BARRIER_MASK_ALL_BARRIERS)); ClassDB::bind_method(D_METHOD("texture_resolve_multisample", "from_texture", "to_texture", "post_barrier"), &RenderingDevice::texture_resolve_multisample, DEFVAL(BARRIER_MASK_ALL_BARRIERS));
ClassDB::bind_method(D_METHOD("texture_get_native_handle", "texture"), &RenderingDevice::texture_get_native_handle);
ClassDB::bind_method(D_METHOD("framebuffer_format_create", "attachments", "view_count"), &RenderingDevice::_framebuffer_format_create, DEFVAL(1)); ClassDB::bind_method(D_METHOD("framebuffer_format_create", "attachments", "view_count"), &RenderingDevice::_framebuffer_format_create, DEFVAL(1));
ClassDB::bind_method(D_METHOD("framebuffer_format_create_multipass", "attachments", "passes", "view_count"), &RenderingDevice::_framebuffer_format_create_multipass, DEFVAL(1)); ClassDB::bind_method(D_METHOD("framebuffer_format_create_multipass", "attachments", "passes", "view_count"), &RenderingDevice::_framebuffer_format_create_multipass, DEFVAL(1));
ClassDB::bind_method(D_METHOD("framebuffer_format_create_empty", "samples"), &RenderingDevice::framebuffer_format_create_empty, DEFVAL(TEXTURE_SAMPLES_1)); ClassDB::bind_method(D_METHOD("framebuffer_format_create_empty", "samples"), &RenderingDevice::framebuffer_format_create_empty, DEFVAL(TEXTURE_SAMPLES_1));

View File

@ -539,7 +539,7 @@ public:
virtual bool texture_is_shared(RID p_texture) = 0; virtual bool texture_is_shared(RID p_texture) = 0;
virtual bool texture_is_valid(RID p_texture) = 0; virtual bool texture_is_valid(RID p_texture) = 0;
virtual Size2i texture_size(RID p_texture) = 0; virtual Size2i texture_size(RID p_texture) = 0;
virtual uint64_t texture_native_handle(RID p_texture) = 0; virtual uint64_t texture_get_native_handle(RID p_texture) = 0;
virtual Error texture_copy(RID p_from_texture, RID p_to_texture, const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_size, uint32_t p_src_mipmap, uint32_t p_dst_mipmap, uint32_t p_src_layer, uint32_t p_dst_layer, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS) = 0; virtual Error texture_copy(RID p_from_texture, RID p_to_texture, const Vector3 &p_from, const Vector3 &p_to, const Vector3 &p_size, uint32_t p_src_mipmap, uint32_t p_dst_mipmap, uint32_t p_src_layer, uint32_t p_dst_layer, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS) = 0;
virtual Error texture_clear(RID p_texture, const Color &p_color, uint32_t p_base_mipmap, uint32_t p_mipmaps, uint32_t p_base_layer, uint32_t p_layers, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS) = 0; virtual Error texture_clear(RID p_texture, const Color &p_color, uint32_t p_base_mipmap, uint32_t p_mipmaps, uint32_t p_base_layer, uint32_t p_layers, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS) = 0;