The next update adds a new useful feature to ReShade's shader language: namespaces. Developers knowing C++, C# and similar languages are familar with the concept already. It basically allows you to encapsulate variables/functions with the same name in different naming spaces and then access them.
// global namespace
float4 Func() { return float4(1, 0, 0, 1); /* red */ }
namespace NS1
{
// NS1 namespace
float4 Func() { return float4(0, 1, 0, 1); /* green */ }
namespace NS2
{
// NS2 namespace
float4 Func() { return float4(0, 0, 1, 1); /* blue */ }
}
float4 FuncCaller()
{
float4 color;
color = Func(); // color is green, since best match is Func in the current NS1 namespace
color = NS2::Func(); // color is blue, since we access Func from the NS2 namespace here
color = NS1::NS2::Func(); // color is blue, same as the previous, we just specify the full name here
// prefixing with "::" accesses the global namespace
color = ::Func(); // color is red, since this accesses Func in the global namespace
color = ::NS1::Func(); // color is green, because we access Func in the NS1 namespace here
return color;
}
}