public class ShaderNodeLoaderDelegate
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
protected class |
ShaderNodeLoaderDelegate.DeclaredVariable |
Modifier and Type | Field and Description |
---|---|
protected AssetManager |
assetManager |
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> |
attributes |
protected ConditionParser |
conditionParser |
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> |
fragmentDeclaredUniforms |
protected MaterialDef |
materialDef |
protected java.util.Map<java.lang.String,ShaderNodeDefinition> |
nodeDefinitions |
protected java.util.Map<java.lang.String,ShaderNode> |
nodes |
protected java.util.List<java.lang.String> |
nulledConditions |
protected java.lang.String |
shaderLanguage |
protected java.lang.String |
shaderName |
protected ShaderNode |
shaderNode |
protected ShaderNodeDefinition |
shaderNodeDefinition |
protected TechniqueDef |
techniqueDef |
protected java.util.Set<java.lang.String> |
varNames |
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> |
varyings |
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> |
vertexDeclaredUniforms |
Constructor and Description |
---|
ShaderNodeLoaderDelegate() |
Modifier and Type | Method and Description |
---|---|
void |
addDefine(java.lang.String paramName,
VarType paramType)
Adds a define to the technique def
|
protected void |
checkMappingFormat(java.lang.String[] vars,
Statement statement)
Checks if once a mapping expression is split by "=" the resulting array
have 2 elements.
|
protected void |
checkTypes(VariableMapping mapping,
Statement statement1)
check the types of a mapping, left type must match right type take the
swizzle into account
|
void |
clear() |
void |
extractCondition(java.lang.String condition,
Statement statement)
Extracts and checks a condition expression.
|
ShaderNodeDefinition |
findDefinition(Statement statement)
Find the definition from this statement (loads it if necessary)
|
protected MatParam |
findMatParam(java.lang.String varName)
Finds a
MatParam in the MaterialDef from the given name. |
ShaderNodeVariable |
findNodeOutput(java.util.List<ShaderNodeVariable> vars,
java.lang.String rightVarName)
Finds a variable with the given name from the list of variable.
|
protected UniformBinding |
findWorldParam(java.lang.String varName)
finds an UniformBinding representing a WorldParam from the techniqueDef
|
java.lang.String |
fixSamplerType(java.lang.String leftType,
java.lang.String rightType)
retrieve the leftType corresponding sampler type from the rightType
|
java.lang.String |
mergeConditions(java.lang.String condition1,
java.lang.String condition2,
java.lang.String operator)
Merges 2 conditions with the given operator
|
protected VariableMapping |
parseMapping(Statement statement,
boolean[] hasNameSpace)
Reads a mapping statement.
|
void |
readFragmentShaderNodes(java.util.List<Statement> statements)
reads the FragmentShaderNodes{} block
|
VariableMapping |
readInputMapping(Statement statement)
Reads an input mapping.
|
void |
readNodes(java.util.List<Statement> statements)
Reads a list of ShaderNodes
|
void |
readNodesDefinitions(java.util.List<Statement> statements)
Read the ShaderNodesDefinitions block and internally stores a map of
ShaderNodesDefinition This method is used by the j3m loader.
|
java.util.List<ShaderNodeDefinition> |
readNodesDefinitions(java.util.List<Statement> statements,
ShaderNodeDefinitionKey key)
Read the ShaderNodesDefinitions block and returns a list of
ShaderNodesDefinition This method is used by the j3sn loader
note that the order of the definitions in the list is not guaranteed.
|
VariableMapping |
readOutputMapping(Statement statement)
Reads an output mapping.
|
protected void |
readShaderNode(java.util.List<Statement> statements)
reads a list of ShaderNode{} blocks
|
protected void |
readShaderNodeDefinition(java.util.List<Statement> statements,
ShaderNodeDefinitionKey key)
effectively reads the ShaderNodesDefinitions block
|
protected void |
readShaderStatement(Statement statement)
Reads a Shader statement of the form TYPE LANG : SOURCE
|
protected ShaderNodeVariable |
readVariable(Statement statement)
reads a variable declaration statement <glslType> <varName>
|
void |
readVertexShaderNodes(java.util.List<Statement> statements)
reads the VertexShaderNodes{} block
|
void |
setAssetManager(AssetManager assetManager)
sets the assetManager
|
void |
setMaterialDef(MaterialDef materialDef)
sets the material def currently being loaded
|
void |
setTechniqueDef(TechniqueDef techniqueDef)
Sets the technique definition currently being loaded
|
void |
storeAttribute(ShaderNodeVariable var)
Stores an attribute.
|
void |
storeFragmentUniform(ShaderNodeVariable var)
store a fragment uniform
|
void |
storeGlobal(ShaderNodeVariable var,
Statement varStatement)
Stores a global output.
|
void |
storeVariable(ShaderNodeVariable variable,
java.util.List<ShaderNodeVariable> varList)
Searches a variable in a list from its name and merges the conditions of the
variables.
|
void |
storeVaryings(ShaderNode node,
ShaderNodeVariable variable)
store a varying
|
void |
storeVertexUniform(ShaderNodeVariable var)
Stores a vertex uniform.
|
boolean |
updateRightFromUniforms(MatParam param,
VariableMapping mapping,
java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> map,
Statement statement)
Updates the right variable of the given mapping from a
MatParam (a
WorldParam) it checks if the uniform hasn't already been loaded, add it
to the maps if not. |
protected boolean |
updateRightFromUniforms(UniformBinding param,
VariableMapping mapping,
java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> map)
updates the right variable of the given mapping from a UniformBinding (a
WorldParam) it checks if the uniform hasn't already been loaded, add it
to the maps if not.
|
protected void |
updateRightTypeFromLeftType(VariableMapping mapping)
Updates the type of the right variable of a mapping from the type of the
left variable.
|
void |
updateVarFromAttributes(ShaderNodeVariable right,
VariableMapping mapping)
Updates a variable from the attribute list.
|
protected boolean |
updateVariableFromList(ShaderNodeVariable var,
java.util.List<ShaderNodeVariable> list)
Searches a variable in the given list and updates its type and namespace.
|
protected java.util.Map<java.lang.String,ShaderNodeDefinition> nodeDefinitions
protected java.util.Map<java.lang.String,ShaderNode> nodes
protected ShaderNodeDefinition shaderNodeDefinition
protected ShaderNode shaderNode
protected TechniqueDef techniqueDef
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> attributes
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> vertexDeclaredUniforms
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> fragmentDeclaredUniforms
protected java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> varyings
protected MaterialDef materialDef
protected java.lang.String shaderLanguage
protected java.lang.String shaderName
protected java.util.Set<java.lang.String> varNames
protected AssetManager assetManager
protected ConditionParser conditionParser
protected java.util.List<java.lang.String> nulledConditions
public java.util.List<ShaderNodeDefinition> readNodesDefinitions(java.util.List<Statement> statements, ShaderNodeDefinitionKey key) throws java.io.IOException
statements
- the list statements to parsekey
- the ShaderNodeDefinitionKeyjava.io.IOException
- if an I/O error occurspublic void readNodesDefinitions(java.util.List<Statement> statements) throws java.io.IOException
statements
- the list of statements to parsejava.io.IOException
- if an I/O error occursprotected void readShaderNodeDefinition(java.util.List<Statement> statements, ShaderNodeDefinitionKey key) throws java.io.IOException
statements
- the list of statements to parsekey
- the ShaderNodeDefinitionKeyjava.io.IOException
- if an I/O error occursprotected ShaderNodeVariable readVariable(Statement statement) throws java.io.IOException
statement
- the statement to parsejava.io.IOException
- if an I/O error occurspublic void readVertexShaderNodes(java.util.List<Statement> statements) throws java.io.IOException
statements
- the list of statements to parsejava.io.IOException
- if an I/O error occursprotected void readShaderNode(java.util.List<Statement> statements) throws java.io.IOException
statements
- the list of statements to parsejava.io.IOException
- if an I/O error occursprotected VariableMapping parseMapping(Statement statement, boolean[] hasNameSpace) throws MatParseException
Format variable to variable: <nameSpace>.<varName>[.<swizzling>] = <nameSpace>.<varName>[.<swizzling>][:Condition] Format expression to variable: <nameSpace>.<varName>[.<swizzling>] = %% expression %% [:Condition]
statement
- the statement to read.hasNameSpace
- indicate which vars have namespacesMatParseException
- if the statement isn't valid.public void readFragmentShaderNodes(java.util.List<Statement> statements) throws java.io.IOException
statements
- the list of statements to parsejava.io.IOException
- if an I/O error occursprotected void readShaderStatement(Statement statement) throws java.io.IOException
statement
- the shader statement (not null)java.io.IOException
- if an I/O error occurspublic void setTechniqueDef(TechniqueDef techniqueDef)
techniqueDef
- the technique defpublic void setMaterialDef(MaterialDef materialDef)
materialDef
- (alias created)protected boolean updateVariableFromList(ShaderNodeVariable var, java.util.List<ShaderNodeVariable> list)
var
- the variable to update.list
- the variables list.protected void updateRightTypeFromLeftType(VariableMapping mapping)
mapping
- the mapping to consider.protected void checkMappingFormat(java.lang.String[] vars, Statement statement) throws MatParseException
vars
- the array.statement
- the statement.MatParseException
- if the array isn't correct.protected MatParam findMatParam(java.lang.String varName)
MatParam
in the MaterialDef
from the given name.varName
- the material param name.MatParam
or null.protected UniformBinding findWorldParam(java.lang.String varName)
varName
- the name of the WorldParamprotected boolean updateRightFromUniforms(UniformBinding param, VariableMapping mapping, java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> map)
param
- the WorldParam UniformBindingmapping
- the mappingmap
- the map of uniforms to search intopublic boolean updateRightFromUniforms(MatParam param, VariableMapping mapping, java.util.Map<java.lang.String,ShaderNodeLoaderDelegate.DeclaredVariable> map, Statement statement) throws MatParseException
MatParam
(a
WorldParam) it checks if the uniform hasn't already been loaded, add it
to the maps if not.param
- the mat param.mapping
- the mapping.map
- the map of uniforms to search into.statement
- the statement being readMatParseException
- in case of a syntax errorpublic void updateVarFromAttributes(ShaderNodeVariable right, VariableMapping mapping)
right
- the variablemapping
- the mappingpublic void addDefine(java.lang.String paramName, VarType paramType)
paramName
- the name of the material parameterparamType
- the type of the material parameterpublic ShaderNodeVariable findNodeOutput(java.util.List<ShaderNodeVariable> vars, java.lang.String rightVarName)
vars
- the list of shader node variables.rightVarName
- the variable name to search for.public void extractCondition(java.lang.String condition, Statement statement) throws MatParseException
condition
- the condition expression.statement
- the statement being read.MatParseException
- if the condition isn't valid.public VariableMapping readInputMapping(Statement statement) throws MatParseException
statement
- the statement being read.MatParseException
- if we have a problem with parsing input mapping statement.public VariableMapping readOutputMapping(Statement statement) throws MatParseException
statement
- the statement being read.MatParseException
- if we have a problem with parsing the statement.public void readNodes(java.util.List<Statement> statements) throws java.io.IOException
statements
- the list of statements to readjava.io.IOException
- if an I/O error occurspublic java.lang.String fixSamplerType(java.lang.String leftType, java.lang.String rightType)
leftType
- the left samplerTyperightType
- the right sampler type (can be multiple types separated
by "|"public void storeGlobal(ShaderNodeVariable var, Statement varStatement) throws MatParseException
var
- the variable to store.varStatement
- the statement being read.MatParseException
- if we have duplicates of a global vertex output variable.public void storeAttribute(ShaderNodeVariable var)
var
- the variable to store.public void storeVertexUniform(ShaderNodeVariable var)
var
- the variable to store.public void storeFragmentUniform(ShaderNodeVariable var)
var
- the variable to storepublic void setAssetManager(AssetManager assetManager)
assetManager
- for loading assets (alias created)public ShaderNodeDefinition findDefinition(Statement statement) throws java.io.IOException
statement
- the statement being readjava.io.IOException
- if an I/O error occurspublic void storeVaryings(ShaderNode node, ShaderNodeVariable variable)
node
- the shaderNodevariable
- the variable to storepublic java.lang.String mergeConditions(java.lang.String condition1, java.lang.String condition2, java.lang.String operator)
condition1
- the first conditioncondition2
- the second conditionoperator
- the operator ("&&" or "||&)public void storeVariable(ShaderNodeVariable variable, java.util.List<ShaderNodeVariable> varList)
variable
- the variable.varList
- the variable list.protected void checkTypes(VariableMapping mapping, Statement statement1) throws MatParseException
mapping
- the mappingstatement1
- the statement being readMatParseException
- in case of a syntax errorpublic void clear()