GithubHelp home page GithubHelp logo

yattabyte / revision Goto Github PK

View Code? Open in Web Editor NEW
7.0 7.0 1.0 515.55 MB

Rendering Engine

License: MIT License

C++ 88.39% CMake 1.45% GLSL 10.02% C 0.14%
game-engine opengl rendering-3d-graphics

revision's People

Contributors

yattabyte avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

manman25

revision's Issues

Hide GLFW from everything but the Engine class

To better future-proof the project, we should hide as much of GLFW as possible from anything other than the main engine class.

As it is, most input is handled there, mapped into the ActionState class, but we use our own state enumerations like FORWARD, BACK, LEFT.

In commit c93e2ca we hid the mouse input modes using the engine class, let's continue doing things like that until glfw isn't used anywhere else but directly in the engine class.

Parallax reflectors broken

They've been disabled for now, and they need reworked in several ways.

For one, they required the old camera system, which we no longer use. So they need to copy the old camera attributes, push their own, render, and then push back the old camera attributes.

It would be nice if they didn't cause the entire engine to trigger window resize callbacks, but I don't think that's possible.

They were also experiencing a bug where it they weren't setting the correct size back, causing the engine to save the reflector texture size as the user's display port size.

Flickering while regenerating reflectors

Some objects are flickering while rendering during the reflector regeneration pass
I think its clashing with the main rendering pass, as the first frame after it finishes causes some objects to go invisible.

Model material rendering issue

Some models appear to have in assimp 3 materials, and the material offset for each mesh goes to the second set of materials, which is null is undefined in the material manager.

Early launch crash

There is an infrequent crash that occurs on launch, very early on.
A few assets will have loaded by this point.

UI: Keyboard Controls

The UI currently exhibits no keyboard controls, aside from the deprecated TextInput control.

We need to look at some other UI systems, and figure out how to organize which items get controlled with user bound directional keys, etc...

Better improve glfw window/context in Engine class

The engine.h and engine.cpp files have a separate struct responsible for wrapping the glfw context/window

I'm not totally sold on my previous implementation of this from last year, I want to clean this out and do it from scratch.

More Shader Comments

Add header comments to shaders, giving brief explanations of what they're for.

Idea

Move unregistering callbacks into the class itself that manages the callbacks
-> check if valid before doing the callback, remove many unregister lines in class destructors

ECSSystemList unsafe adding/deleting of systems

The ECSSystemList class is given raw pointers, which tend to be created during the function call "addSystem()", but are never deleted

I think we should rework this class like such:

  • ECSSystemList should store system shared pointers
  • addSystem() should take in a shared pointer
  • new method makeSystem templated with class, variadic input parameters (func similar to std::make_shared, will forward the parameters to that function actually)

Loading indicator

I'd like to have some sort of a loading indicator, like a spinning ring on the lower right hand side when the level is loading and not fully useable yet.

Hard-code default binds, just like default preferences

We should have hard-coded default binds, just like how we have default preferences.

I don't want to use a separate file like binds_default.cfg, just like how we don't have a preferences_default.cfg, as these can be lost, corrupted, or changed.

I'm not sure how we're going to do this yet, as the preferences are managed using a preference manager. We may need to implement a bind manager, but I haven't thought it all out yet.

Controls Screen

A control binding screen is crucial. This should be implemented before 4.0 ships, even if the controls are rudimentary.

For this to be done, we should look over our binding system and ensure it is future proofed.

Some graphics settings don't change correctly in real-time

The following list of video/graphics settings have no impact or break, until the game restarts. All settings can be changed back to their previous value, reverting all issues.

  • Changing the draw distance seems to partially break directional shadows
  • Texture quality does nothing
  • Shadow quality breaks
  • Reflection quality does nothing
  • Light bounce quality breaks
  • Bloom breaks pretty much everything

Asset Creation: shared pointer handling

The asset creation functions often pass around shared pointers by reference.
I feel that at the beginning of this chain, we should be returning a new shared pointer to the one needing it created, and the rest of the references should be const or something.

I want to clean this up so that if an SharedAsset is created, copied, and the original deleted all before the asset has finished initializing or finalizing, it won't crash. This should be easily fixable, maybe at most 2hr of work.

UI menu button color issue

The UI menu buttons start off with a text color of white, changing to their appropriate color after first hover-over.

Wave of UI changes

  • Finish UI Documentation, code comments
  • Clean up ALL UI code
  • Mouse interaction set focused element for keyboard user action
  • Slider userAction interaction
  • Fix TextInput mouse related controls
  • Fix List selection boxes graphical inconsistency in brightness
  • Fix crash on loading "Game"
  • Propagate changes into pause menu

Flickering lights near world origin

When using the world example with multiple point lights, the lights appear to flicker rapidly (or their shadows).
This might be a shadow scheduling issue, or an issue with view-frustum culling (visibility calc. failing)

Pause Menu

A pause "escape" menu would be nice.
Options for it could include:

  • RESUME
  • OPTIONS
  • MAIN MENU

Unstable Global Illumination

There's an issue with the global illumination model used.
Although the implementation uses the same technique to stabilize itself as the cascades from directional lights (CSM's), moving around in the world causes artifacts.

Auxiliary processing thread unsafe if only 1 used

If only 1 extra thread is used, it can stall, presumably waiting on an asset to complete.
See if there is anyway to detect this case within the thread and change its behavior to prevent stalling.

Invisible models

There is an issue with models sometimes not rendering after successfully loading.

If unchecked, this bug will cause major problems later on in larger scenes. The problem is evident when the scene is composed of a few key models.

I'm unsure why this happens at this point. All the way up until this point, this issue has NEVER occured with primitive assets, only with model assets. All of them should be properly mutex'd and have sync flags. As a starting point, those assumptions should be rechecked.

Create KeyboardEvent, similar to mouse event

Create a KeyboardEvent class, similar to mouse event, to better deal with the differences between keyboard input methods and specific enumerations, like KEY_ENTER, KEY_BACPSPACE, KEY_PRESS, KEY_RELEASE, etc.

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.