On Mon, 2012-03-05 at 19:41 -0800, Benoit Jacob wrote: > > ----- Original Message ----- > > On Sat, 3 Mar 2012 13:21:08 -0800, Alon Zakai <alonza...@gmail.com> > > wrote: > > > > > > In the project I work on (Emscripten, an open source C/C++ to > > > JavaScript compiler that utilizes LLVM), we want to be able to > > > compile OpenGL games from desktop so that they work on > > > WebGL on the web. The main remaining difficulty for us is > > > to emulate the full OpenGL API using the WebGL API. WebGL > > > is close to OpenGL ES 2.0, so it has shaders but lacks the > > > fixed-function pipeline, glBegin etc. > > > > > > So far we have some of the OpenGL ES 2.0 API implemented, > > > you can see a demo of it on the web here: > > > > > > http://people.mozilla.org/~eakhgari/es2gears.html
Too bad it refuses to run on big endian hosts yet. :) > > Desktop GL includes ridiculous things like texture borders and > > GL_CLAMP > > and glDrawPixels and other things we all wish we could just forget > > about. ES2 doesn't have those equivalents, so you'd have to emulate > > them. > > That's exactly where we were hoping that Mesa might be able to help: > doesn't Mesa already have an implementation of these OpenGL 1 pieces > on top of something closer to OpenGL ES 2 (which IIUC is far closer to > how modern hardware really works)? > > If Mesa had an implementation of GL1 on top of GLES2, Emscripten > (Alon's C/C++-to-JS translator) could compile it to JS. > > > For a bunch of it, apps don't use it so nobody would notice. > > glBitmap and glDrawPixels are reasonably popular, though. You should > > be > > able to build those with shaders, though. You can see partial > > implementations for these in on top of fixed function in Mesa as > > src/mesa/drivers/common/meta.c (contributions welcome, particularly > > in > > the form of GLSL-based implementations of them!) > > Thanks for the pointer but that (a GLES2-based implementation) is > precisely what we're looking for :-) > > Before we'd start caring about glBitmap and glDrawPixels, we have more > fundamental things to implement: > - glBegin ... glVertex ... glEnd > - glShadeModel(GL_FLAT) (this one seems really hard to do with OpenGL ES2, > a real capability regression from OpenGL [ES] 1 it seems!) > - display lists > - the lighting model (glLight, glMaterial) > > Does Mesa have code that could be reused to implement some of that on top of > ES2? I suspect you're thinking of the Gallium3D framework, and I think it could indeed be useful for this. Basically, you should only need to write: * A core Gallium3D driver (src/gallium/drivers/.../) which translates shaders from TGSI to GLSL (should be trivial at least for a first pass) and Gallium3D state to GLES / WebGL state calls. * Possibly some environment glue code (src/gallium/winsys/.../). * Target glue code (src/gallium/targets/.../). The parts which translate from OpenGL/GLSL to Gallium3D/TGSI (src/mesa/state_tracker/) are shared between all Gallium3D drivers. There might be some gotchas I'm not aware of though... -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Debian, X and DRI developer _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev