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_HANDLE_INVALID, ABI::XR_ERROR_RUNTIME_FAILURE, ABI::XR_ERROR_VALIDATION_FAILURE, ABI::XR_FALSE, ABI::XR_FORM_FACTOR_HANDHELD_DISPLAY, ABI::XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY, ABI::XR_FORM_FACTOR_MAX_ENUM, 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_SUCCESS, ABI::XR_TRUE, ABI::XR_TYPE_API_LAYER_PROPERTIES, ABI::XR_TYPE_EXTENSION_PROPERTIES, ABI::XR_TYPE_INSTANCE_CREATE_INFO, ABI::XR_TYPE_SESSION_CREATE_INFO, ABI::XR_TYPE_SYSTEM_GET_INFO, ABI::XR_TYPE_SYSTEM_PROPERTIES, ABI::XR_TYPE_UNKNOWN, ABI::XR_TYPE_VIEW, ABI::XR_TYPE_VIEW_LOCATE_INFO, 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)


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

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.new(result, :xrCreateInstance) # TODO
  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.



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

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
    when XR_ERROR_HANDLE_INVALID then raise OpenXR::Result::HandleInvalid.new(:xrDestroyInstance)
    else raise OpenXR::Result.new(result, :xrDestroyInstance) # unreachable
  end
end

#handleFFI::Pointer

Returns:

  • (FFI::Pointer)


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

def handle
  @struct[:handle]
end