|
|
@@ -51,7 +51,7 @@ Material::StdVarNameAndGlDataTypePair Material::stdUniVarInfos[SUV_NUM] =
|
|
|
|
|
|
|
|
|
//======================================================================================================================
|
|
|
-// Stuff for custom material stage shader prgs =
|
|
|
+// Stuff for custom material stage shader progs =
|
|
|
//======================================================================================================================
|
|
|
|
|
|
/// A simple pair-like structure
|
|
|
@@ -122,308 +122,301 @@ static bool searchBlendEnum(const char* str, int& gl_enum)
|
|
|
//======================================================================================================================
|
|
|
void Material::load(const char* filename)
|
|
|
{
|
|
|
- try
|
|
|
+ Scanner scanner(filename);
|
|
|
+ const Scanner::Token* token;
|
|
|
+
|
|
|
+ while(true)
|
|
|
{
|
|
|
- Scanner scanner(filename);
|
|
|
- const Scanner::Token* token;
|
|
|
+ token = &scanner.getNextToken();
|
|
|
|
|
|
- while(true)
|
|
|
+ //
|
|
|
+ // SHADER_PROG
|
|
|
+ //
|
|
|
+ if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SHADER_PROG"))
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
+ if(shaderProg.get())
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION("Shader program already loaded");
|
|
|
+ }
|
|
|
|
|
|
- //
|
|
|
- // SHADER_PROG
|
|
|
- //
|
|
|
- if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SHADER_PROG"))
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ string shaderFilename;
|
|
|
+ // Just a string
|
|
|
+ if(token->getCode() == Scanner::TC_STRING)
|
|
|
{
|
|
|
- if(shaderProg.get())
|
|
|
+ shaderFilename = token->getValue().getString();
|
|
|
+ }
|
|
|
+ // build custom shader
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getString(), "buildMsSProg"))
|
|
|
+ {
|
|
|
+ // (
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_LPAREN)
|
|
|
{
|
|
|
- PARSER_THROW_EXCEPTION("Shader program already loaded");
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("(");
|
|
|
}
|
|
|
|
|
|
+ // shader prog
|
|
|
token = &scanner.getNextToken();
|
|
|
- string shaderFilename;
|
|
|
- // Just a string
|
|
|
- if(token->getCode() == Scanner::TC_STRING)
|
|
|
+ if(token->getCode() != Scanner::TC_STRING)
|
|
|
{
|
|
|
- shaderFilename = token->getValue().getString();
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
}
|
|
|
- // build custom shader
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getString(), "buildMsSProg"))
|
|
|
+ string sProgFilename = token->getValue().getString();
|
|
|
+
|
|
|
+ // get the switches
|
|
|
+ string source;
|
|
|
+ string prefix;
|
|
|
+ while(true)
|
|
|
{
|
|
|
- // (
|
|
|
token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_LPAREN)
|
|
|
+
|
|
|
+ if(token->getCode() == Scanner::TC_RPAREN)
|
|
|
{
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("(");
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
- // shader prog
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_STRING)
|
|
|
+ if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
{
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
}
|
|
|
- string sProgFilename = token->getValue().getString();
|
|
|
|
|
|
- // get the switches
|
|
|
- string source;
|
|
|
- string prefix;
|
|
|
- while(true)
|
|
|
+ // Check if acceptable value. Loop the switches array
|
|
|
+ MsSwitch* mss = msSwitches;
|
|
|
+ while(mss->switchName != NULL)
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
-
|
|
|
- if(token->getCode() == Scanner::TC_RPAREN)
|
|
|
+ if(!strcmp(mss->switchName, token->getString()))
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
- }
|
|
|
-
|
|
|
- // Check if acceptable value. Loop the switches array
|
|
|
- MsSwitch* mss = msSwitches;
|
|
|
- while(mss->switchName != NULL)
|
|
|
- {
|
|
|
- if(!strcmp(mss->switchName, token->getString()))
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
+ ++mss;
|
|
|
+ }
|
|
|
|
|
|
- ++mss;
|
|
|
- }
|
|
|
+ if(mss->switchName == NULL)
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION("Incorrect switch " + token->getString());
|
|
|
+ }
|
|
|
|
|
|
- if(mss->switchName == NULL)
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION("Incorrect switch " + token->getString());
|
|
|
- }
|
|
|
+ source += string("#define ") + token->getString() + "\n";
|
|
|
+ prefix.push_back(mss->prefix);
|
|
|
+ } // end get the switches
|
|
|
|
|
|
- source += string("#define ") + token->getString() + "\n";
|
|
|
- prefix.push_back(mss->prefix);
|
|
|
- } // end get the switches
|
|
|
+ std::sort(prefix.begin(), prefix.end());
|
|
|
|
|
|
- std::sort(prefix.begin(), prefix.end());
|
|
|
+ shaderFilename = ShaderProg::createSrcCodeToCache(sProgFilename.c_str(), source.c_str(), prefix.c_str());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("string or buildMsSProg");
|
|
|
+ }
|
|
|
|
|
|
- shaderFilename = ShaderProg::createSrcCodeToCache(sProgFilename.c_str(), source.c_str(), prefix.c_str());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("string or buildMsSProg");
|
|
|
- }
|
|
|
+ shaderProg.loadRsrc(shaderFilename.c_str());
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // DEPTH_PASS_MATERIAL
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "DEPTH_PASS_MATERIAL"))
|
|
|
+ {
|
|
|
+ if(dpMtl.get())
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION("Depth material already loaded");
|
|
|
+ }
|
|
|
|
|
|
- shaderProg.loadRsrc(shaderFilename.c_str());
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_STRING)
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
}
|
|
|
- //
|
|
|
- // DEPTH_PASS_MATERIAL
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "DEPTH_PASS_MATERIAL"))
|
|
|
+ dpMtl.loadRsrc(token->getValue().getString());
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // BLENDS
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDS"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
{
|
|
|
- if(dpMtl.get())
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION("Depth material already loaded");
|
|
|
- }
|
|
|
-
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_STRING)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
- }
|
|
|
- dpMtl.loadRsrc(token->getValue().getString());
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
}
|
|
|
- //
|
|
|
- // BLENDS
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDS"))
|
|
|
+ blends = token->getValue().getInt();
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // BLENDING_SFACTOR
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDING_SFACTOR"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
- }
|
|
|
- blends = token->getValue().getInt();
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
}
|
|
|
- //
|
|
|
- // BLENDING_SFACTOR
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDING_SFACTOR"))
|
|
|
+ int gl_enum;
|
|
|
+ if(!searchBlendEnum(token->getValue().getString(), gl_enum))
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
- }
|
|
|
- int gl_enum;
|
|
|
- if(!searchBlendEnum(token->getValue().getString(), gl_enum))
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION("Incorrect blending factor \"" + token->getValue().getString() + "\"");
|
|
|
- }
|
|
|
- blendingSfactor = gl_enum;
|
|
|
+ throw PARSER_EXCEPTION("Incorrect blending factor \"" + token->getValue().getString() + "\"");
|
|
|
}
|
|
|
- //
|
|
|
- // BLENDING_DFACTOR
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDING_DFACTOR"))
|
|
|
+ blendingSfactor = gl_enum;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // BLENDING_DFACTOR
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "BLENDING_DFACTOR"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
- }
|
|
|
- int gl_enum;
|
|
|
- if(!searchBlendEnum(token->getValue().getString(), gl_enum))
|
|
|
- {
|
|
|
- PARSE_ERR("Incorrect blending factor \"" << token->getValue().getString() << "\"");
|
|
|
- }
|
|
|
- blendingDfactor = gl_enum;
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
}
|
|
|
- //
|
|
|
- // DEPTH_TESTING
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "DEPTH_TESTING"))
|
|
|
+ int gl_enum;
|
|
|
+ if(!searchBlendEnum(token->getValue().getString(), gl_enum))
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
- }
|
|
|
- depthTesting = token->getValue().getInt();
|
|
|
+ throw PARSER_EXCEPTION("Incorrect blending factor \"" + token->getValue().getString() + "\"");
|
|
|
}
|
|
|
- //
|
|
|
- // WIREFRAME
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "WIREFRAME"))
|
|
|
+ blendingDfactor = gl_enum;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // DEPTH_TESTING
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "DEPTH_TESTING"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
- }
|
|
|
- wireframe = token->getValue().getInt();
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
}
|
|
|
- //
|
|
|
- // CASTS_SHADOW
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "CASTS_SHADOW"))
|
|
|
+ depthTesting = token->getValue().getInt();
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // WIREFRAME
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "WIREFRAME"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
{
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
- }
|
|
|
- castsShadow = token->getValue().getInt();
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
}
|
|
|
- //
|
|
|
- // USER_DEFINED_VARS
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "USER_DEFINED_VARS"))
|
|
|
+ wireframe = token->getValue().getInt();
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // CASTS_SHADOW
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "CASTS_SHADOW"))
|
|
|
+ {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_NUMBER)
|
|
|
{
|
|
|
- // first check if the shader is defined
|
|
|
- if(shaderProg.get() == NULL)
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION("You have to define the shader program before the user defined vars");
|
|
|
- }
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("number");
|
|
|
+ }
|
|
|
+ castsShadow = token->getValue().getInt();
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // USER_DEFINED_VARS
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "USER_DEFINED_VARS"))
|
|
|
+ {
|
|
|
+ // first check if the shader is defined
|
|
|
+ if(shaderProg.get() == NULL)
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION("You have to define the shader program before the user defined vars");
|
|
|
+ }
|
|
|
|
|
|
- // {
|
|
|
+ // {
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() != Scanner::TC_LBRACKET)
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("{");
|
|
|
+ }
|
|
|
+ // loop all the vars
|
|
|
+ do
|
|
|
+ {
|
|
|
+ // read the name
|
|
|
token = &scanner.getNextToken();
|
|
|
- if(token->getCode() != Scanner::TC_LBRACKET)
|
|
|
+ if(token->getCode() == Scanner::TC_RBRACKET)
|
|
|
{
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("{");
|
|
|
+ break;
|
|
|
}
|
|
|
- // loop all the vars
|
|
|
- do
|
|
|
- {
|
|
|
- // read the name
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() == Scanner::TC_RBRACKET)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
|
|
|
- if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
- }
|
|
|
+ if(token->getCode() != Scanner::TC_IDENTIFIER)
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("identifier");
|
|
|
+ }
|
|
|
|
|
|
- string varName;
|
|
|
- varName = token->getValue().getString();
|
|
|
+ string varName;
|
|
|
+ varName = token->getValue().getString();
|
|
|
|
|
|
- userDefinedVars.push_back(new UserDefinedUniVar); // create new var
|
|
|
- UserDefinedUniVar& var = userDefinedVars.back();
|
|
|
+ userDefinedVars.push_back(new UserDefinedUniVar); // create new var
|
|
|
+ UserDefinedUniVar& var = userDefinedVars.back();
|
|
|
|
|
|
- // check if the uniform exists
|
|
|
- if(!shaderProg->uniVarExists(varName.c_str()))
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION("The variable \"" + varName + "\" is not an active uniform");
|
|
|
- }
|
|
|
+ // check if the uniform exists
|
|
|
+ if(!shaderProg->uniVarExists(varName.c_str()))
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION("The variable \"" + varName + "\" is not an active uniform");
|
|
|
+ }
|
|
|
|
|
|
- var.sProgVar = shaderProg->findUniVar(varName.c_str());
|
|
|
+ var.sProgVar = shaderProg->findUniVar(varName.c_str());
|
|
|
|
|
|
- // read the values
|
|
|
- switch(var.sProgVar->getGlDataType())
|
|
|
- {
|
|
|
- // texture
|
|
|
- case GL_SAMPLER_2D:
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() == Scanner::TC_STRING)
|
|
|
- {
|
|
|
- var.value.texture.loadRsrc(token->getValue().getString());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
- }
|
|
|
- break;
|
|
|
- // float
|
|
|
- case GL_FLOAT:
|
|
|
- token = &scanner.getNextToken();
|
|
|
- if(token->getCode() == Scanner::TC_NUMBER && token->getDataType() == Scanner::DT_FLOAT)
|
|
|
- {
|
|
|
- var.value.float_ = token->getValue().getFloat();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- throw PARSER_EXCEPTION_EXPECTED("float");
|
|
|
- }
|
|
|
- break;
|
|
|
- // vec2
|
|
|
- case GL_FLOAT_VEC2:
|
|
|
- Parser::parseMathVector(scanner, var.value.vec2);
|
|
|
- break;
|
|
|
- // vec3
|
|
|
- case GL_FLOAT_VEC3:
|
|
|
- Parser::parseMathVector(scanner, var.value.vec3);
|
|
|
- break;
|
|
|
- // vec4
|
|
|
- case GL_FLOAT_VEC4:
|
|
|
- Parser::parseMathVector(scanner, var.value.vec4);
|
|
|
- break;
|
|
|
- };
|
|
|
+ // read the values
|
|
|
+ switch(var.sProgVar->getGlDataType())
|
|
|
+ {
|
|
|
+ // texture
|
|
|
+ case GL_SAMPLER_2D:
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() == Scanner::TC_STRING)
|
|
|
+ {
|
|
|
+ var.value.texture.loadRsrc(token->getValue().getString());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("string");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // float
|
|
|
+ case GL_FLOAT:
|
|
|
+ token = &scanner.getNextToken();
|
|
|
+ if(token->getCode() == Scanner::TC_NUMBER && token->getDataType() == Scanner::DT_FLOAT)
|
|
|
+ {
|
|
|
+ var.value.float_ = token->getValue().getFloat();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_EXPECTED("float");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // vec2
|
|
|
+ case GL_FLOAT_VEC2:
|
|
|
+ Parser::parseMathVector(scanner, var.value.vec2);
|
|
|
+ break;
|
|
|
+ // vec3
|
|
|
+ case GL_FLOAT_VEC3:
|
|
|
+ Parser::parseMathVector(scanner, var.value.vec3);
|
|
|
+ break;
|
|
|
+ // vec4
|
|
|
+ case GL_FLOAT_VEC4:
|
|
|
+ Parser::parseMathVector(scanner, var.value.vec4);
|
|
|
+ break;
|
|
|
+ };
|
|
|
|
|
|
- }while(true); // end loop for all the vars
|
|
|
+ }while(true); // end loop for all the vars
|
|
|
|
|
|
- }
|
|
|
- //
|
|
|
- // EOF
|
|
|
- //
|
|
|
- else if(token->getCode() == Scanner::TC_EOF)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- //
|
|
|
- // other crap
|
|
|
- //
|
|
|
- else
|
|
|
- {
|
|
|
- PARSER_THROW_EXCEPTION_UNEXPECTED();
|
|
|
- }
|
|
|
- } // end while
|
|
|
- }
|
|
|
- catch(std::exception& e)
|
|
|
- {
|
|
|
- ERROR(e.what());
|
|
|
- }
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // EOF
|
|
|
+ //
|
|
|
+ else if(token->getCode() == Scanner::TC_EOF)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // other crap
|
|
|
+ //
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw PARSER_EXCEPTION_UNEXPECTED();
|
|
|
+ }
|
|
|
+ } // end while
|
|
|
|
|
|
initStdShaderVars();
|
|
|
}
|
|
|
@@ -437,7 +430,7 @@ void Material::initStdShaderVars()
|
|
|
// sanity checks
|
|
|
if(!shaderProg.get())
|
|
|
{
|
|
|
- MTL_THROW_EXCEPTION("Without shader is like cake without sugar (missing SHADER_PROG)");
|
|
|
+ throw MTL_EXCEPTION("Without shader is like cake without sugar (missing SHADER_PROG)");
|
|
|
}
|
|
|
|
|
|
// the attributes
|
|
|
@@ -456,9 +449,8 @@ void Material::initStdShaderVars()
|
|
|
// check if the shader has different GL data type from that it suppose to have
|
|
|
if(stdAttribVars[i]->getGlDataType() != stdAttribVarInfos[i].dataType)
|
|
|
{
|
|
|
- MTL_THROW_EXCEPTION("The \"" + stdAttribVarInfos[i].varName +
|
|
|
- "\" attribute var has incorrect GL data type from the expected (0x" + hex +
|
|
|
- stdAttribVars[i]->getGlDataType() + ")");
|
|
|
+ throw MTL_EXCEPTION("The \"" + stdAttribVarInfos[i].varName +
|
|
|
+ "\" attribute var has incorrect GL data type from the expected");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -478,9 +470,8 @@ void Material::initStdShaderVars()
|
|
|
// check if the shader has different GL data type from that it suppose to have
|
|
|
if(stdUniVars[i]->getGlDataType() != stdUniVarInfos[i].dataType)
|
|
|
{
|
|
|
- MTL_THROW_EXCEPTION("The \"" + stdUniVarInfos[i].varName +
|
|
|
- "\" uniform var has incorrect GL data type from the expected (0x" + hex +
|
|
|
- stdUniVars[i]->getGlDataType() + ")");
|
|
|
+ throw MTL_EXCEPTION("The \"" + stdUniVarInfos[i].varName +
|
|
|
+ "\" uniform var has incorrect GL data type from the expected");
|
|
|
}
|
|
|
}
|
|
|
}
|