sciter3d - standalone HTML/CSS/JS + WebGL executable.

Sciter v adds native implementation of WebGL2. It supports ThreeJS as it is. See samples.webgl.

Video of Hello World, ThreeJS and its source.

Sciter SDK contains sciter3d executables ( Windows and Linux so far ). sciter3d is a monolithic (a.k.a. portable) exe that contains HTML/CSS/JS/WebGL engine that works without any dependencies (platform shall support OpenGL runtime).

Sciter features:

  • JS - full ES2020 specification;
  • HTML/CSS - CSS 2.1 in full + popular CSS 3/4 modules;
  • Contains built-in NoSQL DB (think of local MongoDB) and SQLite (as loadable plugin);
  • Contains libUV based runtime resembling NodeJS;
  • It allows compile HTML/CSS/JS/WebGL applications into standalone executables using Sciter.Quark.
  • Can work as embeddable UI engine (sciter.dll) - integratable into C++, .NET, Python, Go and Rust executables.

Sciter runtime allows to bind DOM elements to WebGL textures.

Links: Sciter.Home, Sciter.Docs, Sciter.Discussion.

1 Like

I’ve seen something of this project a long time ago. Looks pretty cool and might be a nice alternative to Electron.

Could you elaborate on the graphics backend that is being used here? For example, we know chromium based engines use ANGLE to translate WebGL to DirectX. What does Sciter use? And are there any performance benchmarks available that we could look into to compare to something like Electron?

In general Sciter may use different backends

  • On Windows: Direct2D/DirectX, Skia/DX12, Skia/OpenGL, Skia/Vulkan;
  • On Linux: Skia/OpenGL, Skia/Vulkan;
  • On MacOS: Skia/OpenGL, Skia/Metal;

For now WebGL in Sciter is available only when it runs Skia/OpenGL as <canvas|webgl> renders in the same OpenGL context as the rest of HTML/CSS via Skia.

Skia uses OpenGL directly and current WebGL implementation is also using OpenGL directly.
Typical WebGL function implementation that is exposed to JS:

value WebGL::blendColor(float red, float green, float blue, float alpha) {
	glBlendColor(clamp(red,0.0f,1.0f), clamp(green, 0.0f, 1.0f), clamp(blue, 0.0f, 1.0f), clamp(alpha, 0.0f, 1.0f));
	return check_gl_error();

As you see it is simple JS-to-nativeGL call translation.

As of benchmarks …

As Sciter/WebGL uses system OpenGL as it is you can expect the same performance as native OpenGL. Even more, Sciter allows to run native C/C++ code that also can use as WebGL interface as OpenGL. Note: that is not about WebAssembly but about real native code.

1 Like