Skip to content

Commit

Permalink
Removed GraphicsApi & fixed shaders work
Browse files Browse the repository at this point in the history
  • Loading branch information
Tornado-Technology committed Jan 17, 2025
1 parent cd9b42b commit 4c75aa0
Show file tree
Hide file tree
Showing 92 changed files with 738 additions and 21,038 deletions.
57 changes: 39 additions & 18 deletions src/Hypercube.Core/Config.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Hypercube.Graphics;
using Hypercube.GraphicsApi;
using Hypercube.Graphics.Rendering;
using Hypercube.Mathematics;
using Hypercube.Utilities.Configuration;

namespace Hypercube.Core;
Expand All @@ -22,34 +23,54 @@ public static class Config
});

/**
* API
* Rendering
*/

public static readonly ConfigField<WindowingApi> Windowing =
new("Windowing", WindowingApi.Glfw);

public static readonly ConfigField<RenderingApi> Rendering =
new("Rendering", RenderingApi.OpenGl);

public static readonly ConfigField<Color> RenderingClearColor =
new("RenderingClearColor", Color.Black);

public static readonly ConfigField<int> RenderingMaxVertices =
new("RenderingMaxVertices", 65532);

public static readonly ConfigField<int> RenderingIndicesPerVertex =
new("RenderingIndicesPerVertex", 6);

/**
* Render threading
* Windowing
*/

public static readonly ConfigField<bool> RenderThreading =
new("RenderThreading", true);
public static readonly ConfigField<WindowingApi> Windowing =
new("Windowing", WindowingApi.Glfw);

public static readonly ConfigField<string> RenderThreadName =
new("RenderThreadName", "Windowing");

public static readonly ConfigField<ThreadPriority> RenderThreadPriority =
new("RenderThreadPriority", ThreadPriority.AboveNormal);

public static readonly ConfigField<int> RenderThreadStackSize =
new("RenderThreadStackSize", 8 * 1024 * 1024); // 8MByte
public static readonly ConfigField<int> WindowingWaitEventsTimeout =
new("WindowingWaitEventsTimeout", 0);

/**
* Windowing threading
*/

public static readonly ConfigField<int> RenderThreadReadySleepDelay =
new("RenderThreadReadySleepDelay", 10);

public static readonly ConfigField<bool> WindowingThreading =
new("WindowingThreading", true);

public static readonly ConfigField<string> WindowingThreadName =
new("WindowingThreadName", "Windowing");

public static readonly ConfigField<ThreadPriority> WindowingThreadPriority =
new("WindowingThreadPriority", ThreadPriority.AboveNormal);

public static readonly ConfigField<int> WindowingThreadStackSize =
new("WindowingThreadStackSize", 8 * 1024 * 1024); // 8MByte

public static readonly ConfigField<int> WindowingThreadReadySleepDelay =
new("WindowingThreadReadySleepDelay", 10);

public static readonly ConfigField<int> WindowingThreadEventBridgeBufferSize =
new("WindowingThreadEventBridgeBufferSize", 32);

/**
* Render batching
*/
Expand Down
28 changes: 12 additions & 16 deletions src/Hypercube.Core/Execution/Runtime.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
using System.Reflection;
using Hypercube.Core.Execution.Attributes;
using Hypercube.Core.Execution.Enums;
using Hypercube.Core.Utilities.Helpers;
using Hypercube.Graphics;
using Hypercube.Graphics.Rendering;
using Hypercube.Graphics.Rendering.Api;
using Hypercube.Graphics.Windowing.Api;
using Hypercube.Graphics.Windowing.Settings;
using Hypercube.GraphicsApi;
using Hypercube.Mathematics;
using Hypercube.Resources.Loader;
using Hypercube.Utilities.Configuration;
using Hypercube.Utilities.Debugging.Logger;
Expand Down Expand Up @@ -57,23 +58,12 @@ public void Start()

_renderer.Init(new RendererSettings
{
Thread = Config.RenderThreading ? new RendererThreadSettings
{
Name = Config.RenderThreadName,
StackSize = Config.RenderThreadStackSize,
Priority = Config.RenderThreadPriority,
} : null,
WindowingApi = WindowingApiSettings.DefaultGlfw,
RenderingApi = new RenderingApiSettings
{
Api = RenderingApi.OpenGl,
IndicesPerVertex = 6,
MaxVertices = 65532
},
ReadySleepDelay = Config.RenderThreadReadySleepDelay
Thread = WindowingThreadSettingsHelper.FromConfig(),
WindowingApi = WindowingApiSettingsHelper.FromConfig(),
RenderingApi = RenderingApiSettingsHelper.FromConfig(),
ReadySleepDelay = Config.WindowingThreadReadySleepDelay
});


_renderer.CreateMainWindow(new WindowCreateSettings
{
Api = new ApiSettings
Expand All @@ -89,6 +79,12 @@ public void Start()
Floating = Config.MainWindowFloating,
TransparentFramebuffer = Config.MainWindowTransparentFramebuffer,
});

var graphicsPreloader = new GraphicsPreloader();
_dependencies.Inject(graphicsPreloader);
graphicsPreloader.PreloadShaders();

_renderer.Load();

_logger.Info("Preparation is complete, start the main application cycle");
EntryPointsExecute(EntryPointLevel.AfterInit);
Expand Down
6 changes: 6 additions & 0 deletions src/Hypercube.Core/Execution/Timing/ITiming.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Hypercube.Core.Execution.Timing;

public interface ITiming
{
uint Frame { get; }
}
6 changes: 6 additions & 0 deletions src/Hypercube.Core/Execution/Timing/Timing.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Hypercube.Core.Execution.Timing;

public class Timing : ITiming
{
public uint Frame { get; private set; }
}
1 change: 0 additions & 1 deletion src/Hypercube.Core/Hypercube.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Hypercube.GraphicsApi\Hypercube.GraphicsApi.csproj" />
<ProjectReference Include="..\Hypercube.Graphics\Hypercube.Graphics.csproj" />
<ProjectReference Include="..\Hypercube.Resources\Hypercube.Resources.csproj" />
</ItemGroup>
Expand Down
17 changes: 17 additions & 0 deletions src/Hypercube.Core/Utilities/Helpers/RenderingApiSettingsHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Hypercube.Graphics.Rendering.Api;

namespace Hypercube.Core.Utilities.Helpers;

public static class RenderingApiSettingsHelper
{
public static RenderingApiSettings FromConfig()
{
return new RenderingApiSettings
{
Api = Config.Rendering,
ClearColor = Config.RenderingClearColor,
MaxVertices = Config.RenderingMaxVertices,
IndicesPerVertex = Config.RenderingIndicesPerVertex
};
}
}
16 changes: 16 additions & 0 deletions src/Hypercube.Core/Utilities/Helpers/WindowingApiSettingsHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Hypercube.Graphics.Windowing.Api;

namespace Hypercube.Core.Utilities.Helpers;

public static class WindowingApiSettingsHelper
{
public static WindowingApiSettings FromConfig()
{
return new WindowingApiSettings
{
Api = Config.Windowing,
WaitEventsTimeout = Config.WindowingWaitEventsTimeout,
EventBridgeBufferSize = Config.WindowingThreadEventBridgeBufferSize
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Hypercube.Graphics.Rendering;

namespace Hypercube.Core.Utilities.Helpers;

public static class WindowingThreadSettingsHelper
{
public static WindowingThreadSettings? FromConfig()
{
return Config.WindowingThreading ? new WindowingThreadSettings
{
Name = Config.WindowingThreadName,
StackSize = Config.WindowingThreadStackSize,
Priority = Config.WindowingThreadPriority,
} : null;
}
}
4 changes: 2 additions & 2 deletions src/Hypercube.Graphics/ApiFactory.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Hypercube.Graphics.Rendering.Api;
using Hypercube.Graphics.Rendering;
using Hypercube.Graphics.Rendering.Api;
using Hypercube.Graphics.Rendering.Api.OpenGlRenderer;
using Hypercube.Graphics.Windowing.Api;
using Hypercube.Graphics.Windowing.Api.GlfwWindowing;
using Hypercube.GraphicsApi;

namespace Hypercube.Graphics;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,51 @@
using Hypercube.Utilities.Debugging.Logger;
using Hypercube.Utilities.Dependencies;

namespace Hypercube.Core;
namespace Hypercube.Graphics;

public class GraphicsPreloader
{
[Dependency] private readonly DependenciesContainer _dependencies = default!;

[Dependency] private readonly ILogger _logger = default!;
[Dependency] private readonly IResourceLoader _resourceLoader = default!;
[Dependency] private readonly IResourceStorage _resourceStorage = default!;

public void PreloadShaders()
{
_logger.Info("Preloading shaders...");

var stopwatch = Stopwatch.StartNew();
var count = 0;

foreach (var path in _resourceLoader.FindContentFiles("/Shaders/"))
new ResourceShader().Init(_dependencies);

foreach (var path in _resourceLoader.FindContentFiles("/shaders/"))
{
if (path.Extension != ".frag" && path.Extension != ".vert")
if (!ResourceShader.Extension.Values.Contains(path.Extension))
continue;

var basePath = $"{path.ParentDirectory}/{path.Filename}";

if (_resourceStorage.Cached<ResourceShader>(basePath))
continue;

var resource = new ResourceShader(basePath);
_resourceStorage.CacheResource(basePath, resource);
var resource = new ResourceShader();

resource.Load(basePath);
resource.ShaderProgram?.Label(path.Filename);

if (!_resourceStorage.TryCacheResource(basePath, resource))
{
_logger.Critical($"Cached failed: {path}");
continue;
}

count++;
}

stopwatch.Stop();

_logger.Info($"Preloaded {count} shaders in {stopwatch.Elapsed}");
}
}
1 change: 0 additions & 1 deletion src/Hypercube.Graphics/Hypercube.Graphics.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Hypercube.GraphicsApi\Hypercube.GraphicsApi.csproj" />
<ProjectReference Include="..\Hypercube.Resources\Hypercube.Resources.csproj" />
</ItemGroup>

Expand Down
4 changes: 2 additions & 2 deletions src/Hypercube.Graphics/Patching/IPatch.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Hypercube.Graphics.Rendering;
using Hypercube.Graphics.Rendering.Context;

namespace Hypercube.Graphics.Patching;

public interface IPatch
{
void Draw(IRenderer renderer);
void Draw(IRenderContext renderer);
}
4 changes: 2 additions & 2 deletions src/Hypercube.Graphics/Patching/Patch.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Hypercube.Graphics.Rendering;
using Hypercube.Graphics.Rendering.Context;

namespace Hypercube.Graphics.Patching;

public abstract class Patch : IPatch
{
public abstract void Draw(IRenderer renderer);
public abstract void Draw(IRenderContext renderer);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Hypercube.Graphics.Rendering.Batching;
using Hypercube.Graphics.Rendering.Shaders;
using Hypercube.Resources.Storage;

namespace Hypercube.Graphics.Rendering.Api;

Expand All @@ -7,9 +9,14 @@ public abstract partial class BaseRenderingApi
protected abstract string InternalInfo { get; }

protected abstract bool InternalInit(IContextInfo contextInfo);
protected abstract void InternalLoad(IResourceStorage resourceStorage);
protected abstract void InternalTerminate();
protected abstract void InternalRender(Batch batch);
protected abstract void InternalRenderSetup();
protected abstract void InternalRenderSetupData(Vertex[] vertices, uint[] indices);
protected abstract void InternalRenderUnsetup();

protected abstract IShader InternalCreateShader(string source, ShaderType type);
protected abstract IShaderProgram InternalCreateShaderProgram(IEnumerable<IShader> shaders);
protected abstract IShaderProgram InternalCreateShaderProgram(List<IShader> shaders);
}
Loading

0 comments on commit 4c75aa0

Please sign in to comment.