OH! You also have to set DUK_OPT_HAVE_CUSTOM_H I think. I've made that mistake before, too (you'll want to define that for the normal build too or glitches may happen)
Surfaces now support setting a transform, allowing projections to be used in Render-to-Texture operations:https://github.com/fatcerberus/minisphere/blob/master/docs/sphere2-core-api.txt#L894-L903Now I'll have to give it a workout by getting it to draw a cube. The implementation could probably be optimized better, but it gets the job done and works as designed. The specific issue is that the engine explicitly sets the render target for every drawing operation. That probably isn't a big deal in practice for most 2D games but won't scale well at all for more advanced 3D. From what I've seen Allegro tries to lighten the load a bit by avoiding state changes if they can be avoided (reusing shaders and whatnot), but the way the engine is set up, it also explicitly swaps out the modelview and projection matrices every time, which entails a lot of uploading matrices to the GPU. That kind of thing can't be good for performance.
edit: @Rhuan: By the way, when you say "fixed", do you mean that SSJ works now...?
Starting with miniSphere 4.7, the engine will require a shader-capable GPU to start. Even Intel HD Graphics has supported shaders and the like for years now and about the only thing that doesn't are crappy XP-era Intel chipsets. Those are veritable dinosaurs these days and if someone still wants to make games for them, well, Sphere 1.5 is still floating around. Mainly, my motivation is to get rid of all the untested code to support older hardware. For example if a shader-ready GL context can't be created then the engine disables shaders, creates a fixed-function context and uses slightly different code paths for rendering. Or if vertex buffers aren't supported, the vertices are kept in a memory buffer instead. Pretty much all modern machines support these features so it just adds up to a lot of legacy-compatibility code that never gets tested. Better just to remove it and require a modern machine for a modern engine.
There's a reason that I had proposed for Pegasus (and implemented in TurboSphere) clients and servers explicitly being different (a Socket and a Listener).