jjsheets / nebula Goto Github PK
View Code? Open in Web Editor NEWa game engine project
License: GNU Lesser General Public License v2.1
a game engine project
License: GNU Lesser General Public License v2.1
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Increase code coverage of the following files:
Most of this will require mocking up problem responses for GLFW/Vulkan, or adding incorrect/corrupt module data to test. The ecs.cc code may be the most difficult to get to full coverage with, since I want to be able to still access the SQLite codebase. I may need to figure out how to define/undefine macros to redirect calls to SQLite functions to mocked functions that are also linked to the test executable.
Describe alternatives you've considered
The sooner this is done, the better.
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
The Vulkan Image View type needs to be exposed to nebula. Initially, it is just needed to configure Image Views for use with the Swap Chain.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Error output to cerr is terrible.
Describe the solution you'd like
Integrate https://github.com/emilk/loguru since I'm most familiar with it, and it does a very good job for what I want.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement Code Coverage reporting for the CI build/test. Send the coverage reports to codecov.io.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement the shader compiler system to use during development. Evaluate using https://github.com/google/shaderc in CI. This will require cached compilation of the tool, along with cached compilation of shaders, the caching being needed to prevent excessive Action time.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Generally speaking, I want to limit the choices to FIFO (not FIFO Relaxed), and Mailbox mode for the swap chain. Preference should be given to Mailbox mode if it is available, otherwise FIFO, or if both of those are unavailable, Relaxed FIFO, then Immediate if it is the only option. It shouldn't be. This can be presented as a user selected option in the future, but for now the choice should be automatic.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
No.
Describe the solution you'd like
Game state should generally be a collection of SQL tables:
In addition, Update systems and Render systems should, as much as possible, be represented as prepared statements and designed to perform the required SQL queries needed to perform updates on the data, and SELECT
statements used to provide the detail needed to render things, both to 3D and 2D (UI).
Describe alternatives you've considered
All other alternatives would require building a number of methods to support creating an extensive and extendable data system and then optimizing it later when performance inevitably gets bad. SQLite is independently developed and has numerous benchmarks and extensions which are likely to make an in-memory database ideal. It is also licensed in an extremely permissive fashion.
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Once a physical device is chosen, its details should be printed to the log file. If it makes sense to do the same with logical device chosen, do that also.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
With the vertex input described, the vertex buffer can be created. Initialize the buffer with the same data presently hard coded into the vertex shader at this point, but also try to plan for this becoming a more general process.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Need a class to handle Vulkan as a whole. All initialization steps go in the constructor if possible, and termination steps in the deconstructor.
Describe alternatives you've considered
N/A
Additional context
https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Base_code for working code to springboard off of.
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Vulkan requires shaders for rendering to occur. Implement the system needed to load compiled shader modules. Ignore the OpenGL urge to compile shader source with the engine, tools should be used externally to compile them instead.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Review and refactor code to finish sprint 3.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement controls/functions to define Render Passes.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
No.
Describe the solution you'd like
A Module should have a manifest file which provides metadata for the module:
Describe alternatives you've considered
Experience with other games' modding systems shows that a proper manifest system is necessary to make modding a game easier, and this is best done by making every aspect of game data and behavior use the same system that mods will use. The alternatives are the worse choices, imo.
Additional context
N/A
Is your feature request related to a problem? Please describe.
Currently, the program has no output. It just returns successfully.
Describe the solution you'd like
A window should be created to display the game on. The player should be able to close the window with a mouse if its close button is visible on a title-bar, or type Alt-F4
or the Esc
key to exit the game also.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
The program has no way now of defining game data and behavior.
Describe the solution you'd like
Each module file needs to be a separate bit of data and behavior, with the ability to define dependencies between modules. As much as is possible, no game data or behavior should be hardcoded into the engine.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Set up the Fixed Function settings system.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement an Index buffer to allow for re-use of identical vertices in vertex data.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Certain situations necessitate recreating the swap chains:
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Most GPUs work best using a staging buffer to perform data transfers from CPU to GPU (and possibly vice versa). Implement the details needed for this to work. Might not need to make this specifically generic, as it may already be generic enough. Alternatively, it could possibly be integrated into the basic buffer code.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Vulkan can often work better if a single Vulkan Buffer is used to store data for multiple buffers (vertex, index, instance, etc.) but this is not currently implemented.
Describe the solution you'd like
Look into the existence of buffer manager libraries, and if none exist write something that allows for allocation of a unified buffer that can be used for multiple buffers. This will likely require the buffer code to be refactored into its own class.
Describe alternatives you've considered
None, but this should be researched before a custom implementation is started.
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement code to convert update systems from YAML Nodes to proper SQL code.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
A framebuffer needs to be created to allow rendering to the swap chain images.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
No unit testing is done yet.
Describe the solution you'd like
Try using https://github.com/onqtam/doctest to unit test, however, if that isn't easy to integrate, use https://github.com/sheredom/utest.h instead (utest.h does not have exception catching features afaik).
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Once #20 is complete, there will still be no user interface.
Describe the solution you'd like
I could continue my coding of a GUI project, but right now I'd prefer to just get something working. Even better if it already does everything I want it to. https://github.com/Immediate-Mode-UI/Nuklear may be exactly what I want. I'll evaluate all of its features, but I suspect it's what I'm going to choose. License is good on it too.
Describe alternatives you've considered
Again, I've considered writing my own (and even coded something up), and there are other libraries out there, which I'll need to check if Nuklear doesn't actually give me the features I want.
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Refactor code written for sprint 5.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
An ECS class needs to be created, which needs to set up a new game's game state. Eventually, will need to be able to support module details, entities with optional names (which must be unique among the names that exist; unnamed entities shouldn't participate in the unique constraint), and create the components and systems associated with a module.
For now though, just create the class and the Entity table. This may be a large issue, so I'm not expanding further on this until this is done, to hopefully reduce sprint duration.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Refactor code written for sprint 4.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Command Pools and Buffers are used to send drawing commands to Vulkan. Need to get this implemented.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
GLFW handling is done directly in main().
Describe the solution you'd like
Game window handling, graphics pipeline code, audio handling, etc. will quickly overfill the main() function. Refactor the existing code into a class after creating the needed unit tests.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Create code to read YAML node info to build tables representing components.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Need code to integrate Vulkan with the windowing system using GLFW.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Need to set up a logical device with Vulkan to be able to interact with the physical device chosen.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Need code to get all of the physical Vulkan capable devices on the system, and pick the right one to use.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
No.
Describe the solution you'd like
Before almost anything else, a debug/script/cheat console should be made and fully functional. It should provide output to commands run, and have a prompt that can be typed into to run Lua code. It should be accessible with the ~
key.
Describe alternatives you've considered
None. This is a required feature.
Additional context
N/A
Is your feature request related to a problem? Please describe.
Code Coverage of successful code paths is nearly 100%. Almost all of the non-covered code paths are due to failure states.
Describe the solution you'd like
Work exclusively on creating tests to check these failed code paths. Mocking of SQLite and Lua will be needed to accomplish this for ecs.cc and engine.cc. Some additional work will be needed for the Vulkan mocking to add code to trigger specific failures.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Code coverage at this point is 41%. Ideally I want that at 95 or better.
Describe the solution you'd like
Look for tests which can be added to increase coverage that don't require mocking to implement. Also look into the mocking systems supported by doctest to find one that fits in seamlessly.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Key events are currently hard-coded.
Describe the solution you'd like
nebula::engine
needs a method to take a key description (key code and modifiers) and then run a script when that key is pressed. Ideally have a list of scripts, each with a name and possibly category, that can be bound or unbound, and a reverse mapping of keybind to script. That way when the UI is made we can display keybinds in order of category and name (or maybe a priority or other sort criteria), but the code can quickly look up the script to execute from the key code + mods.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Need to create Semaphores for the render process, acquire the next swap chain image, submit command buffer(s), subpass dependencies need to be created, and then submit the result back to the swap chain for presentation. In addition, this needs to be optimized/synchronized to not flood the queues, etc.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
No.
Describe the solution you'd like
Localization needs to be as simple as possible. And it needs to be available in Lua (and probably only Lua). Unless another lib is found, the following project looks incredibly convenient, and is MIT Licensed: https://github.com/kikito/i18n.lua
Describe alternatives you've considered
Considered YAML and JSON files, but both would require a parser for the files as well as an entire i18n system built on top. kikito/i18n.lua was chosen because it combines both, and uses the same scripting language I already intend to use for other things, for both usage of the localized text, as well as for the source files for localization.
Additional context
N/A
Is your feature request related to a problem? Please describe.
Tests are currently not running on Windows CI
Describe the solution you'd like
Need to verify why the test code immediately exits with exit code 1.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Uniform Buffers also use pools and descriptor sets to help link CPU structures to GPU structures. This needs to be implemented. As usual, look for ways to generalize this for future changes to the implementation.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement Uniform Buffer layout and the actual buffer and memory system for them.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Implement a way to describe vertex input. For now, hard code the vertex configuration, but plan for it to change to a more general form later.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Currently both are reporting present errors with std::exception.
Describe the solution you'd like
Create classes for Lua and GLFW specific exception methods to make exception handling easier for them. GLFW should include the error code and description and report both when converted to string. Lua exceptions will currently be used for fatal/panic errors. Lua warnings are already just logged, as they do not necessarily indicate an exceptional circumstance.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Now that code coverage is working correctly and mocking of frameworks/classes is implemented into nebula's testing system, a PR template should be created to provide guidance on the format of PRs in the future.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Currently no graphics drawing occurs at all.
Describe the solution you'd like
Get a basic Vulkan rendering context drawing a spinning cube, hard-coding allowed. Refactor things afterward as needed, but get something drawing ASAP so there's something to refactor.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
There is no scripting in the system yet.
Describe the solution you'd like
Scripts should be contained within game modules, and should be written in Lua to make them as intuitive as possible, especially considering the intended ECS method for the game engine. The following could be the planned structure of scripts in a module:
Describe alternatives you've considered
No. This is a fundamental design decision.
Additional context
N/A
Is your feature request related to a problem? Please describe.
Currently CI is only running on ubuntu-latest.
Describe the solution you'd like
I want to develop for Ubuntu, Windows 10+, and some selection of MacOS. Update CI workflow to address this.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Vulkan code needs validation layers set up with output sent to loguru to be properly logged.
Describe alternatives you've considered
N/A
Additional context
N/A
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.