mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Allow resetting material variable
This commit is contained in:
@@ -248,6 +248,18 @@ public class Material : Asset
|
|||||||
return .Ok;
|
return .Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Result<void, SetVariableError> ResetVariable(StringView name)
|
||||||
|
{
|
||||||
|
if(!_variables.TryGetValue(name, let variable))
|
||||||
|
{
|
||||||
|
return .Err(.VariableNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
variable.IsUnset = true;
|
||||||
|
|
||||||
|
return .Ok;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetVariable(StringView name, bool value) => SetVariable!(name, value);
|
public void SetVariable(StringView name, bool value) => SetVariable!(name, value);
|
||||||
public void SetVariable(StringView name, bool2 value) => SetVariable!(name, value);
|
public void SetVariable(StringView name, bool2 value) => SetVariable!(name, value);
|
||||||
public void SetVariable(StringView name, bool3 value) => SetVariable!(name, value);
|
public void SetVariable(StringView name, bool3 value) => SetVariable!(name, value);
|
||||||
|
|||||||
@@ -1059,11 +1059,13 @@ static class ScriptGlue
|
|||||||
|
|
||||||
if (!material.IsRuntimeInstance)
|
if (!material.IsRuntimeInstance)
|
||||||
{
|
{
|
||||||
material = new Material(material, true);
|
using (material = new Material(material, true))
|
||||||
|
{
|
||||||
material.Identifier = scope $"(Instance) {material.Identifier}";
|
material.Identifier = scope $"(Instance) {material.Identifier}";
|
||||||
Content.ManageAsset(material);
|
Content.ManageAsset(material);
|
||||||
spriteRenderer.Material = material.Handle;
|
spriteRenderer.Material = material.Handle;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
assetId = spriteRenderer.Material;
|
assetId = spriteRenderer.Material;
|
||||||
}
|
}
|
||||||
@@ -1178,11 +1180,13 @@ static class ScriptGlue
|
|||||||
|
|
||||||
if (!material.IsRuntimeInstance)
|
if (!material.IsRuntimeInstance)
|
||||||
{
|
{
|
||||||
material = new Material(material, true);
|
using (material = new Material(material, true))
|
||||||
|
{
|
||||||
material.Identifier = scope $"(Instance) {material.Identifier}";
|
material.Identifier = scope $"(Instance) {material.Identifier}";
|
||||||
Content.ManageAsset(material);
|
Content.ManageAsset(material);
|
||||||
meshRenderer.Material = material.Handle;
|
meshRenderer.Material = material.Handle;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
assetId = meshRenderer.Material;
|
assetId = meshRenderer.Material;
|
||||||
}
|
}
|
||||||
@@ -1420,11 +1424,22 @@ static class ScriptGlue
|
|||||||
Material material = GetAssetOrThrow!<Material>(assetHandle);
|
Material material = GetAssetOrThrow!<Material>(assetHandle);
|
||||||
|
|
||||||
char8* rawVariableName = Mono.mono_string_to_utf8(managedVariableName);
|
char8* rawVariableName = Mono.mono_string_to_utf8(managedVariableName);
|
||||||
defer Mono.mono_free(rawVariableName);
|
|
||||||
|
|
||||||
StringView variableName = StringView(rawVariableName);
|
material.[Friend]SetVariableRaw(StringView(rawVariableName), elementType, rows, columns , arrayLength, Span<uint8>(rawData, dataLength));
|
||||||
|
|
||||||
material.[Friend]SetVariableRaw(variableName, elementType, rows, columns , arrayLength, Span<uint8>(rawData, dataLength));
|
Mono.mono_free(rawVariableName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[RegisterCall("ScriptGlue::Material_ResetVariable")]
|
||||||
|
static void Material_ResetVariable(AssetHandle assetHandle, MonoString* managedVariableName)
|
||||||
|
{
|
||||||
|
Material material = GetAssetOrThrow!<Material>(assetHandle);
|
||||||
|
|
||||||
|
char8* rawVariableName = Mono.mono_string_to_utf8(managedVariableName);
|
||||||
|
|
||||||
|
material.ResetVariable(StringView(rawVariableName));
|
||||||
|
|
||||||
|
Mono.mono_free(rawVariableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -15,4 +15,9 @@ public class Material : Asset
|
|||||||
ScriptGlue.Material_SetVariable(_uuid, name, ScriptGlue.ShaderVariableType.Float, 1, 4, 1, &value, sizeof(float4));
|
ScriptGlue.Material_SetVariable(_uuid, name, ScriptGlue.ShaderVariableType.Float, 1, 4, 1, &value, sizeof(float4));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResetVariable(string name)
|
||||||
|
{
|
||||||
|
ScriptGlue.Material_ResetVariable(_uuid, name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,7 +399,10 @@ internal static class ScriptGlue
|
|||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
internal static extern unsafe bool Material_SetVariable(UUID assetId, String variableName, ShaderVariableType elementType, int rows, int columns, int arrayLength, void* rawData, int dataLength);
|
internal static extern unsafe bool Material_SetVariable(UUID assetId, string variableName, ShaderVariableType elementType, int rows, int columns, int arrayLength, void* rawData, int dataLength);
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||||
|
internal static extern bool Material_ResetVariable(UUID assetId, string variableName);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user