Merge branch 'Muzz-Triplanar-Features' into 1.10
This commit is contained in:
34
Source/Engine/Visject/ShaderStringBuilder.cpp
Normal file
34
Source/Engine/Visject/ShaderStringBuilder.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
|
||||
|
||||
#include "ShaderStringBuilder.h"
|
||||
|
||||
ShaderStringBuilder& ShaderStringBuilder::Code(const Char* shaderCode)
|
||||
{
|
||||
_code = shaderCode;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ShaderStringBuilder& ShaderStringBuilder::Replace(const String& key, const String& value)
|
||||
{
|
||||
_replacements.Add(Pair<String, String>(key, value));
|
||||
return *this;
|
||||
}
|
||||
|
||||
String ShaderStringBuilder::Build() const
|
||||
{
|
||||
String result = _code;
|
||||
for (const auto& replacement : _replacements)
|
||||
{
|
||||
const auto& key = replacement.First;
|
||||
const auto& value = replacement.Second;
|
||||
int32 position = 0;
|
||||
while ((position = result.Find(key)) != -1)
|
||||
{
|
||||
result = String::Format(TEXT("{0}{1}{2}"),
|
||||
StringView(result.Get(), position),
|
||||
value,
|
||||
StringView(result.Get() + position + key.Length()));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
21
Source/Engine/Visject/ShaderStringBuilder.h
Normal file
21
Source/Engine/Visject/ShaderStringBuilder.h
Normal file
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Engine/Core/Types/Pair.h"
|
||||
#include "Engine/Core/Types/String.h"
|
||||
#include "Engine/Core/Types/StringView.h"
|
||||
#include "Engine/Core/Collections/Array.h"
|
||||
|
||||
// Helper utility for shader source code formatting.
|
||||
class ShaderStringBuilder
|
||||
{
|
||||
private:
|
||||
String _code;
|
||||
Array<Pair<String, String>> _replacements;
|
||||
|
||||
public:
|
||||
ShaderStringBuilder& Code(const Char* shaderCode);
|
||||
ShaderStringBuilder& Replace(const String& key, const String& value);
|
||||
String Build() const;
|
||||
};
|
||||
Reference in New Issue
Block a user