Compiler::Compiler():
features(Features::from_context()),
module(0),
+ compiled(false),
specialized(false)
{ }
Compiler::Compiler(const Features &f):
features(f),
module(0),
+ compiled(false),
specialized(false)
{ }
}
for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
finalize(*i, mode);
+
+ compiled = true;
}
string Compiler::get_combined_glsl() const
{
+ if(!compiled)
+ throw invalid_operation("Compiler::get_combined_glsl");
+
string glsl;
unsigned source_count = module->source_map.get_count();
string Compiler::get_stage_glsl(Stage::Type stage_type) const
{
+ if(!compiled)
+ throw invalid_operation("Compiler::get_stage_glsl");
for(list<Stage>::iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
if(i->type==stage_type)
return Formatter().apply(*i);
const map<string, unsigned> &Compiler::get_vertex_attributes() const
{
+ if(!compiled)
+ throw invalid_operation("Compiler::get_vertex_attributes");
for(list<Stage>::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
if(i->type==Stage::VERTEX)
return i->locations;
const map<string, unsigned> &Compiler::get_fragment_outputs() const
{
+ if(!compiled)
+ throw invalid_operation("Compiler::get_fragment_outputs");
for(list<Stage>::const_iterator i=module->stages.begin(); i!=module->stages.end(); ++i)
if(i->type==Stage::FRAGMENT)
return i->locations;
bool Compiler::validate(Stage &stage)
{
- TypeValidator().apply(stage);
DeclarationValidator().apply(stage);
+ IdentifierValidator().apply(stage);
ReferenceValidator().apply(stage);
ExpressionValidator().apply(stage);