1. Provide something like sf::isDepthBufferAvailable() or something similar to how you check for shader support.
It will be like sf::RenderTexture: the (crappy Intel) driver says it can handle it, but you just see garbage on your screen
But ok, let's say that this point won't cause any problem.
2. If the depth buffer is disabled in the sf::ContextSettings, just don't enable depth testing. Nothing will happen with the third coordinate then, if you are using an orthographic projection.
That's what I'd like to avoid. By changing an indirect property, which is normally only for your own OpenGL rendering, you disable a major feature of SFML.
But, again, let's say it's ok...
Your conception of the depth buffer precision is also not correct.
I know Z values are not mapped uniformly, but with 8 bits the number of available Z values will be ridiculously low anyway, regardless how they are mapped to those 8 bits (ok, I shouldn't have said "256").
3. Provide a "copy constructor" that initializes an sf::Vector3 from an sf::Vector2 and sets the z coordinate to 0.
I don't like this kind of implicit conversions. And making it explicit won't be less verbose than the regular constructor.
4. Like I said in my previous post, make it optional so that the people who have a clue what they are doing can solve this problem on their own. If you want to use the depth buffer, you will have to make semantic changes to your application to deal with this problem and it isn't the responsibility of SFML to make sure the values that are specified are sane. Garbage In Garbage Out.
I'd like to make depth testing optional, but implicitly: assign a depth value or leave the default one if you don't care. Any solution that makes activation of depth testing explicit is already too bloated.
At this point I'd like to see proposals for a clean and simple API. Otherwise I'll hardly be convinced
5. Same argument as 4. People have to give it a bit more thought instead of just doing sf::enableDepth( true ) and expecting the application to behave like what they had in mind instantly from the beginning.
This is not my philosophy. I'd like things to work out of the box, in all cases, and as expected as soon as you activate them. If users need to figure out a specific context with certain conditions to have it working as expected, it's already too complicated. Especially for this feature, which is really basic and simple (as opposed to shaders, for example).
SFML would just be FML if I just implemented a thin wrapper on top of OpenGL without dealing with the annoying rendering issues.