BufferCollection cleanup + destringviewified

This commit is contained in:
Simon Lübeß
2021-02-12 12:00:07 +01:00
parent 08026eaf02
commit 1f33949be2
+13 -52
View File
@@ -5,11 +5,11 @@ namespace GlitchyEngine.Renderer
{ {
public class BufferCollection public class BufferCollection
{ {
typealias BufferEntry = (String Name, int Index, Buffer Buffer);//, bool OwnsBuffer typealias BufferEntry = (String Name, int Index, Buffer Buffer);
List<BufferEntry> _buffers ~ DeleteBufferEntries!(_); List<BufferEntry> _buffers ~ DeleteBufferEntries!(_);
Dictionary<StringView, Buffer> _strToBuf ~ delete _; //delete:append _; Dictionary<String, Buffer> _strToBuf ~ delete _; //delete:append _;
Dictionary<int, Buffer> _idxToBuf ~ delete _; //delete:append _; Dictionary<int, Buffer> _idxToBuf ~ delete _; //delete:append _;
[AllowAppend] [AllowAppend]
@@ -17,7 +17,7 @@ namespace GlitchyEngine.Renderer
{ {
// Todo: append allocate as soon as it's fixed // Todo: append allocate as soon as it's fixed
let buffers = new List<BufferEntry>(); let buffers = new List<BufferEntry>();
let strToBuf = new Dictionary<StringView, Buffer>(); let strToBuf = new Dictionary<String, Buffer>();
let idxToBuf = new Dictionary<int, Buffer>(); let idxToBuf = new Dictionary<int, Buffer>();
_buffers = buffers; _buffers = buffers;
@@ -40,15 +40,14 @@ namespace GlitchyEngine.Renderer
} }
public Buffer this[int idx] => _idxToBuf[idx]; public Buffer this[int idx] => _idxToBuf[idx];
public Buffer this[StringView name] => _strToBuf[name]; public Buffer this[String name] => _strToBuf[name];
/** /**
* Replaces the buffer with the given index. * Replaces the buffer with the given index.
* @param idx The index (shader buffer register) of the buffer to replace. * @param idx The index (shader buffer register) of the buffer to replace.
* @param buffer The new buffer. * @param buffer The new buffer.
* @param If set to true, the Collection will take ownership of the buffer; if false, the ownership will remain with the caller.
*/ */
public void ReplaceBuffer(int idx, Buffer buffer)//, bool passOwnership = false public void ReplaceBuffer(int idx, Buffer buffer)
{ {
if(_idxToBuf.TryGetValue(idx, let oldBuffer)) if(_idxToBuf.TryGetValue(idx, let oldBuffer))
{ {
@@ -59,12 +58,9 @@ namespace GlitchyEngine.Renderer
Log.EngineLogger.Assert(idx == bufferDesc.Index); Log.EngineLogger.Assert(idx == bufferDesc.Index);
oldBuffer.ReleaseRef(); oldBuffer.ReleaseRef();
//if(bufferDesc.OwnsBuffer)
// delete bufferDesc.Buffer;
buffer.AddRef(); buffer.AddRef();
bufferDesc.Buffer = buffer; bufferDesc.Buffer = buffer;
//bufferDesc.OwnsBuffer = passOwnership;
_strToBuf[bufferDesc.Name] = buffer; _strToBuf[bufferDesc.Name] = buffer;
_idxToBuf[bufferDesc.Index] = buffer; _idxToBuf[bufferDesc.Index] = buffer;
@@ -79,9 +75,9 @@ namespace GlitchyEngine.Renderer
* Replaces the buffer with the given name. * Replaces the buffer with the given name.
* @param name The name of the buffer to replace. * @param name The name of the buffer to replace.
* @param buffer The new buffer. * @param buffer The new buffer.
* @param If set to true, the Collection will take ownership of the buffer; if false, the ownership will remain with the caller. * @returns True, if the buffer was replaced successfully; false, otherwise.
*/ */
public void ReplaceBuffer(StringView name, Buffer buffer) // , bool passOwnership = false public bool TryReplaceBuffer(String name, Buffer buffer)
{ {
if(_strToBuf.TryGetValue(name, let oldBuffer)) if(_strToBuf.TryGetValue(name, let oldBuffer))
{ {
@@ -89,48 +85,13 @@ namespace GlitchyEngine.Renderer
ref BufferEntry bufferDesc = ref _buffers[index]; ref BufferEntry bufferDesc = ref _buffers[index];
Log.EngineLogger.Assert(name == bufferDesc.Name); // If the names don't match something went spectactularly wrong.
Log.EngineLogger.AssertDebug(name == bufferDesc.Name);
oldBuffer.ReleaseRef(); oldBuffer?.ReleaseRef();
//if(bufferDesc.OwnsBuffer)
// delete bufferDesc.Buffer;
buffer.AddRef(); buffer?.AddRef();
bufferDesc.Buffer = buffer; bufferDesc.Buffer = buffer;
//bufferDesc.OwnsBuffer = passOwnership;
_strToBuf[bufferDesc.Name] = buffer;
_idxToBuf[bufferDesc.Index] = buffer;
}
else
{
Log.EngineLogger.Assert(false, "No buffer with the given name.");
}
}
/**
* Replaces the buffer with the given name.
* @param name The name of the buffer to replace.
* @param buffer The new buffer.
* @param If set to true, the Collection will take ownership of the buffer; if false, the ownership will remain with the caller.
*/
public bool TryReplaceBuffer(StringView name, Buffer buffer) // , bool passOwnership = false
{
if(_strToBuf.TryGetValue(name, let oldBuffer))
{
int index = GetIndexOfBuffer(oldBuffer);
ref BufferEntry bufferDesc = ref _buffers[index];
Log.EngineLogger.Assert(name == bufferDesc.Name);
//if(bufferDesc.OwnsBuffer)
// delete bufferDesc.Buffer;
oldBuffer.ReleaseRef();
buffer.AddRef();
bufferDesc.Buffer = buffer;
//bufferDesc.OwnsBuffer = passOwnership;
_strToBuf[bufferDesc.Name] = buffer; _strToBuf[bufferDesc.Name] = buffer;
_idxToBuf[bufferDesc.Index] = buffer; _idxToBuf[bufferDesc.Index] = buffer;
@@ -143,10 +104,10 @@ namespace GlitchyEngine.Renderer
} }
} }
public void Add(int index, StringView name, Buffer buffer) //, bool passOwnership = false public void Add(int index, String name, Buffer buffer)
{ {
String nameStr = new String(name); String nameStr = new String(name);
BufferEntry entry = (nameStr, index, buffer); //, passOwnership BufferEntry entry = (nameStr, index, buffer);
buffer.AddRef(); buffer.AddRef();
_buffers.Add(entry); _buffers.Add(entry);