Terrain Rendering and GUIs with WebGL
zephyrosanemos.com
zephyrosanemos.com
I personally consider DOM and CSS as the least-evil-of-all-options for doing cross-platform UI. Not that a better solution couldn't be made, but all other current solutions for the type of software I want to make are worse than DOM in some way.
[1] shameless plug: http://capnmidnight.github.io/Primrose/
I couldn't see an example of input box on this page. I'm wondering if it is doable.
I got 24 fps with my high end GPU (and bad stuttering) with an old, poor CPU on Linux + Firefox. GPU is practically idle, but CPU is at 100% and fans are yelling.
Also, the brushed metal is a nice nod to the late 90's.
Why Delphi for generation the terrain?
>During the last decade, I've helped build Anadelta Tessera, a desktop road design CAD written in Delphi.
Joking aside, I love it - I remember spending hours rendering generated terrain with... uhm, I can't remember right now, this was about 20 years ago :-/
There's a decade's worth of new graphics features that aren't available via WebGL, even though the hardware supports it (even mobile phones these days).
I am getting less than 25 frames per second and I have a high end GPU. This should easily run at 60 fps and have plenty of idle time (for CPU and GPU). Now it's consuming a lot of CPU and fans are spinning up.
I really hope that WebGL gets a long awaited update, and that there will be better sandboxing techniques employed. The issues with security can't be solved at the browser level alone and there's quite a big performance hit when done at that level.
There is hardware/driver level support for some of the security issues (via OpenGL robustness extensions), but even when they are available, there's still a redundant layer of userspace security applied.
This leads to some ridiculous implications when developing WebGL content, e.g. indexed rendering (glDrawElements) can't really be used (esp. with dynamic content) because the index buffer has to be inspected (with the CPU) for out-of-bounds indices. There is hardware support for bounds checking in many new GPUs (desktop and mobile) and it's easy to detect, but none of the popular implementations rely on that even when available.
WebGL might be impressive in the browser but unfortunately it's roughly equivalent to what was available on the desktop in 2004 and on the mobile in 2010.
The new performance implications introduced by WebGL (like that dynamices indices are bad) are quite similar to restrictions of other platforms (for instance on tiled platform like PowerVR, any sort of transparency is much more expensive then on other platforms because it kills the per-tile hidden-surface-removal, etc). Basically, each GL platform has other performance characteristics that applications need to be aware of, write-once-run-(perfectly)-everywhere was never true for any 3D API, and WebGL is not different.
I think that WebGL+extensions provide a pretty good basic feature set for 3D apps and games, of course it could be better, but given the fact that WebGL needs to serve the widest range of target platforms of ANY 3D API, and it's miles better then no GPU access in the browser at all.
BTW, WebGL2 can already be tested in Firefox, this brings WebGL to the OpenGLES3 feature set: https://wiki.mozilla.org/Platform/GFX/WebGL2
There's certainly different performance characteristics in different OpenGL implementations (ie. GPUs) but WebGL overhead comes on top of that. So in addition to the performance characteristics of the GPU itself, you have to think about the browser's software implementation too.
WebGL is definitely a welcome addition to the facilities available in the browser, but getting more up-to-date features would be nice. And using the security features (especially bounds checking) of the hardware if available to avoid unnecessary overhead would make it a lot more appealing.
http://blog.mozilla.org/joe/2010/11/10/how-to-tell-if-youre-...
Although I haven't even seen a demo that uses it yet.
WebGL implementations have a lot of trouble coping with WebGL 1.0 still. It's slowly approaching "ok to use" status. A large portion of web users have no WebGL, or a sw-only version of it (SwiftShader in Chrome). This with a 4 year old spec.
With more frequent spec updates WebGL would have lost all credibility due to mismatch between spec and reality, and variation in implementation quality.
Cool for demos and small scale prototypes, but that is about it.
WebGL is great for prototyping, but the browsers still make my NVidia card go full throttle for stuff that when coded in native language the fan is barely noticeable.