Giter VIP home page Giter VIP logo

lyra-engine's Introduction

lyra-engine

A Vulkan 3d game engine

lyra-engine's People

Contributors

zhuzhile08 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

lyra-engine's Issues

Release mouse capture functionality

Would be helpful if the window could release its capture on the mouse once something is pressed. The interface should be somewhat similar to quitting, i.e. a default button which always releases the mouse and having a function which can add/delete custom inputs.

JSON release mode segfault

The JSON parser segfaults with the test json string in Tests/Containers when compiled in release mode. I have not looked into this at all, could be therefore be anything. Low priority because It's not that important until the Engine is actually ready and needs release mode.

Implement mipmapping for all image types

Currently, mipmapping only applies to textures, because I don't see the reason to add a mipmap to a depth buffer or something like that. Maybe I'll realize this later, for now, this will be put on hold

Seperate mesh into mesh and mesh renderer

Game objects can own a mesh and a mesh renderer, which are separate objects. The mesh is just the mesh data, while the mesh renderer is the vertex buffer, index buffer etc., which allows easier use of batch rendering

And yes, I know that the names are TOTALLY original and not "borrowed" from a very popular game engine

Add the input system

I want to make a wrapper around the SDL input system, but it is kind of very repetitive to implement that, but it is still very important

Engine crashes when trying to enter fullscreen on MacOS

After swapchain and renderers recreate, the next vkQueuePresentKHR crashes with an VkResult of -4 (VK_ERROR_DEVICE_LOST) with additional validation error messages from MoltenVK regarding the failed execution of a command buffer.

Make the VulkanDevice parameter in the Vulkan image a "optional" argument or overload functions

Because (I think) you would never know, where a function of the image would be called first and it would be a huge pain to define the device over and over again, so either, I'm going to make the VulkanDevice parameter simply the first optional argument, or overload them, with one having the device as parameter and the other one not, so that the user can decide himself, if to pass in that device again

Write custom heap allocators

Efficient heap memory allocators are necessary for the new backend architecture, because it now only works with pointers, and it would be nice if the pointers were arranged nicely in memory without big chunks of empty data between them

Custom string implementation

std::string would be one of the last major containers in the standard library I haven't made a custom implementation for yet.

An asset, material and scene system

Make an asset, material system and a scene system. The asset system should contain pipelines, images, sound, loading files, compressing and decompressing of image, sound and etc. files. The Material system should take the assets and wrap around them for ease of use. The scene system will then take the binding commands send out by the materials, pass them through a quick sorting algorithm and send them to the renderer

Exact details are on a diagram on a poster hung over my PC

Pretty complicated stuff

Tabs don't allign

If you look at the code in VSCode (my IDE of choice) it looks perfectly fine, but once on Github the tabs are shifted around very weirdly. I have no idea what causes this, It's only something minor, but still looks kinda bad.

Add a config file

Implement a configuration file in the data file that the engine will read on startup

Fully implement Render Targets

Turns out renderpasses/framebuffers cannot share images for whatever reason, which means it would be necessary now to implement the custom targets and to move the images themselves to the render target too.

Make a scuffed ECS

The Inheriting-Based System that I use now is good enough, but a "proper" ECS system would be much more useful and better

Make a Content Manager

Make a Content Manager that compresses and fuses assets into a single file, one for textures, one for models and so on. The engine itself should only support reading these files, while the Content Manager has full control over the contents

Rename core/defines.h

This file has no defines or macros anymore, everything has been moved to inline functions, so it has nothing to do with its name anymore

Make pipeline barriers more dynamic

This is optional, but make a function in the command buffer class, which wraps around the execution of pipeline barriers, so that the code looks a bit better

Rework the Vulkan backend

The Vulkan backend is quite bloated now, where every single Vulkan handle basically has its own class now. The plan is to just merge them together in a way that still makes sense, whilst removing a ton of the bloat

ECS optimisation

The ECS is horribly slow compared to other libraries. Once it's optimised to a more acceptable speed, I will also change the rendering backend to use the ECS instead of the current setup with pointers in vectors.

Rethink image and image view relationship

In the new update, image views have now been separated from the image and are now somewhat standalone objects. This may not be the best way to implement this, since it could well be that a bit of coupling is needed, but since it works for now, I'll leave it be.

Fix the circular inclusion problem with the mesh

The mesh, renderer and pipeline have some circular inclusion problems, so I had to separate the vertex struct and the mesh class, which doesn't make any sense. It's not anything too bad, but it would still look better the other way

Change asset manager graphical backend

The asset manager currently runs on SDL, which is not optimal as the basically useless logging window fills more than half of the screen. It would be nice if there was a preview of the 3d model or texture instead.

Weird C++ pointer and variable corruption stuff

In the Mesh and Framebuffer classes is a big problem: parameters of pointers and normal variables passed in as function parameters go corrupt when the function is exited because of local variables or stuff like that. It was fixed in the framebuffer class with hard coding, but that is just a temporary solution, and everything breaks down in the mesh class

Add global transformation support

This is a pretty important feature, but I personally don't see the use of global transformations in the alpha phase of the Engine, but it will be implemented down the line

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.