Skip to content

Commit

Permalink
[WIP]feat: add world tracking provider to render on acutal device
Browse files Browse the repository at this point in the history
  • Loading branch information
okwasniewski committed Jun 26, 2024
1 parent 05189a8 commit 1bb0b5d
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion examples/common/entry/swift_adapter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ using namespace entry;
bool BgfxAdapter::initialize(void) {
if (!m_initialized) {
// Set context width and height to default visionOS resolution.
s_ctx = new Context(2732, 2048);
s_ctx = new Context(1920, 1824);
s_ctx->m_window = m_layerRenderer;
m_initialized = true;
}
Expand Down
4 changes: 4 additions & 0 deletions src/renderer_mtl.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#import <QuartzCore/CAMetalLayer.h>
#import <Metal/Metal.h>
#import <MetalKit/MetalKit.h>
#import <ARKit/ARKit.h>

#if BX_PLATFORM_IOS || BX_PLATFORM_VISIONOS
# import <UIKit/UIKit.h>
Expand Down Expand Up @@ -1063,6 +1064,9 @@ namespace bgfx { namespace mtl
cp_layer_renderer_t m_layerRenderer;
cp_frame_t m_frame;
cp_drawable_t m_drawable;
ar_session_t session;
ar_world_tracking_provider_t world_tracking;
ar_device_anchor_t device_anchor;
#else
CAMetalLayer* m_metalLayer;
id <CAMetalDrawable> m_drawable;
Expand Down
32 changes: 32 additions & 0 deletions src/renderer_mtl.mm
Original file line number Diff line number Diff line change
Expand Up @@ -3316,6 +3316,8 @@ void writeString(bx::WriterI* _writer, const char* _str)
{
#if BX_PLATFORM_VISIONOS
MTL_RELEASE(m_layerRenderer);
MTL_RELEASE(session);
MTL_RELEASE(world_tracking);
#else
MTL_RELEASE(m_metalLayer);
MTL_RELEASE(m_drawable);
Expand All @@ -3339,7 +3341,23 @@ void writeString(bx::WriterI* _writer, const char* _str)
{
cp_layer_renderer_t layerRenderer = (cp_layer_renderer_t)_nwh;
m_layerRenderer = layerRenderer;

ar_world_tracking_configuration_t config = ar_world_tracking_configuration_create();
world_tracking = ar_world_tracking_provider_create(config);

ar_data_providers_t dataProviders = ar_data_providers_create_with_data_providers(world_tracking, nil);

device_anchor = ar_device_anchor_create();

session = ar_session_create();
ar_session_run(session, dataProviders);


retain(m_layerRenderer);
retain(session);
retain(world_tracking);
retain(device_anchor);

}
#else
if (m_metalLayer)
Expand Down Expand Up @@ -3577,6 +3595,20 @@ void writeString(bx::WriterI* _writer, const char* _str)
{
#if BX_PLATFORM_VISIONOS
m_drawableTexture = cp_drawable_get_color_texture(m_drawable, 0);

auto timing_info = cp_drawable_get_frame_timing(m_drawable);
auto time = cp_time_to_cf_time_interval(cp_frame_timing_get_presentation_time(timing_info));
const ar_device_anchor_query_status_t status = ar_world_tracking_provider_query_device_anchor_at_timestamp(world_tracking,
time,
device_anchor);

if (status != ar_device_anchor_query_status_success) {
NSLog(@"Failed to get estimated pose from world tracking provider for presentation timestamp");
} else {
NSLog(@"Succeded to get estimated pose from world tracking provider for presentation timestamp");
}

cp_drawable_set_device_anchor(m_drawable, device_anchor);
#else
m_drawableTexture = m_drawable.texture;
retain(m_drawable); // keep alive to be useable at 'flip'
Expand Down

0 comments on commit 1bb0b5d

Please sign in to comment.