mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Fixed Textures in Materials
This commit is contained in:
@@ -84,11 +84,10 @@ class MaterialAssetPropertiesEditor : AssetPropertiesEditor
|
|||||||
{
|
{
|
||||||
StringView path = .((char8*)payload.Data, (int)payload.DataSize);
|
StringView path = .((char8*)payload.Data, (int)payload.DataSize);
|
||||||
|
|
||||||
AssetHandle<Texture2D> newTexture = Content.LoadAsset(path);//new Texture2D(path, true))
|
AssetHandle<Texture2D> newTexture = Content.LoadAsset(path);
|
||||||
|
|
||||||
newTexture.Get().SamplerState = SamplerStateManager.AnisotropicWrap;
|
newTexture.Get().SamplerState = SamplerStateManager.AnisotropicWrap;
|
||||||
material.SetTexture(texture.key, newTexture);
|
material.SetTexture(texture.key, newTexture.Cast<Texture>());
|
||||||
// TODO!!!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.EndDragDropTarget();
|
ImGui.EndDragDropTarget();
|
||||||
@@ -98,7 +97,6 @@ class MaterialAssetPropertiesEditor : AssetPropertiesEditor
|
|||||||
|
|
||||||
private void ShowVariables(Material material, Effect effect)
|
private void ShowVariables(Material material, Effect effect)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (let (name, arguments) in effect.[Friend]_variableDescriptions)
|
for (let (name, arguments) in effect.[Friend]_variableDescriptions)
|
||||||
{
|
{
|
||||||
let variable = effect.Variables[name];
|
let variable = effect.Variables[name];
|
||||||
@@ -350,9 +348,9 @@ class MaterialAssetLoader : IAssetLoader, IAssetSaver //, IReloadingAssetLoader
|
|||||||
|
|
||||||
for (let (slotName, textureIdentifier) in materialFile.Textures)
|
for (let (slotName, textureIdentifier) in materialFile.Textures)
|
||||||
{
|
{
|
||||||
Texture texture = Content.GetAsset<Texture>(contentManager.LoadAsset(textureIdentifier), contentManager);
|
AssetHandle<Texture> texture = contentManager.LoadAsset(textureIdentifier);
|
||||||
|
|
||||||
if (texture == null)
|
if (texture.IsInvalid)
|
||||||
{
|
{
|
||||||
Log.EngineLogger.Error($"Failed to load texture \"{textureIdentifier}\".");
|
Log.EngineLogger.Error($"Failed to load texture \"{textureIdentifier}\".");
|
||||||
// TODO: LoadAsset should return an error texture.
|
// TODO: LoadAsset should return an error texture.
|
||||||
@@ -408,7 +406,9 @@ class MaterialAssetLoader : IAssetLoader, IAssetSaver //, IReloadingAssetLoader
|
|||||||
|
|
||||||
for (let (slotName, texture) in material.[Friend]_textures)
|
for (let (slotName, texture) in material.[Friend]_textures)
|
||||||
{
|
{
|
||||||
materialFile.Textures.Add(new String(slotName), new String(texture?.Identifier ?? ""));
|
Texture textureAsset = texture.Get();
|
||||||
|
|
||||||
|
materialFile.Textures.Add(new String(slotName), new String(textureAsset?.Identifier ?? ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
Effect effect = material.Effect;
|
Effect effect = material.Effect;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ class PropertiesWindow : EditorWindow
|
|||||||
private append String _selectedFileName = .();
|
private append String _selectedFileName = .();
|
||||||
|
|
||||||
private AssetHandle _currentAssetHandle;
|
private AssetHandle _currentAssetHandle;
|
||||||
//private Asset _currentAsset;
|
|
||||||
|
|
||||||
public this(Editor editor)
|
public this(Editor editor)
|
||||||
{
|
{
|
||||||
@@ -83,14 +82,6 @@ class PropertiesWindow : EditorWindow
|
|||||||
_currentAssetHandle = _editor.ContentManager.LoadAsset(assetFile.Identifier);
|
_currentAssetHandle = _editor.ContentManager.LoadAsset(assetFile.Identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (asset != _currentAsset)
|
|
||||||
{
|
|
||||||
_currentAsset?.ReleaseRef();
|
|
||||||
_currentAsset = asset;
|
|
||||||
_currentAsset?.AddRef();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: allow changing AssetLoader
|
// TODO: allow changing AssetLoader
|
||||||
// assetFile.AssetConfig.AssetLoade
|
// assetFile.AssetConfig.AssetLoade
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ struct AssetHandle : IHashable
|
|||||||
/// Defines an asset that is invalid.
|
/// Defines an asset that is invalid.
|
||||||
public const AssetHandle Invalid = .(UUID(0xAAAA'AAAA'AAAA'AAAA));
|
public const AssetHandle Invalid = .(UUID(0xAAAA'AAAA'AAAA'AAAA));
|
||||||
|
|
||||||
|
public bool IsValid => this == .Invalid;
|
||||||
|
public bool IsInvalid => !IsValid;
|
||||||
|
|
||||||
/// Create a new random AssetHandle
|
/// Create a new random AssetHandle
|
||||||
public this()
|
public this()
|
||||||
{
|
{
|
||||||
@@ -46,6 +49,9 @@ struct AssetHandle<T> where T : Asset
|
|||||||
|
|
||||||
public const Self Invalid = .();
|
public const Self Invalid = .();
|
||||||
|
|
||||||
|
public bool IsValid => this == .Invalid;
|
||||||
|
public bool IsInvalid => !IsValid;
|
||||||
|
|
||||||
public this(AssetHandle handle, IContentManager contentManager = null)
|
public this(AssetHandle handle, IContentManager contentManager = null)
|
||||||
{
|
{
|
||||||
_handle = handle;
|
_handle = handle;
|
||||||
@@ -81,20 +87,9 @@ struct AssetHandle<T> where T : Asset
|
|||||||
return handle.Get();
|
return handle.Get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public T Get(IContentManager contentManager = null) mut
|
public T Get(IContentManager contentManager = null)
|
||||||
{
|
{
|
||||||
// We only care whether we are in a different frame -> we only compare the lower 8 bits.
|
return Content.GetAsset<T>(_handle, contentManager == null ? _contentManager : contentManager);
|
||||||
//uint8 actualFrame = (uint8)Application.Get().GameTime.FrameCount;
|
|
||||||
//var actualActualFrame = Application.Get().GameTime.FrameCount;
|
|
||||||
|
|
||||||
//if (actualFrame != _currentFrame)
|
|
||||||
{
|
|
||||||
_asset = Content.GetAsset<T>(_handle, contentManager == null ? _contentManager : contentManager);
|
|
||||||
//_currentFrame = actualFrame;
|
|
||||||
//_actualCurrentFrame = Application.Get().GameTime.FrameCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _asset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Comptime, OnCompile(.TypeInit)]
|
[Comptime, OnCompile(.TypeInit)]
|
||||||
@@ -250,4 +245,17 @@ struct AssetHandle<T> where T : Asset
|
|||||||
Compiler.EmitTypeBody(typeof(Self), code);
|
Compiler.EmitTypeBody(typeof(Self), code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AssetHandle<NewT> Cast<NewT>()
|
||||||
|
where NewT : Asset
|
||||||
|
where T : NewT
|
||||||
|
{
|
||||||
|
return AssetHandle<NewT>(this._handle, this._contentManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Cast up?
|
||||||
|
public AssetHandle<NewT> Cast<NewT>() where NewT : T
|
||||||
|
{
|
||||||
|
return AssetHandle<NewT>(this._handle, this._contentManager);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class Material : Asset
|
|||||||
|
|
||||||
private uint8[] _rawVariables ~ delete _;
|
private uint8[] _rawVariables ~ delete _;
|
||||||
|
|
||||||
private Dictionary<String, Texture> _textures = new .();
|
private Dictionary<String, AssetHandle<Texture>> _textures = new .() ~ delete _;
|
||||||
|
|
||||||
private Dictionary<String, (uint32 Offset, BufferVariable Variable)> _variables = new .() ~ delete _;
|
private Dictionary<String, (uint32 Offset, BufferVariable Variable)> _variables = new .() ~ delete _;
|
||||||
|
|
||||||
@@ -29,25 +29,17 @@ public class Material : Asset
|
|||||||
// Get texture slots from effect
|
// Get texture slots from effect
|
||||||
for(let (name, entry) in _effect.Textures)
|
for(let (name, entry) in _effect.Textures)
|
||||||
{
|
{
|
||||||
// TODO: Do we want to be able to define textures in the shader?
|
// TODO: We need to be able to define default textures in the shader.
|
||||||
/*var texture = entry.BoundTexture;
|
// At least things like "Black", "White", "Normal"
|
||||||
texture.AddRef();*/
|
// At best whole paths. Shouldn't be that hard to do...
|
||||||
|
/*var texture = entry.BoundTexture;*/
|
||||||
|
|
||||||
_textures.Add(name, null);
|
_textures.Add(name, .Invalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
InitRawData();
|
InitRawData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ~this()
|
|
||||||
{
|
|
||||||
for(let (name, texture) in _textures)
|
|
||||||
{
|
|
||||||
texture?.ReleaseRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _textures;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @brief Initializes the raw data array for the variables.
|
/** @brief Initializes the raw data array for the variables.
|
||||||
*/
|
*/
|
||||||
@@ -90,13 +82,13 @@ public class Material : Asset
|
|||||||
* @param name The name of the texture to set.
|
* @param name The name of the texture to set.
|
||||||
* @param texture The texture to bind to the effect.
|
* @param texture The texture to bind to the effect.
|
||||||
*/
|
*/
|
||||||
public void SetTexture(String name, Texture texture)
|
public void SetTexture(String name, AssetHandle<Texture> texture)
|
||||||
{
|
{
|
||||||
if(_textures.TryGetValue(name, var entry))
|
if(_textures.TryGetValue(name, var entry))
|
||||||
{
|
{
|
||||||
entry?.ReleaseRef();
|
//entry?.ReleaseRef();
|
||||||
_textures[name] = texture;
|
_textures[name] = texture;
|
||||||
texture?.AddRef();
|
//texture?.AddRef();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user