mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Start of ContentManager
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using xxHash;
|
||||||
|
|
||||||
|
namespace GlitchyEngine.Content
|
||||||
|
{
|
||||||
|
class ContentId
|
||||||
|
{
|
||||||
|
private readonly String _string;
|
||||||
|
private readonly XXH64_hash _hash;
|
||||||
|
|
||||||
|
public String String => _string;
|
||||||
|
public XXH64_hash Hash => _hash;
|
||||||
|
|
||||||
|
[AllowAppend]
|
||||||
|
public this(StringView id)
|
||||||
|
{
|
||||||
|
String str = append String(id);
|
||||||
|
|
||||||
|
_string = str;
|
||||||
|
|
||||||
|
_hash = xxHash.ComputeHash(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IContentManager
|
||||||
|
{
|
||||||
|
Stream GetFile(String filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ContentManager : IContentManager
|
||||||
|
{
|
||||||
|
private String _contentRoot;
|
||||||
|
|
||||||
|
[AllowAppend]
|
||||||
|
public this(String contentRoot)
|
||||||
|
{
|
||||||
|
String cntRoot = append String(contentRoot);
|
||||||
|
_contentRoot = cntRoot;
|
||||||
|
|
||||||
|
Runtime.Assert(Directory.Exists(contentRoot), "Content root directory doesn't exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stream GetFile(String filename)
|
||||||
|
{
|
||||||
|
String fullpath = scope .(_contentRoot.Length + 1 + filename.Length);
|
||||||
|
Path.InternalCombine(fullpath, _contentRoot, filename);
|
||||||
|
|
||||||
|
FileStream stream = new FileStream();
|
||||||
|
var result = stream.Open(fullpath, .Read, .Read);
|
||||||
|
|
||||||
|
if (result case .Err(let error))
|
||||||
|
{
|
||||||
|
Log.EngineLogger.Error($"Failed to open file \"{fullpath}\". Error: {error}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,12 +78,12 @@ namespace GlitchyEngine.Renderer
|
|||||||
{
|
{
|
||||||
Debug.Profiler.ProfileResourceFunction!();
|
Debug.Profiler.ProfileResourceFunction!();
|
||||||
|
|
||||||
FileStream fs = new FileStream();
|
Stream data = Application.Get().ContentManager.GetFile(_path);
|
||||||
|
defer delete data;
|
||||||
|
|
||||||
fs.Open(_path, .Read);
|
var readResult = data.Read<char8[8]>();
|
||||||
var readResult = fs.Read<char8[8]>();
|
|
||||||
|
|
||||||
delete fs;
|
data.Position = 0;
|
||||||
|
|
||||||
char8[8] magicWord;
|
char8[8] magicWord;
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
|
|
||||||
if (strView.StartsWith(PngMagicWord))
|
if (strView.StartsWith(PngMagicWord))
|
||||||
{
|
{
|
||||||
LoadPng();
|
LoadPng(data);
|
||||||
}
|
}
|
||||||
else if (strView.StartsWith(DdsMagicWord))
|
else if (strView.StartsWith(DdsMagicWord))
|
||||||
{
|
{
|
||||||
@@ -106,14 +106,23 @@ namespace GlitchyEngine.Renderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void LoadPng()
|
protected void LoadPng(Stream stream)
|
||||||
{
|
{
|
||||||
Debug.Profiler.ProfileResourceFunction!();
|
Debug.Profiler.ProfileResourceFunction!();
|
||||||
|
|
||||||
|
uint8[] pngData = new:ScopedAlloc! uint8[stream.Length];
|
||||||
|
|
||||||
|
var result = stream.TryRead(pngData);
|
||||||
|
|
||||||
|
if (result case .Err(let err))
|
||||||
|
{
|
||||||
|
Log.EngineLogger.Error($"Failed to read data from stream. Texture: \"{_path}\", Error: {err}");
|
||||||
|
}
|
||||||
|
|
||||||
uint8* rawData = ?;
|
uint8* rawData = ?;
|
||||||
uint32 width = 0, height = 0;
|
uint32 width = 0, height = 0;
|
||||||
|
|
||||||
uint32 errorCode = LodePng.LodePng.Decode32File(&rawData, &width, &height, _path.CStr());
|
uint32 errorCode = LodePng.LodePng.Decode32(&rawData, &width, &height, pngData.Ptr, (.)pngData.Count);
|
||||||
|
|
||||||
Debug.Assert(errorCode == 0, "Failed to load png File");
|
Debug.Assert(errorCode == 0, "Failed to load png File");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user