Introduction
Horizon is a multiplatform geographical rendering engine. It can run on Windows, Linux and web browsers that support Web Assembly. It ships with APIs in C++ and TypeScript. Its rendering backend runs on OpenGL 3.3 for the native versions, and WebGL 2 for its web version.
Note that we call user the application that integrates Horizon.
Protocol
The communication channels with Horizon are defined by Protocol Buffers schemas. All commands are serialized messages sent to and from the engine. We call the set of all those messages the protocol.
API
The API is the set of commands that can be used to communicate with Horizon. It is divided in categories called services, and methods that each have an input and output message type.
Backend
A backend is an implementation of the API. The only thing it has to be able to do is receive and send back serialized messages as defined in the API and the protocol.
The simplest backend is Horizon Core, which is the viewer itself.
A user can implement a custom backend that can intercept those messages. For instance, it is possible to implement a backend sending the messages via websockets to be able to control a remote instance of Horizon. Other usecases include dumping all messages to be able to replay sessions, or having a backend that does nothing at all, useful for tests.
Packages
In order to enable its integration in applications, Horizon is distributed as packages that can readily be used as build dependencies, for all target languages. The protocol, the API, and the Core backend are distributed as separate packages. (Make sure to combine packages with matching versions.)
These packages, as well as some other tools, are available here.
Platform requirements
- 448 MiB RAM
- 256 MiB video RAM
Native
When building with EGL as the OpenGL loader:
- EGL 1.5
Optionally, OpenGL ES can be used instead of regular OpenGL, when available:
- OpenGL ES 3.0
Web
- WebGL 2
- WebAssembly
- Including support for threads
SharedArrayBuffer- The Web page must be in a secure context.
- The Web server must set the following headers to these values:
Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp
Dependencies
C++
- protobuf (lite runtime, see version in
MODULE.bazel)
TypeScript
- protobufjs (see version in
package.json)
For LLMs
This documentation is also distributed as Markdown for consumption by LLMs. The entry point is the llms.txt file. You can find the Markdown file for each page by replacing the .html extension in the URL with .md. For example, the Markdown version of this page is available at index.md.