Giter VIP home page Giter VIP logo

nebula's People

Contributors

dependabot[bot] avatar jjsheets avatar

Watchers

 avatar

nebula's Issues

Increase code coverage

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:

  • ecs.cc
  • engine.cc
  • exceptions.cc/h
  • graphics.cc
  • module_manager.cc

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

Vulkan Image Views

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

Logging System

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

Code Coverage

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

Implement Shader compiler system

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

Vulkan Swap Chain

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

Use SQLite for game state and Batch update/rendering systems

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:

  • Entity Table: A special component which represents required metadata about an entity in the game engine's ECS based game state. At a minimum it should have a unique Primary Key, a canonical entity name (which ideally should be hierarchical), and anything else that may later be identified as necessary for the concept of an entity alone.
  • Component Tables: Each component table should contain the data needed for a specific component, with each component being associated with an entity (to represent what entity it is a component of). Component tables should have triggers set up to auto-delete any time the entity it references is removed from the Entity Table.

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

Log details about chosen Vulkan Physical Device

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

Vertex Buffer: creation

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

Base Vulkan graphics class

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.

Vulkan Shader module support

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

Refactor for sprint 3

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

Vulkan Render Passes

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

Modules should have versions and dependency requirements

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:

  • Module Identifier (machine readable)
  • Module Name (human readable)
  • Module Tags
  • Engine Version required
  • Module Version
  • Dependencies, each with a required Module version

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

Players should see a game window open when running the game

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

Game rules and data should be stored as module files

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

Vulkan Fixed Function system

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

Index Buffer: Implement an index buffer to re-use vertex data

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

Handle events that invalidate the swap chain

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:

  • Swap chain is out of date
  • Swap chain is suboptimal
  • Framebuffer resized
  • Window minimized

Describe alternatives you've considered
N/A

Additional context
N/A

Staging Buffer: Implement a staging buffer

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

Unified Buffer

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

ECS: Update System YAML Conversion

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

Vulkan Framebuffers

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

Doctest

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

GUI Library

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

Refactor for sprint-5

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

Create ECS class

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

Refactor for sprint-4

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

Vulkan Command Pools and Buffers

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

Engine Class

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

ECS YAML handling: basic component descriptions

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

Vulkan Window Surface Creation

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

Vulkan Logical Device creation

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

Vulkan Physical Device code

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

In-game Lua Console

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

Failure Path Code Coverage

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

Increase code coverage of tests

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

Input Event Script Binding

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

Vulkan Frame Rendering system

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

Localization should be easy to work with, and very complete

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

Windows CI Tests

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

Uniform Buffer: pools

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

Uniform Buffer: Layout and buffer

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

Vertex Buffer: vertex input description

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

Create Lua and GLFW exception classes

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

PR Template

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

Graphics/Vulkan implementation

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

Game Scripting should use Lua embedded in game modules

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:

  • Init Script: A script run when the module is loaded, before a game state exists.
  • New State: A script run to initialize game state for this module when a new game state is created. Generally, this should create/add component structures to the game state, and then initialize the components with the data that should exist at the start of a new game.
  • Load State: A script run to update game state for this module when loading a saved game. This allows a module to update game state for consistency when game breaking changes are made to a module. Generally, this will adjust the structure of older versions of components to the new structure, and populate missing data, if possible.
  • Update Systems: Scripts run to update the module's components, as an ECS style System. Does NOT perform any rendering/graphics/AI actions. Ideally, this should be enforced by not exposing graphics pipeline calls to these scripts.
  • Render Systems: Scripts run to render the module's components, as an ECS style System. Does NOT perform any updates to the data. Ideally, the game state manager should be read only during render system operation.

Describe alternatives you've considered
No. This is a fundamental design decision.

Additional context
N/A

CI on multiple runners

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

Vulkan Validation Layers

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.