It seems like it would be worthwhile to add something along the lines of a "ShaderSpec" to the engine options and then adding a "spec='int'" param to shader definitions in materials. Object being that the loader would be modified to only define a new resource for the highest available spec allowed by the engine option, or load whatever is there if spec is left undefined.
Code:
<Material class="Translucent.MyClass">
<Shader source="myshader.shader.xml" spec="3"/>
<Shader source="myMedShader.shader.xml" spec="2" />
<Shader source="myLowShader.shader.xml spec="1" />
<TexUnit unit="0" map="mytex.jpg" />
<Uniform name="myColor" a="1.0" b="1.0" c="0.5" />
</Material>
If a shader is defined that doesn't have a spec specified and another shader is also defined but it has a spec then the shader with a spec is only used if the defined engine option exactly matches it, otherwise the shader without a defined spec is used. Hence:
Code:
<Material class="Translucent.MyClass">
<Shader source="myshader.shader.xml" />
<Shader source="myLowShader.shader.xml spec="1" />
<TexUnit unit="0" map="mytex.jpg" />
<Uniform name="myColor" a="1.0" b="1.0" c="0.5" />
</Material>
The above would use "myshader.shader.xml" for specs 3 and 2, and myLowShader.xml for spec 1. Not an essential capability but a practical one. Could be implemented for textures too.
Though I suppose you could accomplish something of the like with the pipelines using stage activations and classes.