• Stars
    star
    731
  • Rank 61,637 (Top 2 %)
  • Language
    Java
  • License
    Mozilla Public Li...
  • Created almost 3 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A fast and secure browser for standalone virtual-reality and augmented-reality headsets.

Wolvic XR Browser

The goal of the Wolvic project is to create a full-featured browser exclusively AR and VR headsets.

You can find us in wolvic.com, Mastodon @WolvicXR, Twitter @wolvicxr, and at [email protected].

Want to learn more about Wolvic? Read our FAQ!

Locale support

For more info on localization, how it works in the Wolvic XR project, and how to correctly edit localizable text in the application, please see our localization wiki page.

Setup instructions

By default Wolvic will try to download prebuilt GeckoView libraries from Mozilla's maven repositories. Note that after PR #70 WebXR sessions won't work with those images because that PR introduced a change in the GeckoView protocol that is only available in the wolvic_release branch from this repository. For additional details on how to use a local GeckoView build check this section

UPDATE: use FIREFOX_103_0_2_RELEASE instead of wolvic_release after PR #256.

Clone Wolvic.

git clone [email protected]:Igalia/wolvic.git
cd wolvic

Clone the third-party repo.

If you're developing for the Oculus, Huawei, Pico, or VIVE, you need to clone the repo with third-party SDK files.

git clone https://github.com/Igalia/wolvic-third-parties.git third_party

This repo is only available to Igalia members. If you have access to the relevant SDK but not this repo, you can manually place them here:

  • third_party/ovr_mobile/ for Oculus (should contain a VrApi folder)
  • third_party/OVRPlatformSDK/ for Oculus (should contain a Android and include folders)
  • third_party/ovr_openxr_mobile_sdk/ for Oculus (should contain an OpenXR folder)
  • third_party/hvr/ for Huawei (should contain arm64-v8a, armeabi-v7a and include folders)
  • third_party/wavesdk/ for Vive (should contain a build folder, among other things)
  • third_party/picoxr Pico OpenXR Mobile SDK (should contain include and libs folders, among other things that are not necessary for Wolvic)
  • third_party/lynx for Lynx(should contain a loader-release.aar file)
  • third_party/snapdragon-spaces for Snapdragon Spaces(should contain libopenxr_loader.aar and qxrclients.aar files)
  • third_party/OpenXR-SDK/ OpenXR-SDK (should contain an include folder)

The repo in third_party can be updated like so:

pushd third_party && git fetch && git checkout main && git rebase origin/main && popd

Fetch Git submodules.

You may need to set up two-factor authentication for the command line.

git submodule update --init --recursive

You can build for different devices:

  • oculusvr: Oculus Quest
  • hvr: Huawei VR Glasses
  • wavevr: VIVE Focus
  • picoxr: Pico 4 and (untested) Pico Neo 3
  • lynx: Lynx R1
  • spaces: Lenovo A3

For testing on a non-VR device:

  • noapi: Runs on standard Android phones without a headset

Building for Oculus Mobile, Huawei and WaveVR requires access to their respective SDKs which are not included in this repo.

The command line version of gradlew requires JDK 11. If you see an error that Gradle doesn't understand your Java version, check which version of you're using by running java -showversion or java -version. You're probably using and older JDK, which won't work.

Open the project with Android Studio then build and run it. Depending on what you already have installed in Android Studio, the build may fail and then may prompt you to install dependencies. Just keep doing as it suggests. To select the device to build for, go to Tool Windows > Build Variants and select a build variant corresponding to your device.

If you want to build Wolvic for WaveVR SDK:

Download the VIVE Wave SDK from the VIVE Developer Resources, and unzip it. Then, from the top-level project directory, run:

mkdir -p third_party/wavesdk
cp wave_3.2.0_native_1/repo/com/htc/vr/wvr_client/3.2.0/wvr_client-3.2.0.aar third_party/wavesdk/wvr_client.aar

Make certain to set the build flavor to wavevrDebug in Android Studio before building the project.

Local Development

Dependency substitutions

You might be interested in building this project against local versions of some of the dependencies. This could be done either by using a local maven repository (quite cumbersome), or via Gradle's dependency substitutions (not at all cumbersome!).

Currently, the substitution flow is streamlined for some of the core dependencies via configuration flags in local.properties. You can build against a local checkout of the following dependencies by specifying their local paths:

  • GeckoView, specifying its path via dependencySubstitutions.geckoviewTopsrcdir=/path/to/mozilla-central (and, optionally, dependencySubstitutions.geckoviewTopobjdir=/path/to/topobjdir). See Bug 1533465.
    • This assumes that you have built, packaged, and published your local GeckoView -- but don't worry, the dependency substitution script has the latest instructions for doing that.
    • If you want to build for different architectures at the same time, you can specify the aarch64 path via dependencySubstitutions.geckoviewTopobjdir while the x86_64 path via dependencySubstitutions.geckoviewTopobjdirX64

Do not forget to run a Gradle sync in Android Studio after changing local.properties. If you specified any substitutions, they will be reflected in the modules list, and you'll be able to modify them from a single Android Studio window.

Install dev and production builds on device simultaneously

You can enable a dev applicationID sufix to install both dev and production builds simultaneously. You just need to add this property to your user.properties file:

simultaneousDevProduction=true

Locally generate Android release builds

Local release builds can be useful to measure performance or debug issues only happening in release builds. Insead of dealing with release keys you can make the testing easier just adding this property to your user.properties file:

useDebugSigningOnRelease=true

Note: the release APKs generated with a debug keystore can't be used for production.

Compress assets

ETC2 compression is used to improve performance and memory usage. Raw assets are placed in the uncompressed_assets folder. You can generate the compressed textures using the compressor utility in tools/compressor. You need to set up etc2comp and make it available on your PATH before running the script. Run this command to generate the compressed assets:

cd tools/compressor
npm install
npm run compress

Enable OpenXR builds

You can enable OpenXR API for Oculus by adding this property to your user.properties file:

openxr=true

Development troubleshooting

Device supports , but APK only supports armeabi-v7a[...]

Enable USB Remote Debugging on the device.

Firefox > Web Developer > WebIDE > Performance gets stuck with greyed out "stop and show profile"

Restart Wolvic XR and close and re-open the WebIDE page.

Tool Windows > Build Variants list is empty

  1. If you're not on the latest version, update Android Studio from Android Studio > Check for Updates….
  2. Run File > Sync Project with Gradle Files.

Debugging tips

  • When using the native debugger you can ignore the first SIGSEGV: address access protected stop in GV thread. It's not a crash; you can click Resume to continue debugging.
  • On some platforms such as Oculus Go the native debugger stops on each input event. You can set this LLDB post-attach command in Android Studio to fix the problem: pro hand -p true -s false SIGILL
  • You can use adb shell am start -a android.intent.action.VIEW -d "https://aframe.io" com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity to load a URL from the command line
  • You can use adb shell am start -a android.intent.action.VIEW -n com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity -e homepage "https://example.com" to override the homepage
  • You can use adb shell setprop debug.oculus.enableVideoCapture 1 to record a video on the Oculus Go. Remember to run adb shell setprop debug.oculus.enableVideoCapture 0 to stop recording the video.
    • You can also record videos on the Oculus Go by exiting to the system library, and from the Oculus tray menu (toggle with the Oculus button on the controller): Sharing > Record Video
  • You can set disableCrashRestart=true in the gradle user.properties to disable app relaunch on crash.

More Repositories

1

pflua

Packet filtering in Lua
Lua
310
star
2

cog

WPE launcher and webapp container
C
197
star
3

meta-webkit

Yocto / OpenEmbedded layer for WebKit based engines and browsers
BitBake
122
star
4

css-grid-layout

CSS Grid Layout Examples
HTML
111
star
5

wpe-android

WPE WebKit for Android
HTML
63
star
6

vkrunner

A shader script tester for Vulkan
C
44
star
7

webengineshackfest

Web Engines Hackfest
JavaScript
38
star
8

intel-osrc-gfx-prm

Intel Open Source Graphics Programmer Reference Manual (PRM)
Makefile
36
star
9

gst-wpe-webrtc-demo

Web-augmented graphics overlay broadcasting with WPE and GStreamer
Rust
34
star
10

phpreport

Web tool for project time tracking and project management.
JavaScript
30
star
11

WPEBackend-fdo

C++
29
star
12

pflua-bench

Benchmarking implementations of pflang, the pcap filter language
C
25
star
13

mesa

The Mesa 3D Graphics Library - unofficial copy
C
17
star
14

explainers

Igalia Explainers
17
star
15

balena-wpe

A Balena project based on WebKit WPE (balena-browser-wpe)
Shell
16
star
16

buildroot-wpe

A Buildroot overlay for building WPE WebKit
Makefile
15
star
17

libreplanapp

LibrePlan Mobile App
JavaScript
13
star
18

ref-cpp

Reference typing extensions for C++ ("Ref C++")
C
12
star
19

webkit-flatpak-sdk

A Flatpak SDK and Runtime for WebKit developers
Makefile
10
star
20

balena-browser-wpe

A drop-in web browser block for Balena based on WebKit WPE
Shell
10
star
21

piglit

(Unofficial mirror for development) An open-source test suite for OpenGL implementations
C
9
star
22

webkit-container-sdk

The all-in-one SDK for WebKit GTK/WPE port development.
Shell
9
star
23

browserperfdash

Browsers Performance Dashboard
JavaScript
8
star
24

acacia

Library for inspecting accessibility APIs
C++
8
star
25

gst-wpe-broadcast-demo

Rust
7
star
26

WPEBackend-android

Android-oriented implementation of the libwpe API
C++
7
star
27

aura

Aura is an application to record videos applying several kind of effects to them.
C++
7
star
28

balena-weston

A drop-in wayland compositor block for Balena
Shell
6
star
29

pflua-test

Property-based testing and fuzzing of the Pflua packet filtering library (obsolete)
Lua
5
star
30

GstVkVideoParser

Video parsing library using GStreamer
C
5
star
31

dinghy

Archived. Please use Cog instead β†’ https://github.com/Igalia/cog
C
5
star
32

vapormark

Python
5
star
33

lookalike

Look Alike is a Harmattan's MeeGo application for the automatic tagging and matching of detected faces.
C++
3
star
34

gallery-enlarge-shrink-plugin

Enlarge/Shrink plugin for Gallery
C++
3
star
35

ESExtractor

Elementary stream frame extractor
C++
3
star
36

team

Web service to gather and analyse skills of members of a team
Python
3
star
37

gallery-tiltshift-plugin

Tilt Shift plugin for Gallery
C++
2
star
38

wpe-flatpak

Shell
2
star
39

webkitgtk-wayland-proto

Prototype of the Wayland nested compositor architecture of Webkit2GTK
C
2
star
40

browserperfrunner

Scripts for running benchmarks with browsers and for sending data to https://github.com/Igalia/browserperfdash
Python
2
star
41

dyz

Archived. Please use Cog instead β†’ https://github.com/Igalia/cog
C
2
star
42

wpewebkit.org

WPE Website
HTML
2
star
43

meta-agl-demo

BitBake
2
star
44

skia

Mirror of Skia (an OpenSource 2D graphics library) with some tests to understand its API
C++
2
star
45

gallery-plugin-facerecognition-resetter

Dummy Gallery plugin to peform useful operation on the facerecognition DB
C++
2
star
46

ces-demos-2017

Demos of Chromium running on AGL for CES 2017
JavaScript
1
star
47

igalia-git-stats

Igalia git statics analysis tool
Ruby
1
star
48

meta-wpe-image

meta-wpe-image is a Yocto BSP to build images with WPEWebKit for evaluation
C
1
star
49

map-compilers-open

HTML
1
star
50

epiphany-gnomeos

Modifications on Web/Epiphany browser for GNOME OS
C
1
star
51

meta-agl-html5-dev

Dev AGL HTML5 meta-layer
BitBake
1
star
52

gnomeos-installer

Prototype of an installer for GnomeOS images
C
1
star
53

css-regions-selection

CSS Regions Selection Use Cases
JavaScript
1
star
54

web-selection-examples

Web Selection Examples
JavaScript
1
star
55

snabbwall-website

Snabbwall website
HTML
1
star
56

mesa-dockerfiles

Dockerfiles to build and test Mesa in containers
Shell
1
star