forked from 0ad/0ad
Check when loading an actor that it defines all the texture samplers required by its material. Print out a readable error otherwise. Fixes #1613 (note that this does not check for unnecessary samplers as that is non-trivial and does not lead to graphical glitches).
Also add a shortcut for some defines to clean-up material files slightly and make the link between sampler and shader more explicit. This was SVN commit r16427.
This commit is contained in:
parent
372a016311
commit
618fe81814
@ -3,4 +3,6 @@
|
||||
<shader effect="model_transparent"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_ALPHATEST" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
|
||||
</material>
|
||||
|
@ -1,9 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<required_texture name="baseTex"/>
|
||||
|
||||
<shader effect="model_transparent"/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<define name="USE_ALPHATEST" value="1"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<!--define name="USE_PLAYERCOLOR" value="1"/-->
|
||||
|
||||
<!-- REQUIRES: Actor must provide a texture named "normTex", where the Alpha channel
|
||||
|
@ -7,4 +7,5 @@
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -4,8 +4,9 @@
|
||||
<alpha_blending/>
|
||||
<renderquery name="sim_time"/>
|
||||
<uniform name="translation" value="0.0 -0.1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>
|
||||
<uniform name="specularPower" value="100.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="model_transparent"/>
|
||||
<alpha_blending/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<shader effect="model_transparent"/>
|
||||
<alpha_blending/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<alternative material="basic_trans.xml" quality="2"/>
|
||||
<alternative material="alphatest_ao_parallax_spec.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
</material>
|
||||
|
@ -5,4 +5,6 @@
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -10,7 +10,6 @@
|
||||
no specularity.
|
||||
COMPATIBILITY: This effect is incompatible with the old "USE_SPECULAR" effect.
|
||||
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -18,4 +17,7 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 25.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -4,4 +4,6 @@
|
||||
<alpha_blending/>
|
||||
<define name="USE_TRANSPARENT" value="1"/>
|
||||
<alternative material="alphatest.xml" if="CFG_FORCE_ALPHATEST"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -14,7 +14,6 @@
|
||||
<!--<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>-->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -22,4 +21,7 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
</material>
|
||||
|
@ -9,12 +9,9 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -22,4 +19,9 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
</material>
|
||||
|
@ -11,10 +11,8 @@
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>-->
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -22,4 +20,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
</material>
|
||||
|
@ -9,9 +9,7 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<!--<define name="USE_AO" value="1"/>-->
|
||||
@ -22,4 +20,7 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
</material>
|
||||
|
@ -11,7 +11,6 @@
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>-->
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<!-- Settings for effects above:
|
||||
@ -20,4 +19,9 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
|
||||
</material>
|
||||
|
@ -6,4 +6,5 @@
|
||||
<renderquery name="sim_time"/>
|
||||
<define name="USE_WIND" value="1"/>
|
||||
<uniform name="windData" value="1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -9,4 +9,5 @@
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="model"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -39,4 +39,7 @@ element material {
|
||||
element renderquery {
|
||||
attribute name { text }
|
||||
}*
|
||||
element required_texture {
|
||||
attribute name { text }
|
||||
}*
|
||||
}
|
||||
|
@ -86,5 +86,10 @@
|
||||
<attribute name="name"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="required_texture">
|
||||
<attribute name="name"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</interleave>
|
||||
</element>
|
||||
|
@ -11,7 +11,6 @@
|
||||
<!--<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>-->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -19,4 +18,7 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
</material>
|
||||
|
@ -6,11 +6,9 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -18,4 +16,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
|
||||
</material>
|
||||
|
@ -2,4 +2,6 @@
|
||||
<material>
|
||||
<shader effect="model"/>
|
||||
<define name="USE_OBJECTCOLOR" value="1"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -7,4 +7,6 @@
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
<define name="USE_OBJECTCOLOR" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -2,4 +2,5 @@
|
||||
<material>
|
||||
<shader effect="model"/>
|
||||
<define name="USE_PLAYERCOLOR" value="1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -12,7 +12,6 @@
|
||||
<!--<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>-->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -20,4 +19,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.6"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
|
||||
</material>
|
||||
|
@ -7,12 +7,9 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -20,4 +17,9 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.6"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
</material>
|
||||
|
@ -7,12 +7,9 @@
|
||||
<!--<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>-->
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -20,4 +17,10 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
|
||||
</material>
|
||||
|
@ -7,7 +7,6 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<!--<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_SELF_LIGHT" value="1"/>-->
|
||||
@ -20,4 +19,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.75"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
|
||||
</material>
|
||||
|
@ -7,9 +7,7 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<!--<define name="USE_AO" value="1"/>-->
|
||||
@ -20,4 +18,9 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
|
||||
</material>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<shader effect="model"/>
|
||||
<alternative material="player_trans.xml" quality="1"/>
|
||||
<define name="USE_PLAYERCOLOR" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<!-- Settings for effects above:
|
||||
@ -12,4 +11,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
|
||||
</material>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<shader effect="model"/>
|
||||
<alternative material="player_trans.xml" quality="1"/>
|
||||
<define name="USE_PLAYERCOLOR" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<!-- <define name="USE_SELF_LIGHT" value="1"/> -->
|
||||
|
||||
<!-- Settings for effects above:
|
||||
@ -12,4 +11,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 20.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
|
||||
</material>
|
||||
|
@ -13,4 +13,5 @@
|
||||
<uniform name="murkiness" value="0.6"/>
|
||||
<uniform name="reflectionTint" value="0.3 0.4 0.3"/>
|
||||
<uniform name="reflectionTintStrength" value="0.1"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -7,4 +7,5 @@
|
||||
<define name="USE_SPECULAR" value="1"/>
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -17,7 +17,6 @@
|
||||
<!-- REQUIRES: Actor must provide a texture named "normTex", where the RGB channels
|
||||
are a normal map corresponding to XYZ normals.
|
||||
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<!-- REQUIRES: Actor must provide a texture named "specTex", where the RGB channels
|
||||
provide a specular colour multiplier.
|
||||
@ -27,7 +26,6 @@
|
||||
no specularity.
|
||||
COMPATIBILITY: This effect is incompatible with the old "USE_SPECULAR" effect.
|
||||
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
|
||||
<!-- REQUIRES: That "USE_SPECULAR_MAP" is enabled and a texture named "specTex" is provided by the Actor.
|
||||
The Alpha channel of the texture defines the amount of self-illumination, with
|
||||
@ -39,7 +37,6 @@
|
||||
<!-- REQUIRES: Actor must provide a texture named "aoTex", where the R channel is the Ambient Occlusion.
|
||||
The model must provide a second, non-overlapping set of UV coordinates.
|
||||
COMMENT: The texture is combined using a multiply blend of (2 * ao * baseTex). -->
|
||||
<define name="USE_AO" value="1"/>
|
||||
|
||||
<!-- Settings for effects above:
|
||||
First value: Normal mapping intensity.
|
||||
@ -47,4 +44,10 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="1.0 10.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="aoTex" define="USE_AO"/>
|
||||
|
||||
</material>
|
||||
|
@ -16,7 +16,6 @@
|
||||
<!-- REQUIRES: Actor must provide a texture named "normTex", where the RGB channels
|
||||
are a normal map corresponding to XYZ normals.
|
||||
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<!-- REQUIRES: Actor must provide a texture named "specTex", where the RGB channels
|
||||
provide a specular colour multiplier.
|
||||
@ -26,7 +25,6 @@
|
||||
no specularity.
|
||||
COMPATIBILITY: This effect is incompatible with the old "USE_SPECULAR" effect.
|
||||
EFFICIENCY: This is a relatively inexpensive effect that should run easily on most hardware. -->
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
|
||||
<!-- REQUIRES: That "USE_SPECULAR_MAP" is enabled and a texture named "specTex" is provided by the Actor.
|
||||
The Alpha channel of the texture defines the amount of self-illumination, with
|
||||
@ -46,4 +44,8 @@
|
||||
Third value: Parallax scale.
|
||||
Fourth value: AO amount. -->
|
||||
<uniform name="effectSettings" value="5.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="terrain_base"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -5,4 +5,5 @@
|
||||
<!--define name="USE_SPECULAR_MAP" value="1"/-->
|
||||
|
||||
<!--uniform name="specularPower" value="15.0"/-->
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="terrain_base"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
|
||||
<uniform name="effectSettings" value="1.0 15.0 0.0 0.0"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
</material>
|
||||
|
@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="terrain_base"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
|
||||
<uniform name="effectSettings" value="1.0 15.0 0.0 0.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -4,4 +4,5 @@
|
||||
<define name="USE_TRIPLANAR" value="1"/>
|
||||
|
||||
<uniform name="effectSettings" value="1.0 15.0 0.0 0.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<material>
|
||||
<shader effect="terrain_base"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<define name="USE_TRIPLANAR" value="1"/>
|
||||
|
||||
<uniform name="effectSettings" value="1.0 15.0 0.0 0.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
</material>
|
||||
|
@ -4,4 +4,5 @@
|
||||
<renderquery name="sim_time"/>
|
||||
<define name="USE_WIND" value="1"/>
|
||||
<uniform name="windData" value="1.0 1.0"/>
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -6,11 +6,13 @@
|
||||
<conditional_define name="USE_PARALLAX_MAP" value="1" type="draw_range" conf="PARALLAX_DIST"/>
|
||||
<conditional_define name="USE_HQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_HQ_DIST"/>
|
||||
<conditional_define name="USE_VHQ_PARALLAX" value="1" type="draw_range" conf="PARALLAX_VHQ_DIST"/>
|
||||
<define name="USE_NORMAL_MAP" value="1"/>
|
||||
<define name="USE_SPECULAR_MAP" value="1"/>
|
||||
<uniform name="effectSettings" value="1.0 50.0 0.0075 0.85"/>
|
||||
|
||||
<renderquery name="sim_time"/>
|
||||
<define name="USE_WIND" value="1"/>
|
||||
<uniform name="windData" value="1.0 1.0"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
<required_texture name="specTex" define="USE_SPECULAR_MAP"/>
|
||||
<required_texture name="normTex" define="USE_NORMAL_MAP"/>
|
||||
</material>
|
||||
|
@ -7,4 +7,6 @@
|
||||
|
||||
<uniform name="specularPower" value="16.0"/>
|
||||
<uniform name="specularColor" value="1.0 1.0 1.0"/>
|
||||
|
||||
<required_texture name="baseTex"/>
|
||||
</material>
|
||||
|
@ -60,6 +60,13 @@ void CMaterial::AddRenderQuery(const char* key)
|
||||
m_RenderQueries.Add(key);
|
||||
}
|
||||
|
||||
void CMaterial::AddRequiredSampler(const CStr& samplerName)
|
||||
{
|
||||
CStrIntern string(samplerName);
|
||||
m_RequiredSamplers.push_back(string);
|
||||
}
|
||||
|
||||
|
||||
// Set up m_CombinedShaderDefines so that index i contains m_ShaderDefines, plus
|
||||
// the extra defines from m_ConditionalDefines[j] for all j where bit j is set in i.
|
||||
// This lets GetShaderDefines() cheaply return the defines for any combination of conditions.
|
||||
|
@ -31,7 +31,8 @@ public:
|
||||
|
||||
struct TextureSampler
|
||||
{
|
||||
TextureSampler(CStr &n, CTexturePtr t) : Name(n), Sampler(t) {}
|
||||
TextureSampler(const CStr &n, CTexturePtr t) : Name(n), Sampler(t) {}
|
||||
TextureSampler(const CStrIntern &n, CTexturePtr t) : Name(n), Sampler(t) {}
|
||||
|
||||
CStrIntern Name;
|
||||
CTexturePtr Sampler;
|
||||
@ -74,6 +75,9 @@ public:
|
||||
void AddRenderQuery(const char* key);
|
||||
const CShaderRenderQueries& GetRenderQueries() const { return m_RenderQueries; }
|
||||
|
||||
void AddRequiredSampler(const CStr& samplerName);
|
||||
const std::vector<CStrIntern>& GetRequiredSampler() const { return m_RequiredSamplers; }
|
||||
|
||||
// Must be called after all AddShaderDefine and AddConditionalDefine
|
||||
void RecomputeCombinedShaderDefines();
|
||||
|
||||
@ -84,6 +88,7 @@ private:
|
||||
CTexturePtr m_DiffuseTexture;
|
||||
|
||||
SamplersVector m_Samplers;
|
||||
std::vector<CStrIntern> m_RequiredSamplers;
|
||||
|
||||
CStrIntern m_ShaderEffect;
|
||||
CShaderDefines m_ShaderDefines;
|
||||
|
@ -58,9 +58,11 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
|
||||
EL(shader);
|
||||
EL(uniform);
|
||||
EL(renderquery);
|
||||
EL(required_texture);
|
||||
EL(conditional_define);
|
||||
AT(effect);
|
||||
AT(if);
|
||||
AT(define);
|
||||
AT(quality);
|
||||
AT(material);
|
||||
AT(name);
|
||||
@ -180,6 +182,12 @@ CMaterial CMaterialManager::LoadMaterial(const VfsPath& pathname)
|
||||
{
|
||||
material.AddRenderQuery(attrs.GetNamedItem(at_name).c_str());
|
||||
}
|
||||
else if (token == el_required_texture)
|
||||
{
|
||||
material.AddRequiredSampler(attrs.GetNamedItem(at_name));
|
||||
if (!attrs.GetNamedItem(at_define).empty())
|
||||
material.AddShaderDefine(CStrIntern(attrs.GetNamedItem(at_define)), str_1);
|
||||
}
|
||||
}
|
||||
|
||||
material.RecomputeCombinedShaderDefines();
|
||||
|
@ -164,7 +164,7 @@ bool CObjectBase::Load(const VfsPath& pathname)
|
||||
if (se.Name == at_file)
|
||||
samp.m_SamplerFile = VfsPath("art/textures/skins") / se.Value.FromUTF8();
|
||||
else if (se.Name == at_name)
|
||||
samp.m_SamplerName = se.Value;
|
||||
samp.m_SamplerName = CStrIntern(se.Value);
|
||||
}
|
||||
currentVariant->m_Samplers.push_back(samp);
|
||||
}
|
||||
@ -459,9 +459,9 @@ const CObjectBase::Variation CObjectBase::BuildVariation(const std::vector<u8>&
|
||||
|
||||
// Same for samplers, though perhaps not strictly necessary:
|
||||
for (std::vector<CObjectBase::Samp>::iterator it = var.m_Samplers.begin(); it != var.m_Samplers.end(); ++it)
|
||||
variation.samplers.erase(it->m_SamplerName);
|
||||
variation.samplers.erase(it->m_SamplerName.string());
|
||||
for (std::vector<CObjectBase::Samp>::iterator it = var.m_Samplers.begin(); it != var.m_Samplers.end(); ++it)
|
||||
variation.samplers.insert(make_pair(it->m_SamplerName, *it));
|
||||
variation.samplers.insert(make_pair(it->m_SamplerName.string(), *it));
|
||||
}
|
||||
|
||||
return variation;
|
||||
|
@ -28,6 +28,7 @@ class CObjectManager;
|
||||
#include <boost/unordered_set.hpp>
|
||||
#include "lib/file/vfs/vfs_path.h"
|
||||
#include "ps/CStr.h"
|
||||
#include "ps/CStrIntern.h"
|
||||
|
||||
#include <boost/random/mersenne_twister.hpp>
|
||||
|
||||
@ -70,7 +71,7 @@ public:
|
||||
struct Samp
|
||||
{
|
||||
// identifier name of sampler in GLSL shaders
|
||||
CStr m_SamplerName;
|
||||
CStrIntern m_SamplerName;
|
||||
// path to load from
|
||||
VfsPath m_SamplerFile;
|
||||
};
|
||||
|
@ -136,19 +136,26 @@ bool CObjectEntry::BuildVariation(const std::vector<std::set<CStr> >& selections
|
||||
LOGERROR("Actor '%s' has no textures.", utf8_from_wstring(m_Base->m_ShortName));
|
||||
}
|
||||
|
||||
std::vector<CObjectBase::Samp>::iterator samp;
|
||||
for (samp = m_Samplers.begin(); samp != m_Samplers.end(); ++samp)
|
||||
for (const auto& samp : m_Samplers)
|
||||
{
|
||||
CTextureProperties textureProps(samp->m_SamplerFile);
|
||||
CTextureProperties textureProps(samp.m_SamplerFile);
|
||||
textureProps.SetWrap(GL_CLAMP_TO_EDGE);
|
||||
CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
|
||||
// if we've loaded this model we're probably going to render it soon, so prefetch its texture.
|
||||
// All textures are prefetched even in the fixed pipeline, including the normal maps etc.
|
||||
// TODO: Should check which renderpath is selected and only preload the necessary textures.
|
||||
texture->Prefetch();
|
||||
model->GetMaterial().AddSampler(CMaterial::TextureSampler(samp->m_SamplerName, texture));
|
||||
model->GetMaterial().AddSampler(CMaterial::TextureSampler(samp.m_SamplerName, texture));
|
||||
}
|
||||
|
||||
const std::vector<CStrIntern>& requiredSamplers = model->GetMaterial().GetRequiredSampler();
|
||||
for (const auto& requSampName : requiredSamplers)
|
||||
{
|
||||
if (std::find_if(m_Samplers.begin(), m_Samplers.end(),
|
||||
[&](CObjectBase::Samp sampler) { return sampler.m_SamplerName == requSampName; }) == m_Samplers.end())
|
||||
LOGERROR("Actor %s: required texture sampler %s not found (material %s)", utf8_from_wstring(m_Base->m_ShortName), requSampName.string().c_str(), m_Base->m_Material.string8().c_str());
|
||||
}
|
||||
|
||||
// calculate initial object space bounds, based on vertex positions
|
||||
model->CalcStaticObjectBounds();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user