Created XML shaders (markdown)
parent
8b46493128
commit
48ebc4c3b3
|
@ -0,0 +1,55 @@
|
||||||
|
## History
|
||||||
|
XML shaders were originally implemented in bSNES as single pass GLSL shaders. The extension is .shader and is marked up with XML. These shaders were written against the fixed-function pipeline and is now referred to as a legacy XML shaders by RetroArch. The prefix of `ruby` originates from bSNES' driver module, `ruby::`.
|
||||||
|
|
||||||
|
### Example legacy XML shader
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Blank shader
|
||||||
|
-->
|
||||||
|
<shader language="GLSL">
|
||||||
|
<fragment><![CDATA[
|
||||||
|
uniform sampler2D rubyTexture;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_FragColor = texture2D(rubyTexture, gl_TexCoord[0].xy);
|
||||||
|
}
|
||||||
|
]]></fragment>
|
||||||
|
</shader>
|
||||||
|
|
||||||
|
RetroArch implemented this legacy shader spec to be compatible with many shaders written at the time. It is also referred to as v1.0 XML shaders.
|
||||||
|
This specification was then extended to support multi-pass, scaling arguments, etc, which resulted in v1.1 XML shaders (spec [here](http://gitorious.org/bsnes/pages/XmlShaderFormat)). It is still legacy as it uses fixed-function features. RetroArch implements v1.1 XML shaders, and some more features to be feature equivalent with the [[Cg shader]] implementation. bSNES did not implement v1.1 and adoption of this spec was slowed down.
|
||||||
|
|
||||||
|
## Modern XML shaders
|
||||||
|
Legacy XML shaders used fixed function, and they would therefore never work with modern GL (GLES, GL3.x+).
|
||||||
|
To fix this, RetroArch extended the XML shader spec. Fixed function cruft like `gl_ModelViewProjectionMatrix`, `gl_MultiTexCoord0` and `gl_Vertex` was replaced with uniforms and attribute streams. The modern XML shader spec in RetroArch focuses on being compatible with GLES2 (and compatible with GL 3.x+ as well).
|
||||||
|
|
||||||
|
The `ruby` prefix was later deprecated and you could use `TexCoord`, `VertexCoord` etc.
|
||||||
|
For compatibility reasons, the `ruby` prefix is still accepted.
|
||||||
|
|
||||||
|
### Example modern shader
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<shader language="GLSL" style="GLES2">
|
||||||
|
<vertex><![CDATA[
|
||||||
|
attribute vec2 rubyTexCoord;
|
||||||
|
attribute vec2 rubyVertexCoord;
|
||||||
|
uniform mat4 rubyMVPMatrix;
|
||||||
|
varying vec2 tex_coord;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = rubyMVPMatrix * vec4(rubyVertexCoord, 0.0, 1.0);
|
||||||
|
tex_coord = rubyTexCoord;
|
||||||
|
}
|
||||||
|
]]></vertex>
|
||||||
|
<fragment><![CDATA[
|
||||||
|
uniform sampler2D rubyTexture;
|
||||||
|
varying vec2 tex_coord;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_FragColor = texture2D(rubyTexture, tex_coord);
|
||||||
|
}
|
||||||
|
]]></fragment>
|
||||||
|
</shader>
|
||||||
|
|
||||||
|
## Moving off XML shaders
|
||||||
|
XML shaders as a whole are deprecated in RetroArch, and will not be selectable in [[RGUI]].
|
||||||
|
You can still use them via `video_shader` config option. To use GLSL in RetroArch, the new [[GLSL shader]] format is used, which mirrors the [[Cg shader]] implementation quite well. The new GLSL shaders only support modern style, no fixed function. To convert XML shaders into straight GLSL, see [[GLSL shader]].
|
Loading…
Reference in New Issue