Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Static Public Member Functions | Static Private Member Functions
omni::visual::ShaderCompiler Class Reference

Adds #include functionality to shader source code Compiles source code file with included files or compiles a shader. More...

#include <Shader.h>

Static Public Member Functions

static QString compile (QString const &_sourceFile)
 

Static Private Member Functions

static QString compileRecursive (QString const &_sourceFile, std::set< QString > &_includedFiles)
 
static QString parseIncludeLine (QString const &_baseDir, QString const &_line)
 Parses filename from the #include macro. More...
 

Detailed Description

Adds #include functionality to shader source code Compiles source code file with included files or compiles a shader.

Member Function Documentation

QString omni::visual::ShaderCompiler::compile ( QString const &  _sourceFile)
static
75  {
76  std::set<QString> _includedFiles;
77  return compileRecursive(_sourceFile,_includedFiles);
78  }
static QString compileRecursive(QString const &_sourceFile, std::set< QString > &_includedFiles)
Definition: Shader.cpp:80
QString omni::visual::ShaderCompiler::compileRecursive ( QString const &  _sourceFile,
std::set< QString > &  _includedFiles 
)
staticprivate
80  {
81  if (_includedFiles.count(_sourceFile) > 0) return QString();
82 
83  QFile _f(_sourceFile);
84  _includedFiles.insert(_sourceFile);
85 
86  QString _outputFile;
87 
88  if (_f.open(QIODevice::ReadOnly))
89  {
90  QTextStream in(&_f);
91  while (!in.atEnd())
92  {
93  QString _line = in.readLine().trimmed();
94  if (_line.startsWith("#include")) {
95  // Handle include
96  auto _includedFilename = parseIncludeLine("",_line);
97  _outputFile += compileRecursive(_includedFilename,_includedFiles);
98  } else {
99  _outputFile += _line + '\n';
100  }
101  }
102  _f.close();
103  }
104  return _outputFile;
105  }
static QString compileRecursive(QString const &_sourceFile, std::set< QString > &_includedFiles)
Definition: Shader.cpp:80
static QString parseIncludeLine(QString const &_baseDir, QString const &_line)
Parses filename from the #include macro.
Definition: Shader.cpp:107
QString omni::visual::ShaderCompiler::parseIncludeLine ( QString const &  _baseDir,
QString const &  _line 
)
staticprivate

Parses filename from the #include macro.

107  {
108  QString _file = _line;
109  _file = _file.remove("#include").trimmed();
110  if (_file.isEmpty()) return QString();
111 
112  int _separatorBegin = 0;
113  for (; _separatorBegin < _file.length(); ++_separatorBegin) {
114  if (_file[_separatorBegin] == '"' || _file[_separatorBegin] == '<') break;
115  }
116  int _separatorEnd = _separatorBegin + 1;
117  bool _haveSep = false;
118 
119  for (; _separatorEnd < _file.length(); ++_separatorEnd) {
120  auto _sep = _file[_separatorBegin];
121  if ((_sep == '"' && _file[_separatorEnd] == '"') ||
122  (_sep == '<' && _file[_separatorEnd] == '>')) {
123  _haveSep = true;
124  break;
125  }
126  }
127 
128 
129  if (!_haveSep) return QString();
130  _separatorBegin += 1;
131  _file = _file.remove(0,_separatorBegin);
132  _file.truncate(_separatorEnd - _separatorBegin);
133  return _file.trimmed();
134  }

The documentation for this class was generated from the following files: