michaelsakharov / prowl Goto Github PK
View Code? Open in Web Editor NEWAn Open Source C# game engine under MIT license, inspired by Unity and featuring a Dear ImGUI editor and built on Silk.NET
License: MIT License
An Open Source C# game engine under MIT license, inspired by Unity and featuring a Dear ImGUI editor and built on Silk.NET
License: MIT License
Shaders need reliable and easy-to-use Importing so that we can share shader code between shaders without a bunch of duplicate code.
Describe the bug
note: vs code will cache the last "Run and Debug" so go to the sidebar to switch between Prowl.Editor and Prowl.Player before running again
To Reproduce
Steps to reproduce the behavior:
To Reproduce (from run and debug menu)
here is the error
Exception has occurred: CLR/System.DllNotFoundException
An unhandled exception of type 'System.DllNotFoundException' occurred in Prowl.Runtime.dll: 'Unable to load shared library 'cimguizmo' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable:
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo.dylib' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo.dylib' (no such file)
dlopen(/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo.dylib, 0x0001): tried: '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo.dylib' (no such file), '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo.dylib' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo.dylib' (no such file)
dlopen(cimguizmo.dylib, 0x0001): tried: 'cimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OScimguizmo.dylib' (no such file), '/usr/lib/cimguizmo.dylib' (no such file, not in dyld cache), 'cimguizmo.dylib' (no such file), '/usr/local/lib/cimguizmo.dylib' (no such file), '/usr/lib/cimguizmo.dylib' (no such file, not in dyld cache)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo.dylib' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo.dylib' (no such file)
dlopen(/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo.dylib, 0x0001): tried: '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo.dylib' (no such file), '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo.dylib' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo.dylib, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo.dylib' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo.dylib' (no such file)
dlopen(libcimguizmo.dylib, 0x0001): tried: 'libcimguizmo.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcimguizmo.dylib' (no such file), '/usr/lib/libcimguizmo.dylib' (no such file, not in dyld cache), 'libcimguizmo.dylib' (no such file), '/usr/local/lib/libcimguizmo.dylib' (no such file), '/usr/lib/libcimguizmo.dylib' (no such file, not in dyld cache)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/cimguizmo' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/cimguizmo' (no such file)
dlopen(/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo, 0x0001): tried: '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo' (no such file), '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/cimguizmo' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/cimguizmo' (no such file)
dlopen(cimguizmo, 0x0001): tried: 'cimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OScimguizmo' (no such file), '/usr/lib/cimguizmo' (no such file, not in dyld cache), 'cimguizmo' (no such file), '/usr/local/lib/cimguizmo' (no such file), '/usr/lib/cimguizmo' (no such file, not in dyld cache)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx/native/libcimguizmo' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/runtimes/osx-arm64/native/libcimguizmo' (no such file)
dlopen(/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo, 0x0001): tried: '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo' (no such file), '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/8.0.0/libcimguizmo' (no such file)
dlopen(/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo, 0x0001): tried: '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo' (no such file), '/Users/abdiellopez/Projects/Prowl/Prowl.Standalone/bin/Debug/net8.0/libcimguizmo' (no such file)
dlopen(libcimguizmo, 0x0001): tried: 'libcimguizmo' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcimguizmo' (no such file), '/usr/lib/libcimguizmo' (no such file, not in dyld cache), 'libcimguizmo' (no such file), '/usr/local/lib/libcimguizmo' (no such file), '/usr/lib/libcimguizmo' (no such file, not in dyld cache)'
at Prowl.Runtime.ImGUI.ImGuizmo.ImGuizmoNative.ImGuizmo_SetImGuiContext(IntPtr ctx)
at Prowl.Runtime.ImGUI.ImGuizmo.ImGuizmo.SetImGuiContext(IntPtr ctx) in /Users/abdiellopez/Projects/Prowl/Prowl.Runtime/ImGUI/ImGuizmo/ImGuizmo.gen.cs:line 246
at Prowl.Runtime.ImGUI.ImGUIController.Load(Int32 width, Int32 height) in /Users/abdiellopez/Projects/Prowl/Prowl.Runtime/ImGUI/ImGUIController.cs:line 62
at Prowl.Runtime.Application.Initialize() in /Users/abdiellopez/Projects/Prowl/Prowl.Runtime/Application.cs:line 46
at Prowl.Standalone.Program.Main(String[] args) in /Users/abdiellopez/Projects/Prowl/Prowl.Standalone/Program.cs:line 10
Expected behavior
I'm not really sure.
Screenshots
If applicable, add screenshots to help explain your problem.
Describe the bug
To Reproduce
Steps to reproduce the behavior:
note: vs code will cache the last "Run and Debug" so go to the sidebar to switch between Prowl.Editor and Prowl.Player before running again
here is the error
CSC : error CS1566: Error reading resource 'Prowl.Editor.EmbeddedResources.DefaultAssets.Cube.obj' -- 'Could not find file '/Users/abdiellopez/Projects/Prowl/Prowl.Editor/EmbeddedResources/DefaultAssets/Cube.obj'.' [/Users/abdiellopez/Projects/Prowl/Prowl.Editor/Prowl.Editor.csproj]
Expected behavior
I'm not really sure.
Desktop (please complete the following information):
Additional context
Add any other context about the problem here.
Raylib has been a huge help getting off the ground, but it's also limiting us in a lot of areas. We need to drop it in exchange for a custom ideally API Agnostic backend.
I've already started working on something based on Silk.NET.
Shaders need to be able to provide their own Shadow/Depth pass for things like Cutouts/Transparency.
Having Projects be in Editor while seems nice is a bit tricky code-wise, since it means we have to ensure things get properly unloaded/loaded between project switches.
Moving project handling to another application and opening a new copy of the editor when opening a project simplifies some code.
Newtonsoft.json is very slow, ideally we switch to another library or build our own.
System.Text.Json seems good but doesnt support Polymorphism :(
Need to somehow add support for things like Visual Studios Debugger during Play Testing
FBX files and some others seem to import with drastically weird scales
Seems to be related to: assimp/assimp#2166
We have ImGuizmo but we need something for things like Debug.DrawLine(), Ideally whatever we implement also works in the game not just in the editor.
Assets like a Model/Mesh can store Materials, Animations, and possibly more inside of them.
This is already supported, however, we also need a way to access these Sub-Assets.
They need to be treated like any other assets, so they need GUID's assigned and AssetRef needs to be able to Reference them.
Needs some work on the Asset Database side, specifically, we need Dependencies and Packages working.
Dependencies so when building we can specify the scene to load on startup, which using dependencies can build all the assets that matter and skip everything else. Then we can add a Resources folder to always include in builds.
Packages because those are ZipArchive's, while they are being used for sharing assets between projects could also be reused for a Standalone asset provider. We could support allowing Encryption on the assets to not be able to import them back into the editor, or open with like winrar/7zip.
PropertyDrawers in the Editor as of now require a Reflection MemerInfo, which makes them a little weird to use.
A Better API like
bool changed = PropertyDrawers.Draw(ref value);
Or something along those lines might be a lot nicer and easier to use
Double Clicking on a Asset in the inspector should open a window to select a new asset of that type.
We need to be able to select multiple objects, and Inspector needs a way to render common fields between the selected objects.
something like:
Properties
{
// Material property declarations go here
_MainTex("Albedo Map", TEXTURE2D) = white
_MainColor("Main Color", VEC4) = (0.5, 9, 0, -5)
}
Pass 0
{
}
Assets should track their dependencies and maybe other assets that depend on it.
As of now, rendering is mostly hardcoded and partially components.
We should completely redo it so that each camera can have a RenderPipeline ScriptableObject assigned, with a default one if non-assigned.
Multiple RenderPipelines should be able to exist and multiple cameras can share a single one, RenderPipelines describe how to render, and would have a list of RenderPasses. Cameras would still be the main Renderer, the RenderPipeline solely describes how to render, it should not be the actual Renderer.
I like the idea of using Nodes and creating something like a Visually scripted Render Pipeline system like Cocos Customizable Render Pipeline:
The SceneView should use the Main Cameras render pipeline or default if non-assigned.
Exporting/Importing Packages between projects is important for Prowl since this is intended to be a Modular engine, we need a way to easily import "Modules" or Packages
Describe the bug
I forked the repository and cloned it to my computer using Visual Studio. When I ran it I got an error that said the cube.obj object couldn't be found.
When I look in the solution explorer I see a few .obj files that are outlined with a red X.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Should load the editor without issue
Desktop (please complete the following information):
Additional context
Looking at the files on Github, I noticed they were missing as well. No .obj can be found nor "Includes" folder: https://github.com/michaelsakharov/Prowl/tree/main/Prowl.Editor/EmbeddedResources/DefaultAssets
Ideally a capable solution, maybe look into support for Effekseer?
Terrain is gonna be an interesting topic for Prowl.
We want Voxel support however regular voxels can be quite expensive, and we also want regular Quadtree terrain for maximum performance.
The idea I'm thinking of now is a Regular quadtree terrain, But with a VoxelSystem that can complement it.
Kinda like Digger PRO for unity, but that can also work independently.
So Essentially two Independent systems but that can work seamlessly together.
Ideally, both systems are flexible and can be rotated/scaled and altered in all the ways you might expect.
It should be possible to do Planets for example with just the Quadtree, Just voxels, or both together.
For now, I think the voxel side should be more Scripting than In Editor, the Terrain will have support built-in you can toggle on.
The Tree displaying project folders is broken and doesn't work correctly.
With Contact hardening if possible.
Already mostly in, but I believe there's a bug with the GBufferCombine shader resulting in weird behavior.
For Visual scripting and other Node related stuff we can use ImNodes, but we need bindings for it.
Taking advantage of TAA I think stochastic transparency may be somewhat viable.
It comes with a lot of benefits, like free transparent shadows, and full lighting integration, is free to render, handles ordering properly, and best of all it's almost no code is required. But the con is it may make transparency noisy, but with a good enough TAA that might not be an issue. We could probably do other things to reduce noise as well, like offload the transparency to its own buffer and apply some denoiser, probably something temporally to better keep edges intact.
Things like Point/Spot lights could remain as mesh's since we can utilize GPU instancing for a reasonably large number of lights without having to add in tiled lighting or anything too fancy.
So just Ambient lighting and DIrectional lighting could all be merged into 1 pass instead of 1 pass for each light in the world.
No plans here yet, I don't know much about audio stuff.
Describe the bug
The Editor crashes when recompiling project scripts after a Custom component has been added to a GameObject
To Reproduce
Taking from Godot, Prefabs and Scenes will be the same thing, just a GameObject with its children.
So we need to support Prefabs as well as supporting Nested Prefabs.
This is a little while off, maybe after "v1.0" but we will need documentation.
Multiple passes already exist on shaders, just need Mesh Renderers to use them
The windows in the editor are all reasonably hacked together and have kept being bandaged back together during development, they all need to be completely overhauled/rewritten.
Needs TextureCube/Cubemap support first
Asset importing can be threaded to speed up loading in lots of assets.
Render Object Instance ID's to a buffer of 1x1 at the mouse click location.
Essentially a Object ray cast done visually on the GPU to select objects
I've seen uniform buffers before? Can they improve performance and enable less Uniform assignment? Would be good for Built-In common uniforms like Resolution, Time, MVP and so on.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.