1121 lines
46 KiB
C#
1121 lines
46 KiB
C#
// Generated by TinyPG v1.3 available at www.codeproject.com
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Xml.Serialization;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace TwoMGFX.TPGParser
|
|
{
|
|
#region ParseTree
|
|
[Serializable]
|
|
public class ParseErrors : List<ParseError>
|
|
{
|
|
}
|
|
|
|
[Serializable]
|
|
public class ParseError
|
|
{
|
|
private string file;
|
|
private string message;
|
|
private int code;
|
|
private int line;
|
|
private int col;
|
|
private int pos;
|
|
private int length;
|
|
|
|
public string File { get { return file; } }
|
|
public int Code { get { return code; } }
|
|
public int Line { get { return line; } }
|
|
public int Column { get { return col; } }
|
|
public int Position { get { return pos; } }
|
|
public int Length { get { return length; } }
|
|
public string Message { get { return message; } }
|
|
|
|
// just for the sake of serialization
|
|
public ParseError()
|
|
{
|
|
}
|
|
|
|
public ParseError(string message, int code, ParseNode node) : this(message, code, node.Token)
|
|
{
|
|
}
|
|
|
|
public ParseError(string message, int code, Token token) : this(message, code, token.File, token.Line, token.Column, token.StartPos, token.Length)
|
|
{
|
|
}
|
|
|
|
public ParseError(string message, int code) : this(message, code, string.Empty, 0, 0, 0, 0)
|
|
{
|
|
}
|
|
|
|
public ParseError(string message, int code, string file, int line, int col, int pos, int length)
|
|
{
|
|
this.file = file;
|
|
this.message = message;
|
|
this.code = code;
|
|
this.line = line;
|
|
this.col = col;
|
|
this.pos = pos;
|
|
this.length = length;
|
|
}
|
|
}
|
|
|
|
// rootlevel of the node tree
|
|
[Serializable]
|
|
public partial class ParseTree : ParseNode
|
|
{
|
|
public ParseErrors Errors;
|
|
|
|
public List<Token> Skipped;
|
|
|
|
public ParseTree() : base(new Token(), "ParseTree")
|
|
{
|
|
Token.Type = TokenType.Start;
|
|
Token.Text = "Root";
|
|
Errors = new ParseErrors();
|
|
}
|
|
|
|
public string PrintTree()
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
int indent = 0;
|
|
PrintNode(sb, this, indent);
|
|
return sb.ToString();
|
|
}
|
|
|
|
private void PrintNode(StringBuilder sb, ParseNode node, int indent)
|
|
{
|
|
|
|
string space = "".PadLeft(indent, ' ');
|
|
|
|
sb.Append(space);
|
|
sb.AppendLine(node.Text);
|
|
|
|
foreach (ParseNode n in node.Nodes)
|
|
PrintNode(sb, n, indent + 2);
|
|
}
|
|
|
|
/// <summary>
|
|
/// this is the entry point for executing and evaluating the parse tree.
|
|
/// </summary>
|
|
/// <param name="paramlist">additional optional input parameters</param>
|
|
/// <returns>the output of the evaluation function</returns>
|
|
public object Eval(params object[] paramlist)
|
|
{
|
|
return Nodes[0].Eval(this, paramlist);
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
[XmlInclude(typeof(ParseTree))]
|
|
public partial class ParseNode
|
|
{
|
|
protected string text;
|
|
protected List<ParseNode> nodes;
|
|
|
|
public List<ParseNode> Nodes { get {return nodes;} }
|
|
|
|
[XmlIgnore] // avoid circular references when serializing
|
|
public ParseNode Parent;
|
|
public Token Token; // the token/rule
|
|
|
|
[XmlIgnore] // skip redundant text (is part of Token)
|
|
public string Text { // text to display in parse tree
|
|
get { return text;}
|
|
set { text = value; }
|
|
}
|
|
|
|
public virtual ParseNode CreateNode(Token token, string text)
|
|
{
|
|
ParseNode node = new ParseNode(token, text);
|
|
node.Parent = this;
|
|
return node;
|
|
}
|
|
|
|
protected ParseNode(Token token, string text)
|
|
{
|
|
this.Token = token;
|
|
this.text = text;
|
|
this.nodes = new List<ParseNode>();
|
|
}
|
|
|
|
protected object GetValue(ParseTree tree, TokenType type, int index)
|
|
{
|
|
return GetValue(tree, type, ref index);
|
|
}
|
|
|
|
protected object GetValue(ParseTree tree, TokenType type, ref int index)
|
|
{
|
|
object o = null;
|
|
if (index < 0) return o;
|
|
|
|
// left to right
|
|
foreach (ParseNode node in nodes)
|
|
{
|
|
if (node.Token.Type == type)
|
|
{
|
|
index--;
|
|
if (index < 0)
|
|
{
|
|
o = node.Eval(tree);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return o;
|
|
}
|
|
|
|
/// <summary>
|
|
/// this implements the evaluation functionality, cannot be used directly
|
|
/// </summary>
|
|
/// <param name="tree">the parsetree itself</param>
|
|
/// <param name="paramlist">optional input parameters</param>
|
|
/// <returns>a partial result of the evaluation</returns>
|
|
internal object Eval(ParseTree tree, params object[] paramlist)
|
|
{
|
|
object Value = null;
|
|
|
|
switch (Token.Type)
|
|
{
|
|
case TokenType.Start:
|
|
Value = EvalStart(tree, paramlist);
|
|
break;
|
|
case TokenType.Technique_Declaration:
|
|
Value = EvalTechnique_Declaration(tree, paramlist);
|
|
break;
|
|
case TokenType.FillMode_Solid:
|
|
Value = EvalFillMode_Solid(tree, paramlist);
|
|
break;
|
|
case TokenType.FillMode_WireFrame:
|
|
Value = EvalFillMode_WireFrame(tree, paramlist);
|
|
break;
|
|
case TokenType.FillModes:
|
|
Value = EvalFillModes(tree, paramlist);
|
|
break;
|
|
case TokenType.CullMode_None:
|
|
Value = EvalCullMode_None(tree, paramlist);
|
|
break;
|
|
case TokenType.CullMode_Cw:
|
|
Value = EvalCullMode_Cw(tree, paramlist);
|
|
break;
|
|
case TokenType.CullMode_Ccw:
|
|
Value = EvalCullMode_Ccw(tree, paramlist);
|
|
break;
|
|
case TokenType.CullModes:
|
|
Value = EvalCullModes(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_None:
|
|
Value = EvalColors_None(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_Red:
|
|
Value = EvalColors_Red(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_Green:
|
|
Value = EvalColors_Green(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_Blue:
|
|
Value = EvalColors_Blue(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_Alpha:
|
|
Value = EvalColors_Alpha(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_All:
|
|
Value = EvalColors_All(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors_Boolean:
|
|
Value = EvalColors_Boolean(tree, paramlist);
|
|
break;
|
|
case TokenType.Colors:
|
|
Value = EvalColors(tree, paramlist);
|
|
break;
|
|
case TokenType.ColorsMasks:
|
|
Value = EvalColorsMasks(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_Zero:
|
|
Value = EvalBlend_Zero(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_One:
|
|
Value = EvalBlend_One(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_SrcColor:
|
|
Value = EvalBlend_SrcColor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_InvSrcColor:
|
|
Value = EvalBlend_InvSrcColor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_SrcAlpha:
|
|
Value = EvalBlend_SrcAlpha(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_InvSrcAlpha:
|
|
Value = EvalBlend_InvSrcAlpha(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_DestAlpha:
|
|
Value = EvalBlend_DestAlpha(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_InvDestAlpha:
|
|
Value = EvalBlend_InvDestAlpha(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_DestColor:
|
|
Value = EvalBlend_DestColor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_InvDestColor:
|
|
Value = EvalBlend_InvDestColor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_SrcAlphaSat:
|
|
Value = EvalBlend_SrcAlphaSat(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_BlendFactor:
|
|
Value = EvalBlend_BlendFactor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blend_InvBlendFactor:
|
|
Value = EvalBlend_InvBlendFactor(tree, paramlist);
|
|
break;
|
|
case TokenType.Blends:
|
|
Value = EvalBlends(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOp_Add:
|
|
Value = EvalBlendOp_Add(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOp_Subtract:
|
|
Value = EvalBlendOp_Subtract(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOp_RevSubtract:
|
|
Value = EvalBlendOp_RevSubtract(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOp_Min:
|
|
Value = EvalBlendOp_Min(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOp_Max:
|
|
Value = EvalBlendOp_Max(tree, paramlist);
|
|
break;
|
|
case TokenType.BlendOps:
|
|
Value = EvalBlendOps(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_Never:
|
|
Value = EvalCmpFunc_Never(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_Less:
|
|
Value = EvalCmpFunc_Less(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_Equal:
|
|
Value = EvalCmpFunc_Equal(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_LessEqual:
|
|
Value = EvalCmpFunc_LessEqual(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_Greater:
|
|
Value = EvalCmpFunc_Greater(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_NotEqual:
|
|
Value = EvalCmpFunc_NotEqual(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_GreaterEqual:
|
|
Value = EvalCmpFunc_GreaterEqual(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc_Always:
|
|
Value = EvalCmpFunc_Always(tree, paramlist);
|
|
break;
|
|
case TokenType.CmpFunc:
|
|
Value = EvalCmpFunc(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Keep:
|
|
Value = EvalStencilOp_Keep(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Zero:
|
|
Value = EvalStencilOp_Zero(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Replace:
|
|
Value = EvalStencilOp_Replace(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_IncrSat:
|
|
Value = EvalStencilOp_IncrSat(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_DecrSat:
|
|
Value = EvalStencilOp_DecrSat(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Invert:
|
|
Value = EvalStencilOp_Invert(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Incr:
|
|
Value = EvalStencilOp_Incr(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp_Decr:
|
|
Value = EvalStencilOp_Decr(tree, paramlist);
|
|
break;
|
|
case TokenType.StencilOp:
|
|
Value = EvalStencilOp(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_CullMode:
|
|
Value = EvalRender_State_CullMode(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_FillMode:
|
|
Value = EvalRender_State_FillMode(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_AlphaBlendEnable:
|
|
Value = EvalRender_State_AlphaBlendEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_SrcBlend:
|
|
Value = EvalRender_State_SrcBlend(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_DestBlend:
|
|
Value = EvalRender_State_DestBlend(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_BlendOp:
|
|
Value = EvalRender_State_BlendOp(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_ColorWriteEnable:
|
|
Value = EvalRender_State_ColorWriteEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_DepthBias:
|
|
Value = EvalRender_State_DepthBias(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_SlopeScaleDepthBias:
|
|
Value = EvalRender_State_SlopeScaleDepthBias(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_ZEnable:
|
|
Value = EvalRender_State_ZEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_ZWriteEnable:
|
|
Value = EvalRender_State_ZWriteEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_ZFunc:
|
|
Value = EvalRender_State_ZFunc(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_MultiSampleAntiAlias:
|
|
Value = EvalRender_State_MultiSampleAntiAlias(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_ScissorTestEnable:
|
|
Value = EvalRender_State_ScissorTestEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilEnable:
|
|
Value = EvalRender_State_StencilEnable(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilFail:
|
|
Value = EvalRender_State_StencilFail(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilFunc:
|
|
Value = EvalRender_State_StencilFunc(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilMask:
|
|
Value = EvalRender_State_StencilMask(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilPass:
|
|
Value = EvalRender_State_StencilPass(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilRef:
|
|
Value = EvalRender_State_StencilRef(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilWriteMask:
|
|
Value = EvalRender_State_StencilWriteMask(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_StencilZFail:
|
|
Value = EvalRender_State_StencilZFail(tree, paramlist);
|
|
break;
|
|
case TokenType.Render_State_Expression:
|
|
Value = EvalRender_State_Expression(tree, paramlist);
|
|
break;
|
|
case TokenType.Pass_Declaration:
|
|
Value = EvalPass_Declaration(tree, paramlist);
|
|
break;
|
|
case TokenType.VertexShader_Pass_Expression:
|
|
Value = EvalVertexShader_Pass_Expression(tree, paramlist);
|
|
break;
|
|
case TokenType.PixelShader_Pass_Expression:
|
|
Value = EvalPixelShader_Pass_Expression(tree, paramlist);
|
|
break;
|
|
case TokenType.AddressMode_Clamp:
|
|
Value = EvalAddressMode_Clamp(tree, paramlist);
|
|
break;
|
|
case TokenType.AddressMode_Wrap:
|
|
Value = EvalAddressMode_Wrap(tree, paramlist);
|
|
break;
|
|
case TokenType.AddressMode_Mirror:
|
|
Value = EvalAddressMode_Mirror(tree, paramlist);
|
|
break;
|
|
case TokenType.AddressMode_Border:
|
|
Value = EvalAddressMode_Border(tree, paramlist);
|
|
break;
|
|
case TokenType.AddressMode:
|
|
Value = EvalAddressMode(tree, paramlist);
|
|
break;
|
|
case TokenType.TextureFilter_None:
|
|
Value = EvalTextureFilter_None(tree, paramlist);
|
|
break;
|
|
case TokenType.TextureFilter_Linear:
|
|
Value = EvalTextureFilter_Linear(tree, paramlist);
|
|
break;
|
|
case TokenType.TextureFilter_Point:
|
|
Value = EvalTextureFilter_Point(tree, paramlist);
|
|
break;
|
|
case TokenType.TextureFilter_Anisotropic:
|
|
Value = EvalTextureFilter_Anisotropic(tree, paramlist);
|
|
break;
|
|
case TokenType.TextureFilter:
|
|
Value = EvalTextureFilter(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_Texture:
|
|
Value = EvalSampler_State_Texture(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MinFilter:
|
|
Value = EvalSampler_State_MinFilter(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MagFilter:
|
|
Value = EvalSampler_State_MagFilter(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MipFilter:
|
|
Value = EvalSampler_State_MipFilter(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_Filter:
|
|
Value = EvalSampler_State_Filter(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_AddressU:
|
|
Value = EvalSampler_State_AddressU(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_AddressV:
|
|
Value = EvalSampler_State_AddressV(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_AddressW:
|
|
Value = EvalSampler_State_AddressW(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_BorderColor:
|
|
Value = EvalSampler_State_BorderColor(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MaxMipLevel:
|
|
Value = EvalSampler_State_MaxMipLevel(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MaxAnisotropy:
|
|
Value = EvalSampler_State_MaxAnisotropy(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_MipLodBias:
|
|
Value = EvalSampler_State_MipLodBias(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_State_Expression:
|
|
Value = EvalSampler_State_Expression(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_Register_Expression:
|
|
Value = EvalSampler_Register_Expression(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_Declaration_States:
|
|
Value = EvalSampler_Declaration_States(tree, paramlist);
|
|
break;
|
|
case TokenType.Sampler_Declaration:
|
|
Value = EvalSampler_Declaration(tree, paramlist);
|
|
break;
|
|
|
|
default:
|
|
Value = Token.Text;
|
|
break;
|
|
}
|
|
return Value;
|
|
}
|
|
|
|
protected virtual object EvalStart(ParseTree tree, params object[] paramlist)
|
|
{
|
|
var shader = new ShaderInfo();
|
|
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, shader);
|
|
|
|
return shader;
|
|
}
|
|
|
|
protected virtual object EvalTechnique_Declaration(ParseTree tree, params object[] paramlist)
|
|
{
|
|
var technique = new TechniqueInfo();
|
|
technique.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty;
|
|
technique.startPos = Token.StartPos;
|
|
technique.length = Token.Length;
|
|
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, technique);
|
|
|
|
// Make sure we have at least one pass.
|
|
if (technique.Passes.Count > 0)
|
|
{
|
|
var shaderInfo = paramlist[0] as ShaderInfo;
|
|
shaderInfo.Techniques.Add(technique);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalFillMode_Solid(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return FillMode.Solid;
|
|
}
|
|
|
|
protected virtual object EvalFillMode_WireFrame(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return FillMode.WireFrame;
|
|
}
|
|
|
|
protected virtual object EvalFillModes(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.FillMode_Solid, 0) ?? this.GetValue(tree, TokenType.FillMode_WireFrame, 0);
|
|
}
|
|
|
|
protected virtual object EvalCullMode_None(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CullMode.None;
|
|
}
|
|
|
|
protected virtual object EvalCullMode_Cw(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CullMode.CullClockwiseFace;
|
|
}
|
|
|
|
protected virtual object EvalCullMode_Ccw(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CullMode.CullCounterClockwiseFace;
|
|
}
|
|
|
|
protected virtual object EvalCullModes(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.CullMode_None, 0) ?? this.GetValue(tree, TokenType.CullMode_Cw, 0) ?? this.GetValue(tree, TokenType.CullMode_Ccw, 0);
|
|
}
|
|
|
|
protected virtual object EvalColors_None(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.None;
|
|
}
|
|
|
|
protected virtual object EvalColors_Red(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.Red;
|
|
}
|
|
|
|
protected virtual object EvalColors_Green(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.Green;
|
|
}
|
|
|
|
protected virtual object EvalColors_Blue(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.Blue;
|
|
}
|
|
|
|
protected virtual object EvalColors_Alpha(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.Alpha;
|
|
}
|
|
|
|
protected virtual object EvalColors_All(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ColorWriteChannels.All;
|
|
}
|
|
|
|
protected virtual object EvalColors_Boolean(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)) ? ColorWriteChannels.All : ColorWriteChannels.None;
|
|
}
|
|
|
|
protected virtual object EvalColors(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.Colors_Red, 0) ?? this.GetValue(tree, TokenType.Colors_Green, 0) ?? this.GetValue(tree, TokenType.Colors_Blue, 0) ?? this.GetValue(tree, TokenType.Colors_Alpha, 0) ?? this.GetValue(tree, TokenType.Colors_None, 0) ?? this.GetValue(tree, TokenType.Colors_All, 0) ?? this.GetValue(tree, TokenType.Colors_Boolean, 0);
|
|
}
|
|
|
|
protected virtual object EvalColorsMasks(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return (ColorWriteChannels)(this.GetValue(tree, TokenType.Colors, 0) ?? 0) |
|
|
(ColorWriteChannels)(this.GetValue(tree, TokenType.Colors, 1) ?? 0) |
|
|
(ColorWriteChannels)(this.GetValue(tree, TokenType.Colors, 2) ?? 0) |
|
|
(ColorWriteChannels)(this.GetValue(tree, TokenType.Colors, 3) ?? 0);
|
|
}
|
|
|
|
protected virtual object EvalBlend_Zero(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.Zero;
|
|
}
|
|
|
|
protected virtual object EvalBlend_One(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.One;
|
|
}
|
|
|
|
protected virtual object EvalBlend_SrcColor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.SourceColor;
|
|
}
|
|
|
|
protected virtual object EvalBlend_InvSrcColor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.InverseSourceColor;
|
|
}
|
|
|
|
protected virtual object EvalBlend_SrcAlpha(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.SourceAlpha;
|
|
}
|
|
|
|
protected virtual object EvalBlend_InvSrcAlpha(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.InverseSourceAlpha;
|
|
}
|
|
|
|
protected virtual object EvalBlend_DestAlpha(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.DestinationAlpha;
|
|
}
|
|
|
|
protected virtual object EvalBlend_InvDestAlpha(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.InverseDestinationAlpha;
|
|
}
|
|
|
|
protected virtual object EvalBlend_DestColor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.DestinationColor;
|
|
}
|
|
|
|
protected virtual object EvalBlend_InvDestColor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.InverseDestinationColor;
|
|
}
|
|
|
|
protected virtual object EvalBlend_SrcAlphaSat(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.SourceAlphaSaturation;
|
|
}
|
|
|
|
protected virtual object EvalBlend_BlendFactor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.BlendFactor;
|
|
}
|
|
|
|
protected virtual object EvalBlend_InvBlendFactor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return Blend.InverseBlendFactor;
|
|
}
|
|
|
|
protected virtual object EvalBlends(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.Blend_Zero, 0) ?? this.GetValue(tree, TokenType.Blend_One, 0) ?? this.GetValue(tree, TokenType.Blend_SrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcAlpha, 0) ??
|
|
this.GetValue(tree, TokenType.Blend_DestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_DestColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlphaSat, 0) ??
|
|
this.GetValue(tree, TokenType.Blend_BlendFactor, 0) ?? this.GetValue(tree, TokenType.Blend_InvBlendFactor, 0);
|
|
}
|
|
|
|
protected virtual object EvalBlendOp_Add(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return BlendFunction.Add;
|
|
}
|
|
|
|
protected virtual object EvalBlendOp_Subtract(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return BlendFunction.Subtract;
|
|
}
|
|
|
|
protected virtual object EvalBlendOp_RevSubtract(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return BlendFunction.ReverseSubtract;
|
|
}
|
|
|
|
protected virtual object EvalBlendOp_Min(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return BlendFunction.Min;
|
|
}
|
|
|
|
protected virtual object EvalBlendOp_Max(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return BlendFunction.Max;
|
|
}
|
|
|
|
protected virtual object EvalBlendOps(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.BlendOp_Add, 0) ?? this.GetValue(tree, TokenType.BlendOp_Subtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_RevSubtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_Min, 0) ?? this.GetValue(tree, TokenType.BlendOp_Max, 0);
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_Never(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.Never;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_Less(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.Less;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_Equal(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.Equal;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_LessEqual(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.LessEqual;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_Greater(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.Greater;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_NotEqual(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.NotEqual;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_GreaterEqual(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.GreaterEqual;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc_Always(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return CompareFunction.Always;
|
|
}
|
|
|
|
protected virtual object EvalCmpFunc(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.CmpFunc_Never, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Less, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Equal, 0) ?? this.GetValue(tree, TokenType.CmpFunc_LessEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Greater, 0) ?? this.GetValue(tree, TokenType.CmpFunc_NotEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_GreaterEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Always, 0);
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Keep(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Keep;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Zero(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Zero;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Replace(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Replace;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_IncrSat(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.IncrementSaturation;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_DecrSat(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.DecrementSaturation;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Invert(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Invert;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Incr(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Increment;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp_Decr(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return StencilOperation.Decrement;
|
|
}
|
|
|
|
protected virtual object EvalStencilOp(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.StencilOp_Keep, 0) ?? this.GetValue(tree, TokenType.StencilOp_Zero, 0) ?? this.GetValue(tree, TokenType.StencilOp_Replace, 0) ?? this.GetValue(tree, TokenType.StencilOp_IncrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_DecrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_Invert, 0) ?? this.GetValue(tree, TokenType.StencilOp_Incr, 0) ?? this.GetValue(tree, TokenType.StencilOp_Decr, 0);
|
|
}
|
|
|
|
protected virtual object EvalRender_State_CullMode(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).CullMode = (CullMode)this.GetValue(tree, TokenType.CullModes, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_FillMode(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).FillMode = (FillMode)this.GetValue(tree, TokenType.FillModes, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_AlphaBlendEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).AlphaBlendEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_SrcBlend(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).SrcBlend = (Blend)this.GetValue(tree, TokenType.Blends, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_DestBlend(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).DestBlend = (Blend)this.GetValue(tree, TokenType.Blends, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_BlendOp(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).BlendOp = (BlendFunction)this.GetValue(tree, TokenType.BlendOps, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_ColorWriteEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).ColorWriteEnable = (ColorWriteChannels)this.GetValue(tree, TokenType.ColorsMasks, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_DepthBias(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).DepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_SlopeScaleDepthBias(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).SlopeScaleDepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_ZEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).ZEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_ZWriteEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).ZWriteEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_ZFunc(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).DepthBufferFunction = (CompareFunction)this.GetValue(tree, TokenType.CmpFunc, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_MultiSampleAntiAlias(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).MultiSampleAntiAlias = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_ScissorTestEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).ScissorTestEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilEnable(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilFail(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilFail = (StencilOperation)this.GetValue(tree, TokenType.StencilOp, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilFunc(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilFunc = (CompareFunction)this.GetValue(tree, TokenType.CmpFunc, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilMask(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilPass(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilPass = (StencilOperation)this.GetValue(tree, TokenType.StencilOp, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilRef(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilRef = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilWriteMask(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilWriteMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_StencilZFail(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as PassInfo).StencilZFail = (StencilOperation)this.GetValue(tree, TokenType.StencilOp, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalRender_State_Expression(ParseTree tree, params object[] paramlist)
|
|
{
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, paramlist);
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalPass_Declaration(ParseTree tree, params object[] paramlist)
|
|
{
|
|
var pass = new PassInfo();
|
|
pass.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty;
|
|
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, pass);
|
|
|
|
// We need to have a pixel or vertex shader to keep this pass.
|
|
if (!string.IsNullOrEmpty(pass.psFunction) || !string.IsNullOrEmpty(pass.vsFunction))
|
|
{
|
|
var technique = paramlist[0] as TechniqueInfo;
|
|
technique.Passes.Add(pass);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalVertexShader_Pass_Expression(ParseTree tree, params object[] paramlist)
|
|
{
|
|
var pass = paramlist[0] as PassInfo;
|
|
pass.vsModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string;
|
|
pass.vsFunction = this.GetValue(tree, TokenType.Identifier, 0) as string;
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalPixelShader_Pass_Expression(ParseTree tree, params object[] paramlist)
|
|
{
|
|
var pass = paramlist[0] as PassInfo;
|
|
pass.psModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string;
|
|
pass.psFunction = this.GetValue(tree, TokenType.Identifier, 0) as string;
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalAddressMode_Clamp(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureAddressMode.Clamp;
|
|
}
|
|
|
|
protected virtual object EvalAddressMode_Wrap(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureAddressMode.Wrap;
|
|
}
|
|
|
|
protected virtual object EvalAddressMode_Mirror(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureAddressMode.Mirror;
|
|
}
|
|
|
|
protected virtual object EvalAddressMode_Border(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureAddressMode.Border;
|
|
}
|
|
|
|
protected virtual object EvalAddressMode(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.AddressMode_Clamp, 0) ?? this.GetValue(tree, TokenType.AddressMode_Wrap, 0) ?? this.GetValue(tree, TokenType.AddressMode_Mirror, 0) ?? this.GetValue(tree, TokenType.AddressMode_Border, 0);
|
|
}
|
|
|
|
protected virtual object EvalTextureFilter_None(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureFilterType.None;
|
|
}
|
|
|
|
protected virtual object EvalTextureFilter_Linear(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureFilterType.Linear;
|
|
}
|
|
|
|
protected virtual object EvalTextureFilter_Point(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureFilterType.Point;
|
|
}
|
|
|
|
protected virtual object EvalTextureFilter_Anisotropic(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return TextureFilterType.Anisotropic;
|
|
}
|
|
|
|
protected virtual object EvalTextureFilter(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return this.GetValue(tree, TokenType.TextureFilter_None, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Linear, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Point, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Anisotropic, 0);
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_Texture(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).TextureName = (string)this.GetValue(tree, TokenType.Identifier, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MinFilter(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MinFilter = (TextureFilterType)this.GetValue(tree, TokenType.TextureFilter, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MagFilter(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MagFilter = (TextureFilterType)this.GetValue(tree, TokenType.TextureFilter, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MipFilter(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MipFilter = (TextureFilterType)this.GetValue(tree, TokenType.TextureFilter, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_Filter(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).Filter = (TextureFilterType)this.GetValue(tree, TokenType.TextureFilter, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_AddressU(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).AddressU = (TextureAddressMode)this.GetValue(tree, TokenType.AddressMode, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_AddressV(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).AddressV = (TextureAddressMode)this.GetValue(tree, TokenType.AddressMode, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_AddressW(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).AddressW = (TextureAddressMode)this.GetValue(tree, TokenType.AddressMode, 0); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_BorderColor(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).BorderColor = ParseTreeTools.ParseColor((string)this.GetValue(tree, TokenType.HexColor, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MaxMipLevel(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MaxMipLevel = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MaxAnisotropy(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MaxAnisotropy = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_MipLodBias(ParseTree tree, params object[] paramlist)
|
|
{
|
|
(paramlist[0] as SamplerStateInfo).MipMapLevelOfDetailBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_State_Expression(ParseTree tree, params object[] paramlist)
|
|
{
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, paramlist);
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_Register_Expression(ParseTree tree, params object[] paramlist)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_Declaration_States(ParseTree tree, params object[] paramlist)
|
|
{
|
|
foreach (var node in Nodes)
|
|
node.Eval(tree, paramlist);
|
|
return null;
|
|
}
|
|
|
|
protected virtual object EvalSampler_Declaration(ParseTree tree, params object[] paramlist)
|
|
{
|
|
// if there is a comma or closing paren at the end this is a sampler as a parameter of a function
|
|
if (this.GetValue(tree, TokenType.Semicolon, 0) == null) return null;
|
|
|
|
var sampler = new SamplerStateInfo();
|
|
sampler.Name = this.GetValue(tree, TokenType.Identifier, 0) as string;
|
|
|
|
foreach (ParseNode node in Nodes)
|
|
node.Eval(tree, sampler);
|
|
|
|
var shaderInfo = paramlist[0] as ShaderInfo;
|
|
shaderInfo.SamplerStates.Add(sampler.Name, sampler);
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
#endregion ParseTree
|
|
}
|