本文整理汇总了C++中ShaderSource::assembled_code方法的典型用法代码示例。如果您正苦于以下问题:C++ ShaderSource::assembled_code方法的具体用法?C++ ShaderSource::assembled_code怎么用?C++ ShaderSource::assembled_code使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ShaderSource
的用法示例。
在下文中一共展示了ShaderSource::assembled_code方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: prefix
void
UberShaderStreamer<T>::
stream_source(ShaderSource &dst, const std::string &in_prefix,
const ShaderSource &shader)
{
/* This terribly hack is because GLES specfication mandates
* for GLSL in GLES to not support token pasting (##) in the
* pre-processor. Many GLES drivers support it anyways, but
* Mesa does not. Sighs. So we emulate the token pasting
* for the FASTUIDRAW_LOCAL() macro.
*/
using namespace fastuidraw;
std::string src, needle;
std::string::size_type pos, last_pos;
std::string prefix(in_prefix + "_local_");
needle = "FASTUIDRAW_LOCAL";
src = shader.assembled_code(true);
/* HUNT for FASTUIDRAW_LOCAL(X) anywhere in the code and expand
* it. NOTE: this is NOT robust at all as it is not a real
* pre-processor, just a hack. It will fail if the macro
* invocation is spread across multiple lines or if the agument
* was a macro itself that needs to expanded by the pre-processor.
*/
for (last_pos = 0, pos = src.find(needle); pos != std::string::npos; last_pos = pos + 1, pos = src.find(needle, pos + 1))
{
std::string::size_type open_pos, close_pos;
/* stream up to pos */
if (pos > last_pos)
{
dst << src.substr(last_pos, pos - last_pos);
}
/* find the first open and close-parentesis pair after pos. */
open_pos = src.find('(', pos);
close_pos = src.find(')', pos);
if (open_pos != std::string::npos
&& close_pos != std::string::npos
&& open_pos < close_pos)
{
std::string tmp;
tmp = src.substr(open_pos + 1, close_pos - open_pos - 1);
// trim the string of white spaces.
tmp.erase(0, tmp.find_first_not_of(" \t"));
tmp.erase(tmp.find_last_not_of(" \t") + 1);
dst << prefix << tmp;
pos = close_pos;
}
}
dst << src.substr(last_pos)
<< "\n";
}