Esempio n. 1
0
	OGL4ShaderPtr OGL4ShaderCompiler::CreateShaderFromFile(SHADER_TYPE type, const boost::filesystem::path& path, const std::string& entry)
	{
	
		std::string source = LoadShaderSource(path.string());
		
		
		if(source == "")
		{
			return OGL4ShaderPtr();
		}
		


		std::vector<IncludeInfo> inc_list;
		IncludeInfo inc;
		inc.file = path;
		inc.lines = GetSourceLines(source);

		inc_list.push_back(inc);
		source = ProcessInclude(path.parent_path(), source, inc_list);
		
		inc_list.push_back(inc);
		inc_list.erase(inc_list.begin());


		source = ClearVersionComment(source);

		return CreateShaderFromSource(type, source, inc_list, entry);


	}
Esempio n. 2
0
void SlicSegment::GetDescription(char *str, sint32 maxsize)
{
	if(m_firstLineNumber < 0) {
		sint32 offset, lastline;
		GetSourceLines(m_firstLineNumber, offset, lastline);
	}

	sprintf(str, "'%s': %s@%d", m_id, m_filename, m_firstLineNumber);
}
Esempio n. 3
0
	std::string OGL4ShaderCompiler::ProcessInclude(const boost::filesystem::path& basePath, const std::string& source, std::vector<IncludeInfo>& inc_list)
	{
		std::vector<IncludeInfo> include_list = ExtractIncludeList(source);

		if(include_list.size() == 0)
		{
			return source;
		}

		std::string ret = "";
		for(size_t i = 0; i < include_list.size(); ++i)
		{
			bool included = false;
			for(auto v : inc_list)
			{
				if((basePath / v.file) == (basePath / include_list[i].file))
				{
					included = true;
					break;
				}
			}

			if(included)
			{
				continue;
			}
			
			std::string inc_source = LoadShaderSource(basePath / include_list[i].file);
			
			include_list[i].lines = GetSourceLines(inc_source);
			
			ret += ProcessInclude(basePath, inc_source, inc_list) + "\n";
			
			inc_list.push_back(include_list[i]);
		}

		ret += source;

		return ret;
	}