Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit 5f72759e authored by Christian Schulte zu Berge's avatar Christian Schulte zu Berge
Browse files

Extended tgt::ShaderManager to support both global GLSL version and per-shader version setting.

parent 08793132
......@@ -104,7 +104,7 @@ namespace campvis {
tgt::GLContextScopedLock lock(_localContext);
tgt::initGL(featureset);
ShdrMgr.setGlobalHeader("#version 330\n");
ShdrMgr.setDefaultGlslVersion("330");
LGL_ERROR;
// ensure matching OpenGL specs
......
......@@ -135,9 +135,20 @@ void ShaderPreprocessor::parse() {
result_.clear();
includedFilenames_.clear();
outputComment("BEGIN GLOBAL HEADER");
parsePart(ShdrMgr.getGlobalHeader(), "GLOBAL HEADER");
outputComment("END GLOBAL HEADER");
if (! shd_->customGlslVersion_.empty()) {
parsePart("#version " + shd_->customGlslVersion_ + "\n", "Custom per-shader version");
}
else {
if (! ShdrMgr.getDefaultGlslVersion().empty()) {
parsePart("#version " + ShdrMgr.getDefaultGlslVersion() + "\n", "Global version");
}
}
if (! ShdrMgr.getGlobalHeader().empty()) {
outputComment("BEGIN GLOBAL HEADER");
parsePart(ShdrMgr.getGlobalHeader(), "GLOBAL HEADER");
outputComment("END GLOBAL HEADER");
}
if (!shd_->header_.empty()) {
outputComment("BEGIN HEADER");
......@@ -600,7 +611,7 @@ void Shader::load(const string& filename, const string& customHeader) throw (Exc
}
void Shader::loadSeparate(const string& vert_filename, const string& geom_filename,
const string& frag_filename, const string& customHeader)
const string& frag_filename, const string& customHeader, const std::string& customGlslVersion)
throw (Exception)
{
ShaderObject* frag = 0;
......@@ -613,6 +624,9 @@ void Shader::loadSeparate(const string& vert_filename, const string& geom_filena
if (!customHeader.empty()) {
vert->setHeader(customHeader);
}
if (!customGlslVersion.empty()) {
vert->setCustomGlslVersion(customGlslVersion);
}
try {
vert->loadSourceFromFile(vert_filename);
......@@ -639,6 +653,9 @@ void Shader::loadSeparate(const string& vert_filename, const string& geom_filena
if (!customHeader.empty()) {
geom->setHeader(customHeader);
}
if (!customGlslVersion.empty()) {
geom->setCustomGlslVersion(customGlslVersion);
}
try {
geom->loadSourceFromFile(geom_filename);
......@@ -666,6 +683,9 @@ void Shader::loadSeparate(const string& vert_filename, const string& geom_filena
if (!customHeader.empty()) {
frag->setHeader(customHeader);
}
if (!customGlslVersion.empty()) {
frag->setCustomGlslVersion(customGlslVersion);
}
try {
frag->loadSourceFromFile(frag_filename);
......@@ -1289,22 +1309,22 @@ ShaderManager::ShaderManager()
{}
Shader* ShaderManager::load(const string& filename, const string& customHeader,
bool activate)
bool activate, const std::string& customGlslVersion /*= ""*/)
throw (Exception)
{
return loadSeparate(filename + ".vert", filename + ".frag", customHeader, activate);
return loadSeparate(filename + ".vert", filename + ".frag", customHeader, activate, customGlslVersion);
}
Shader* ShaderManager::loadSeparate(const string& vert_filename, const string& frag_filename,
const string& customHeader, bool activate)
const string& customHeader, bool activate, const std::string& customGlslVersion /*= ""*/)
throw (Exception)
{
return loadSeparate(vert_filename, "", frag_filename, customHeader, activate);
return loadSeparate(vert_filename, "", frag_filename, customHeader, activate, customGlslVersion);
}
Shader* ShaderManager::loadSeparate(const string& vert_filename, const string& geom_filename,
const string& frag_filename,
const string& customHeader, bool activate)
const string& customHeader, bool activate, const std::string& customGlslVersion /*= ""*/)
throw (Exception)
{
LDEBUG("Loading files " << vert_filename << " and " << frag_filename);
......
......@@ -118,6 +118,10 @@ public:
*/
void setHeader(const std::string& h);
void setCustomGlslVersion(const std::string& version) {
customGlslVersion_ = version;
}
ShaderType getType() { return shaderType_; }
void setSource(std::string source) {
......@@ -160,6 +164,7 @@ protected:
std::string source_;
std::string unparsedSource_;
std::string header_;
std::string customGlslVersion_; ///< Optional custom GLSL version, will override global GLSL version if set
bool isCompiled_;
GLint inputType_;
GLint outputType_;
......@@ -385,7 +390,7 @@ protected:
* @throw Exception if loading failed
*/
void loadSeparate(const std::string& vertFilename, const std::string& geomFilename,
const std::string& fragFilename, const std::string& customHeader = "")
const std::string& fragFilename, const std::string& customHeader = "", const std::string& customGlslVersion = "")
throw (Exception);
typedef std::list<ShaderObject*> ShaderObjects;
......@@ -430,7 +435,7 @@ public:
* @throw Exception if loading failed
*/
Shader* load(const std::string& filename, const std::string& customHeader = "",
bool activate = true)
bool activate = true, const std::string& customGlslVersion = "")
throw (Exception);
/**
......@@ -447,7 +452,7 @@ public:
* @throw Exception if loading failed
*/
Shader* loadSeparate(const std::string& vertFilename, const std::string& fragFilename,
const std::string& customHeader = "", bool activate = true)
const std::string& customHeader = "", bool activate = true, const std::string& customGlslVersion = "")
throw (Exception);
/**
......@@ -465,7 +470,7 @@ public:
*/
Shader* loadSeparate(const std::string& vertFilename, const std::string& geomFilename,
const std::string& fragFilename,
const std::string& customHeader, bool activate = true)
const std::string& customHeader, bool activate = true, const std::string& customGlslVersion = "")
throw(Exception);
bool rebuildAllShadersFromFile();
......@@ -486,7 +491,25 @@ public:
return globalHeader_;
}
/**
* Sets the default GLSL version string, will be added to the '#version' pragma
* at the beginning of each shader.
* \param version Default GLSL version string.
*/
void setDefaultGlslVersion(const std::string& version) {
defaultGlslVersion_ = version;
}
/**
* Gets the default GLSL version string, will be added to the '#version' pragma
* at the beginning of each shader.
*/
const std::string& getDefaultGlslVersion() const {
return defaultGlslVersion_;
}
protected:
std::string defaultGlslVersion_; ///< Default GLSL version string, will be added to the '#version' pragma at the beginning of each shader
std::string globalHeader_; ///< Global header that will be added to all shaders.
static const std::string loggerCat_;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment