Class: OpenXR::Instance

Inherits:
Handle
  • Object
show all
Includes:
API
Defined in:
lib/openxr/instance.rb

Overview

An OpenXR instance handle.

Constant Summary

Constants included from ABI

ABI::XR_CURRENT_API_VERSION, ABI::XR_ERROR_ACTIONSETS_ALREADY_ATTACHED, ABI::XR_ERROR_ACTIONSET_NOT_ATTACHED, ABI::XR_ERROR_ACTION_TYPE_MISMATCH, ABI::XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR, ABI::XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR, ABI::XR_ERROR_API_LAYER_NOT_PRESENT, ABI::XR_ERROR_API_VERSION_UNSUPPORTED, ABI::XR_ERROR_CALL_ORDER_INVALID, ABI::XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT, ABI::XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED, ABI::XR_ERROR_EXTENSION_NOT_PRESENT, ABI::XR_ERROR_FEATURE_UNSUPPORTED, ABI::XR_ERROR_FILE_ACCESS_ERROR, ABI::XR_ERROR_FILE_CONTENTS_INVALID, ABI::XR_ERROR_FORM_FACTOR_UNAVAILABLE, ABI::XR_ERROR_FORM_FACTOR_UNSUPPORTED, ABI::XR_ERROR_FUNCTION_UNSUPPORTED, ABI::XR_ERROR_GRAPHICS_DEVICE_INVALID, ABI::XR_ERROR_HANDLE_INVALID, ABI::XR_ERROR_INDEX_OUT_OF_RANGE, ABI::XR_ERROR_INITIALIZATION_FAILED, ABI::XR_ERROR_INSTANCE_LOST, ABI::XR_ERROR_LAYER_INVALID, ABI::XR_ERROR_LAYER_LIMIT_EXCEEDED, ABI::XR_ERROR_LIMIT_REACHED, ABI::XR_ERROR_LOCALIZED_NAME_DUPLICATED, ABI::XR_ERROR_LOCALIZED_NAME_INVALID, ABI::XR_ERROR_NAME_DUPLICATED, ABI::XR_ERROR_NAME_INVALID, ABI::XR_ERROR_OUT_OF_MEMORY, ABI::XR_ERROR_PATH_COUNT_EXCEEDED, ABI::XR_ERROR_PATH_FORMAT_INVALID, ABI::XR_ERROR_PATH_INVALID, ABI::XR_ERROR_PATH_UNSUPPORTED, ABI::XR_ERROR_POSE_INVALID, ABI::XR_ERROR_REFERENCE_SPACE_UNSUPPORTED, ABI::XR_ERROR_RUNTIME_FAILURE, ABI::XR_ERROR_SESSION_LOST, ABI::XR_ERROR_SESSION_NOT_READY, ABI::XR_ERROR_SESSION_NOT_RUNNING, ABI::XR_ERROR_SESSION_NOT_STOPPING, ABI::XR_ERROR_SESSION_RUNNING, ABI::XR_ERROR_SIZE_INSUFFICIENT, ABI::XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED, ABI::XR_ERROR_SWAPCHAIN_RECT_INVALID, ABI::XR_ERROR_SYSTEM_INVALID, ABI::XR_ERROR_TIME_INVALID, ABI::XR_ERROR_VALIDATION_FAILURE, ABI::XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, ABI::XR_EVENT_UNAVAILABLE, ABI::XR_FALSE, ABI::XR_FORM_FACTOR_HANDHELD_DISPLAY, ABI::XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY, ABI::XR_FORM_FACTOR_MAX_ENUM, ABI::XR_FRAME_DISCARDED, ABI::XR_MAX_ACTION_NAME_SIZE, ABI::XR_MAX_ACTION_SET_NAME_SIZE, ABI::XR_MAX_API_LAYER_DESCRIPTION_SIZE, ABI::XR_MAX_API_LAYER_NAME_SIZE, ABI::XR_MAX_APPLICATION_NAME_SIZE, ABI::XR_MAX_ENGINE_NAME_SIZE, ABI::XR_MAX_EXTENSION_NAME_SIZE, ABI::XR_MAX_LOCALIZED_ACTION_NAME_SIZE, ABI::XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE, ABI::XR_MAX_PATH_LENGTH, ABI::XR_MAX_RESULT_STRING_SIZE, ABI::XR_MAX_RUNTIME_NAME_SIZE, ABI::XR_MAX_STRUCTURE_NAME_SIZE, ABI::XR_MAX_SYSTEM_NAME_SIZE, ABI::XR_MIN_COMPOSITION_LAYERS_SUPPORTED, ABI::XR_RESULT_MAX_ENUM, ABI::XR_SESSION_LOSS_PENDING, ABI::XR_SESSION_NOT_FOCUSED, ABI::XR_SPACE_BOUNDS_UNAVAILABLE, ABI::XR_STRUCTURE_TYPE_MAX_ENUM, ABI::XR_SUCCESS, ABI::XR_TIMEOUT_EXPIRED, ABI::XR_TRUE, ABI::XR_TYPE_ACTIONS_SYNC_INFO, ABI::XR_TYPE_ACTION_CREATE_INFO, ABI::XR_TYPE_ACTION_SET_CREATE_INFO, ABI::XR_TYPE_ACTION_SPACE_CREATE_INFO, ABI::XR_TYPE_ACTION_STATE_BOOLEAN, ABI::XR_TYPE_ACTION_STATE_FLOAT, ABI::XR_TYPE_ACTION_STATE_GET_INFO, ABI::XR_TYPE_ACTION_STATE_POSE, ABI::XR_TYPE_ACTION_STATE_VECTOR2F, ABI::XR_TYPE_API_LAYER_PROPERTIES, ABI::XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO, ABI::XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, ABI::XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, ABI::XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, ABI::XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, ABI::XR_TYPE_COMPOSITION_LAYER_PROJECTION, ABI::XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, ABI::XR_TYPE_COMPOSITION_LAYER_QUAD, ABI::XR_TYPE_DEBUG_UTILS_LABEL_EXT, ABI::XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, ABI::XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, ABI::XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, ABI::XR_TYPE_EVENT_DATA_BUFFER, ABI::XR_TYPE_EVENT_DATA_EVENTS_LOST, ABI::XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, ABI::XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, ABI::XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX, ABI::XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, ABI::XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, ABI::XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, ABI::XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, ABI::XR_TYPE_EXTENSION_PROPERTIES, ABI::XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT, ABI::XR_TYPE_FRAME_BEGIN_INFO, ABI::XR_TYPE_FRAME_END_INFO, ABI::XR_TYPE_FRAME_STATE, ABI::XR_TYPE_FRAME_WAIT_INFO, ABI::XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, ABI::XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, ABI::XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR, ABI::XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR, ABI::XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR, ABI::XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR, ABI::XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, ABI::XR_TYPE_HAPTIC_ACTION_INFO, ABI::XR_TYPE_HAPTIC_VIBRATION, ABI::XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO, ABI::XR_TYPE_INSTANCE_CREATE_INFO, ABI::XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR, ABI::XR_TYPE_INSTANCE_PROPERTIES, ABI::XR_TYPE_INTERACTION_PROFILE_STATE, ABI::XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, ABI::XR_TYPE_REFERENCE_SPACE_CREATE_INFO, ABI::XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, ABI::XR_TYPE_SESSION_BEGIN_INFO, ABI::XR_TYPE_SESSION_CREATE_INFO, ABI::XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX, ABI::XR_TYPE_SPACE_LOCATION, ABI::XR_TYPE_SPACE_VELOCITY, ABI::XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, ABI::XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, ABI::XR_TYPE_SWAPCHAIN_CREATE_INFO, ABI::XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, ABI::XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, ABI::XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, ABI::XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, ABI::XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, ABI::XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, ABI::XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, ABI::XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, ABI::XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT, ABI::XR_TYPE_SYSTEM_GET_INFO, ABI::XR_TYPE_SYSTEM_PROPERTIES, ABI::XR_TYPE_UNKNOWN, ABI::XR_TYPE_VIEW, ABI::XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, ABI::XR_TYPE_VIEW_CONFIGURATION_PROPERTIES, ABI::XR_TYPE_VIEW_CONFIGURATION_VIEW, ABI::XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, ABI::XR_TYPE_VIEW_LOCATE_INFO, ABI::XR_TYPE_VIEW_STATE, ABI::XR_TYPE_VISIBILITY_MASK_KHR, ABI::XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR, ABI::XrBaseInStructure, ABI::XrBaseOutStructure, ABI::XrBool32, ABI::XrDuration, ABI::XrFlags64, ABI::XrFormFactor, ABI::XrInstanceCreateFlags, ABI::XrPath, ABI::XrResult, ABI::XrSessionCreateFlags, ABI::XrStructureType, ABI::XrSystemId, ABI::XrTime, ABI::XrVersion

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ABI

XR_MAKE_VERSION

Constructor Details

#initialize(app_name, app_version: nil, api_version: nil) ⇒ Instance

Returns a new instance of Instance.

Parameters:

  • app_name (String, #to_s)
  • app_version (Integer, #to_i) (defaults to: nil)
  • api_version (Integer, #to_i) (defaults to: nil)

Raises:



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/openxr/instance.rb', line 34

def initialize(app_name, app_version: nil, api_version: nil)
  @struct = XrInstance.new

  request = XrInstanceCreateInfo.new
  request[:base][:type] = XR_TYPE_INSTANCE_CREATE_INFO
  request[:base][:next] = nil
  request[:createFlags] = 0
  request[:applicationInfo][:applicationName] = app_name.to_s
  request[:applicationInfo][:applicationVersion] = (app_version || 0).to_i
  request[:applicationInfo][:engineName] = "OpenXR.rb"
  request[:applicationInfo][:engineVersion] = 0
  request[:applicationInfo][:apiVersion] = (api_version || XR_CURRENT_API_VERSION).to_i

  # https://www.khronos.org/registry/OpenXR/specs/1.0/man/html/openxr.html#_xrcreateinstance3
  case result = xrCreateInstance(request, @struct)
    when XR_SUCCESS
    else raise OpenXR::Result.for(result).new(:xrCreateInstance)
  end
end

Class Method Details

.create(app_name, app_version: nil, api_version: nil) {|instance| ... } ⇒ Object

Parameters:

  • app_name (String, #to_s)
  • app_version (Integer, #to_i) (defaults to: nil)
  • api_version (Integer, #to_i) (defaults to: nil)

Yields:

  • (instance)

Returns:

  • (Object)


20
21
22
23
24
25
26
27
# File 'lib/openxr/instance.rb', line 20

def self.create(app_name, app_version: nil, api_version: nil, &block)
  instance = self.new(app_name, app_version: app_version, api_version: api_version)
  begin
    block.call(instance) if block_given?
  ensure
    instance&.destroy!
  end
end

Instance Method Details

#destroy!void

This method returns an undefined value.

Raises:



63
64
65
66
67
68
69
70
# File 'lib/openxr/instance.rb', line 63

def destroy!
  return if @struct.nil?
  # https://www.khronos.org/registry/OpenXR/specs/1.0/man/html/openxr.html#_xrdestroyinstance3
  case result = xrDestroyInstance(@struct[:handle])
    when XR_SUCCESS then @struct = nil
    else raise OpenXR::Result.for(result).new(:xrDestroyInstance) # unreachable
  end
end

#handleFFI::Pointer

Returns:

  • (FFI::Pointer)


56
57
58
# File 'lib/openxr/instance.rb', line 56

def handle
  @struct[:handle]
end