This page documents the changes between Vuforia Engine version 9.8 and version 10 as the API has fundamentally changed. Use this overview to learn about the native changes and for migrating your existing projects to the new API.
We recommend reading the Vuforia Engine 10 API page for a general introduction to the new API. For a step-by-step structure for using Vuforia Engine 10 API, please see Vuforia Engine Lifecycle.
The Vuforia Engine API has changed from a manager centric and object-oriented C++ library to an imperative struct-based C library.
This makes it easier to integrate Vuforia Engine in rendering and game engines or create bindings for platform specific programing languages, such as Swift or Kotlin.
On a high level, the new Vuforia Engine 10 API is simplifying many concepts, in particular life cycle management of Trackers, Datasets, the Camera and Targets.
Content:
- Area Targets
- Model Targets
- Image Targets
- Cloud Recognition
- Cylinder Targets
- Multi Targets
- Ground Plane
- Object Targets
The Object Targets feature has been deprecated with Vuforia Engine 10.5 and will no longer be supported going forward. Please use scanned Model Targets instead.
- VuMarks
- Platform
High-level Comparison
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
Object-oriented C++ API. Uses Singleton (Manager). Static methods, and inheritance. |
Imperative C API. Uses instances for everything, opaque pointers, and a struct-based configuration and composition |
Static lifecycle management with Tracker, Trackable and its TrackableResult. |
Lifecycle management with an Engine instance via Configuration options (Config), Observer (with Config) and its Observations, Camera/Render/Platform Controller (with Config) |
Tracker Manager has been REMOVED. Trackers are replaced by Observers, a list of Observers can be directly retrieved from Engine. State updates can be directly done from the Engine instance ( |
|
Vuforia lifecycle Static methods:
|
Vuforia lifecycle management is done with a VuEngine object that can be created, destroyed, started, and stopped. |
Configure Engine with Only one instance is supported at a time. |
|
Camera support with lifecycle control:
|
Abstracted by CameraController . Camera lifecycle is bound to the VuEngine lifecycle, no need to directly control it. |
Rendering support with Renderer and RenderingPrimitives . |
Abstracted by the RenderController and the RenderState , latter is available from the State . Read and use your rendering primitives like immutable elements directly from the State . |
Tracking Support:
|
Tracker has been REMOVED and replaced by Observers. Abstracted by the generic concept of An An Each Observers can have dependencies between each other, which is spelled out explicitly in the respective Activating/deactivating an Observer can be seen as starting/stopping the action of tracking an element. |
Tracking Support: Trackable and TrackableResult (configuration, access, type). |
A Target (or a property of the real world) is being observed by an
They can be configured via
|
Trackable is now accessible from a VuObserver .id is now Observer id. name is now optional, see different Observer types with targets for that. User data has been REMOVED. |
|
TrackableResult is replaced by
(status info), |
|
TrackableSource | REMOVED. |
Tracking Support:
|
Abstracted under the hood and no longer a high-level concept. Dataset life cycle no longer needs to be managed explicitlyDataSet is now referenced as Database , which is a container format for targets. Database has associated utility methods for doing container operations with VuDatabaseTargetInfo . |
Tracking Support: Getting updates from State (pull) and callback (push). |
Parsing the |
Type | Replaced by int32_ type for Observer (Tracker/Trackable) and Observation (TrackableResult) with anonymous enum with vuObserverGetType , vuObserverIsType , utility methods. |
Utils:
|
Instead, new built-in utility functions let you manipulate Vector, Matrix, transformation, etc. Poses are now represented by 4x4 matrices in OpenGL format with a transformation matrix with homogeneous coordinates and column major representation. |
Utils: User Data on trackable |
REMOVED Use app-level mechanisms to associate data toObservers. |
Coordinate System, Frame of References and Poses. | Coordinate System is unchanged except for the Guide View’s Coordinate System: Its pose is now consistent with the general convention of the SDK (Y-up). See Spatial Frame of Reference for more information. Poses are now also delivered strictly as Matrix44F in OpenGL format. |
Object Lifetime | Objects are now opaque pointers with specific create/destroy, acquire/release methods. Any raw pointer is generally bound to an associated object which has a maintained lifecycle. |
Camera
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
CameraCalibration | VuCameraIntrinsics FOV (field of view) accessible via utility method vuCameraIntrinsicsGetFov() Extended to also deliver the distortion mode used. |
CameraDevice | CameraController Lifecycle of the camera is now bound to the lifecycle of the Vuforia Engine. Flash, focus, advanced camera fields are accessible via getter and setter functions. Video modes have been SIMPLIFIED: You can now only get the list of preset modes and get/set an active one. |
CameraField | Camera fields are accessible via the CameraController using getter/setter functions |
Frame | VuCameraFrame |
Image Represents an image, typically as returned by the CameraDevice. |
VuImage |
VideoMode |
index replaced by preset enum. |
Rendering
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
Device | Abstracted now via PlatformController .RenderingPrimitives is not directly accessible anymore, but returned in the state as RenderState .Similarly as existing behavior, calling setRenderViewConfig() to change the video mode or changing the video background config will impact the returned RenderState |
Renderer | vuRenderController. |
setVideoBackgroundTexture and updateVideoBackgroundTexture is now done with an unique method vuRenderControllerUpdateVideoBackgroundTexture . |
|
information about video background texture can be retrieved via vuRenderControllerGetVideoBackgroundViewInfo . |
|
Configuring the viewport can now been done in 2 ways: Using preset mode or specifying the viewport (legacy). | |
FPS (frames per second) methods have been REMOVED. You can query the video mode from the camera controller to get the current FPS and adapt your rendering loop using modern techniques (choreographer on Android, CADisplayLink on iOS, etc.). | |
Concept of render scope (begin/end) has been removed. | |
TextureData , TextureUnit and RenderData are now abstracted via VuRenderVideoBackgroundData . |
|
RenderingPrimitives |
Concepts of View has been REMOVED. |
Normalized viewport has been REMOVED. | |
adjustForViewportCentreToEyeAxis parameter has been REMOVED. |
|
Eye-to-display-matrix have been REMOVED. Viewport, video background projection matrix, mesh, and projection matrix are now accessible from the RenderState . |
|
A utility method in RenderController allows you to configure the near/far plane of the projection matrix with get/set functions: vuRenderControllerSetProjectionMatrixNearFar . |
|
Added a viewMatrix as a utility method to get the inverse of the camera pose. |
|
Video background texture size is available from the vuRenderController . |
|
VideoBackgroundConfig |
Replaced by a VuVector4I viewport that can be set from the vuRenderController via vuRenderControllerSetVideoBackgroundViewport .Viewport is now using origin rather than screen center. |
VideoBackgroundTextureInfo |
Replaced by VuVideoBackgroundViewInfo . |
GLRenderer | Replaced by calling vuRenderControllerUpdateVideoBackgroundTexture .int mTextureIndex has been REMOVED.Current context is implicit. |
DXRenderer | Replaced by calling vuRenderControllerUpdateVideoBackgroundTexture . |
MetalRenderer | Replaced by calling vuRenderControllerUpdateVideoBackgroundTexture .texture index has been REMOVED. id<MTLTexture> drawableTexture has been REMOVED. |
Tracking Support
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
DeviceTrackable | VuDevicePoseObserver id is now observer id. name has been REMOVED. (Remark: DevicePose is scaleless and no size or bbox (bounding-box) info is available). |
DeviceTrackableResult | VuObservation from VuDevicePoseObserver .includes: vuObservationGetPoseInfo (pose + status), vuDevicePoseObservationGetStatusInfo (status info). |
DeviceTracker | REMOVED. |
PositionalDeviceTracker | Abstracted as VuDevicePoseObserver (only one can consist at a time)It is no longer needed to start/stop tracker (just activate/deactivate your Observer). |
Reset world tracking is now an Engine level method vuEngineReset . Any Observer dependent on the Device Pose Observer may be affected by the reset. |
|
Anchor creation (created from device pose, created from hit test) is now handled by its dedicated Observer: vuAnchorObserver . |
DataSet
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
DataSet | Replaced with utility methods to parse check database of targets: vuDatabaseTargetInfo .Only the type of trackable + name are now accessible (not all trackable info such as unique id, scale, etc.). |
|
|
CreateTrackable from source methods have been moved to the ImageTargetObserver and ImageTargetCloudObserver .Destroy method and target limit check have been REMOVED. Create MultiTarget has been REMOVED. |
State
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
State | VuState . |
Frame – VuCameraFrame . |
|
Camera calibration - VuCameraIntrinsics . |
|
Trackable results - VuObservation with pose info. |
|
Device trackable results - VuObservation are all accessible from VuState via functions like VuStateGet . Typed Observation can be easily accessible via dedicated methods, e.g., retrieving device pose observations: vuStateGetDevicePoseObservations . |
|
StateUpdater | Update state replaced by vuEngineAcquireLatestState The concept of getLatestState has been REMOVED. Instead, you need to do your own bookkeeping to keep the state around. |
The getLatestTimeStamp method has been REMOVED. |
|
UpdateCallback | vuEngineRegisterUpdateStateHandler . |
Vuforia
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
Vuforia |
Build version are now accessible via Driver library is now set via a vuDriverConfig when configuring engine. Vuforia Engine now requires to be configured with an orientation enum viavuPlatformControllerSetViewOrientation . Orientation may be dependent on the platform type. See Rendering in Native for details. |
Other API Function Changes
- Eyewear Calibration support.
- Concept of multiple views or stereo rendering for eyewear/stereo display.
- Frame per second fps removed – use native platform specific calls instead.
- Multi Target dynamic creation.
- Filtering mode for cloud recognition.
API functions removed or replaced
Area
– Only subtype still exists asVuRectangle
Box3D
– Replaced withAABB
(axis-aligned bounding box)EyeID
– REMOVEDEyewearCalibrationReadings
– REMOVEDEyewearDevice
– replaced with utility methods invuPlatformController
EyewearUserCalibrator
– REMOVEDIllumination
- supported by creating anVuIlluminationObserver
, and accessingVuIlliminationObservation
List
– Vuforia Engine no longer has a general List type, but typed lists can be created (e.g. for a type “Object”, methods will bevuObjectListCreate
,vuObjectListDestroy
,vuMyObjectListGetSize
,vuObjectListGetElement
)- Matrices –
vuMatrix33F
andvuMatrix44F
.Matrix34F
has been REMOVED Mesh
–VuMesh
. Its has methods were REMOVED (look instead for num of elements methods)NonCopyable
– REMOVEDObb2d
- REMOVEDObb3D
– Replaced withVuAABB
. Utility method to get minvuAABBMin
and maxvuAABBMax
Rectangle
–VuRectangle
SessionRecorder
–VuSessionRecorderController
Introduced notion of a recording (VuRecording
). You can now record separately the camera image, device pose or sensor.StandardLibraryDefinitions
- REMOVEDSystem
- unchanged. We are now explicitly using the type from <stdint.h> for 64 bits types.- Tool - Methods using
Matrix34F
have been REMOVED. All the other methods are now available in MathUtils.h. - Vectors -
VuVector
.., supporting [2,3,4][F,I] component type. - View - REMOVED
- ViewList – REMOVED
- Virtual Buttons
VirtualButton
-VuVirtualButtonObserver
with get/set functions. Activation is on by default. id is now observer id. name has been REMOVED.VirtualButtonResult
-VuObservation
fromVuVirtualButtonObserver
. Includes:VuObjectTargetObservationTargetInfo
.isPressed
replaced by aVuVirtualButtonState
- NOTE: Virtual Buttons were removed as a feature since 10.22.
Area Targets
We recommend re-generating legacy Area Targets with the latest tools to match the Vuforia Engine version in use to avoid compatibility issues.
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
AreaTarget (inherit from Trackable) |
vuAreaTargetObserverSetExternalPosition . Large Area Targets will return VU_TRUE for vuAreaTargetObserverRequireExternalPosition . |
AreaTargetResult (inherit from TrackableResult) |
vuObservationGetPoseInfo (pose + status), vuAreaTargetObservationGetStatusInfo (status info). |
AreaTracker (inherit from Tracker) |
Abstracted as VuAreaTargetObserver (can have multiple of them, one for each Area Target). No more dataset management: It is no longer required to start/stop the ObjectTracker (just activate/deactivate the Observer). |
Model Targets
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
GuideView | VuGuideView Note that the coordinate system (CS) is now CHANGED for the Guide View pose: Y-Up (rather than Y-down) pose of the camera in the model CS (rather than pose of the model in the camera CS). |
ModelTarget | VuModelTargetObserver with get/set functions. Activation is on by default.id is now observer id. NOTE: The active Guide View is now set via name and not via index (you can get id from the Guide View list, list index maps to the persistent). |
ModelTargetResult |
vuObservationGetPoseInfo (pose + status), vuModelTargetObservationGetStatusInfo (status info). |
Image Targets
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
ImageTarget | VuImageTargetObserver with get/set functions. Activation is on by default.id is now observer id |
ImageTargetResult |
vuObservationGetPoseInfo (pose + status), vuAreaTargetObservationGetStatusInfo (status info). |
RuntimeImageSource | Runtime image source is now accessible via a VuImageTargetObserver with a VuImageTargetBufferConfig or VuImageTargetFileConfig configured |
TargetFinder | Abstracted with VuCloudImageTargetObserver . |
Configured via VuCloudImageTargetConfig .init, deinit, start, stop lifecycle has been replaced with create, destroy, activate, deactivate. |
|
Recognition updates are available by pull mechanism, Registering event handler is now |
|
Filter Mode has been REMOVED. | |
enableTracking can now been done by creating a VuImageTargetObserver from a cloud observation via VuImageTargetBufferConfig . |
|
clearTrackables can be done by deactivating and destroying VuImageTargetObserver . |
|
getObjectTargets can be done by retrieving the list of Image Target Observers fromvuEngine . |
|
TargetSearchResult | VuObservation from VuCloudImageTargetObserver .includes: VuCloudImageTargetObservationTargetInfo . |
Cloud Recognition
Vuforia Engine v.9.8 | Vuforia Engine v.10 | |
CloudRecoSearchResult | VuObservation from VuCloudImageTargetObserver .includes: VuCloudImageTargetObservationTargetInfo . |
Cylinder Targets
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
CylinderTarget | VuCylinderTargetObserver with get/set functions. Activation is on by default.id is now observer id. |
CylinderTargetResult |
vuObservationGetPoseInfo (pose + status), vuCylinderTargetObservationGetStatusInfo (status info). |
Multi Targets
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
MultiTarget | VuMultiTargetObserver with get/set functions. Activation is on by default.id is now observer id. |
MultiTarget |
vuObservationGetPoseInfo (pose + status), vuMultiTargetObservationGetStatusInfo (status info). |
Ground Plane
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
Anchor (inherit from Trackable) |
VuAnchorObserver id is now the Observer id. name has been REMOVED. VuAnchorObserver is scaleless; no set size or bounding box info available). |
AnchorResult |
VuObservation from VuAnchorObserver .includes: VuAnchorObservationInfo (“trackable” info), vuObservationGetPoseInfo (pose + status), vuAnchorObservationGetStatusInfo (status info). |
HitTestResult | VuHitTest returned as part of a VuHitTestList , called from vuAnchorObserverHitTest . |
SmartTerrain | REMOVED, now handle by a single method: vuAnchorObserverHitTest. |
Object Targets
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
ObjectTarget | VuObjectTargetObserver with get/set functions. Activation is on by default.id is now observer id. ObjectTarget is no longer a “generic” base class for Object Targets but a dedicated type of target (3D object with feature, non-CAD like Model Target). MotionHint has been REMOVED. |
ObjectTargetResult |
vuObservationGetPoseInfo (pose + status), vuObjectTargetObservationGetStatusInfo (status info). |
ObjectTracker | Abstracted via a different type of Observers such as VuImageTargetObserver , VuModelTargetObserver , etc. (you can have multiple of them). It is no longer needed to start/stop tracker (just activate/deactivate your Observer). |
VuMarks
Vuforia Engine v.9.8 | Vuforia Engine v.10 |
InstanceId | VuVuMarkObservationInstanceInfo |
VuMarkTarget |
Part of a vuVuMarkObservationGetInstanceInfo , vuVuMarkObservationGetInstanceImage |
VuMarkTargetResult | VuObservation from vuVuMarkObserver .includes: vuVuMarkObservationGetTemplateInfo (“trackable” info), vuObservationGetPoseInfo (pose + status), vuVuMarkObservationGetStatusInfo (status info),vuVuMarkObservationGetInfo (“id”) |
VuMarkTemplate | vuVuMarkObserver with get/set functions. Activation is on by default.id is now observer id User Data has been REMOVED. |
Platform
iOS
Vuforia changes specific to iOS platform.
- License is now set via a
vuLicenseConfig
when configuring Engine. - Renderer flag is now set via a
vuRenderConfig
when configuring Engine. - Rotation is set via
setPlatformControllerSetScreenOrientation
fromvuPlatformController
. - Provider configuration is now set via
vuPlatformController
fromvuPlatformControllerSetARKitConfig
. - UIGLViewProtocol – REMOVED. You should instead use the native platform feature to support controlling its rendering.
Android
Vuforia changes specific to Android development.
- Activity is now set via a
vuPlatformAndroidConfig
when configuring Engine. - License is now set via a
vuLicenseConfig
when configuring Engine. - Renderer flag is now set via a
vuRenderConfig
when configuring Engine. - A new method is added to set screen orientation on Android: Rotation is set via
setPlatformControllerSetScreenOrientation
fromvuPlatformController
.
UWP
Vuforia changes specific to UWP development
- License is now set via a
vuLicenseConfig
when configuring Engine. - Rotation is set via
setPlatformControllerSetScreenOrientation
fromvuPlatformController
. - Provider configuration is now set via
vuPlatformController
fromvuPlatformControllerSetHolographicAppsCS
.