Giter VIP home page Giter VIP logo

elvenengine's Introduction

Hi there, I'm Denys๐Ÿ‘‹

๐Ÿ’ป Software Engineer at Frag Lab working on Shatterline game using Lumberyard game engine.

๐ŸŽ“ Masterโ€™s in Computer Science

๐Ÿ”ง Currently working on the game engine Elven to learn more about game engine architecture, graphics programming, and how things actually work under the hood.

๐Ÿค– I'm experimenting with different machine learning algorithms and try my best to make something useful.

๐ŸŒŽ Also I've started personal blog about gamedev and software engineering

elvenengine's People

Contributors

denyskryvytskyi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

elvenengine's Issues

Enitity-Component-System introduced

  • Entity is just integer.
  • Component - structs with data and minimal logic (all logic is in systems), but logic like serialization may be exist in components.
  • Generic ComponentPool
  • Generic ComponentSystem
  • For the case when unique Component need extra logic, that isn't covered in the ComponentSystem, then there is a BehaviorsSystem. As I've decided to avoid scripting in my engine, Behavior's system is useful for the case when scripts would be used.

Audio Engine

  • Integrate irrKlang sound library
  • Support next functionality:
    • Add;
    • Play(optional looped);
    • Pause;
    • Stop;
    • SetVolume.

[Renderer] Investigate issue with rendering trasparent/semi-transparent objects with different z-order

Investigate issue with rendering trasparent/semi-transparent objects with different z-order.
Possible solutions:
For 2D Renderer (with disabled depth testing):

  • (PRIMARY OPTION) Layers system
  • Just render in the correct order (sorting) according to Sprite Z position before rendering.

For 3D Renderer:

  • Make next rendering order:
    • Draw all opaque objects first.
    • Sort all the transparent objects.
    • Draw all the transparent objects in sorted order
  • Order independent transparency technique. Good explanation here

3D Renderer introduced

  • Fly camera (FPS like)
  • Test 3D scene
  • Phong Lighting
  • Multiple light casters: spotlight, directional, and point light
  • Mesh-Material system
  • Model loading (Assimp)
  • Primitives: cube, sphere, plane

Text Renderer

  • integrate freetype libarary
  • make Text renderer core class with capabilities:
    • LoadFont
    • RenderText

Unit Testing

Add doctest or gest lib for unit testing.
Write tests for:

  • math lib
  • ecs

2D Renderer introduced

  • Shader Manager (shader files loading)
  • VAO, VBO, EBO API abstraction
  • Shader, Texture abstraction
  • orthographic camera
  • 2D Renderer
    • Quad
    • Sprites
    • Quads and sprites batching
    • Circle and line

Suggestion: Switch to FetchContent for third-party dependencies

Most (if not all) dependencies for ElvenEngine are available as public repositories, and therefore, can be added to the project using FetchContent CMake module.
This would allow:

  • Get rid of submodules or including the source code for dependencies right away in the ElvenEngine repository
  • Get rid of Windows-specific .bat script
  • Allow to explicitly use a specific version of each dependency by specifying needed tag in the CMakeLists FetchContent command
  • Automatically introduce cross-platform dependencies setup

This suggestion comes intially from my attempt to get ElvenEngine running on MacOS, and in that case, setting up dependencies and specifying their paths in CMake GUI was a bit of unneeded manual work.

Let me know if you have any objections about it.

P.S. - the only exception I guess would be GLAD, but it's pretty easy to include in project, as compared to other fully-featured libraries

Event System introduced

Brief overview

Implemented using Observer pattern without separate classes for Observer/Subject.
There is global EventManager object to transfer our events to receivers.
There is event queue that will be processed at the end on the game loop to avoid blocking events.

You can subsribe/unsubscribe to any event:
Events::Subscribe<WindowCloseEvent>(EVENT_CALLBACK(Application::OnWindowClose));
Events::Unsubscribe<WindowCloseEvent>(EVENT_CALLBACK(Application::OnWindowClose));

Where Applciation::OnWindowClose is the member function with Derived from Event parameter:
bool Application::OnWindowClose(const Events::WindowCloseEvent& e)

Benefits

  • event queue;
  • we don't use dependency injection, that can be turn to very deep and dangerous callstack of OnEvent function calls;
  • simple subscription model using just callback function with particular Event.

Allocators

  • Stack-based (simple and double-ended)
  • Pool allocator
  • Aligned allocations
  • Single-Frame and Double-Buffered Memory Allocators

Game scene introduced

Make scene mananer and current active scene, that processes all ECS entitiesm components and systems.

3D Renderer development

  • Render Target (Framebuffer)
  • Render Passes based on Render Target with MSAA support
  • Uniform buffer
  • Cubemap
  • Shadows

Job system

Implement thread pool with context dependencies.

Renderer API introduced

  • Shader Manager (shader files loading)
  • Renderer API (VAO, VBO, Shader, Texture abstractions)
  • Camera (orthographic, perspective)
  • DSA OpenGL renderer api implementation

Editor introduced

The core features for now should be:

  • Components support
  • ImguiGizmo
  • Scene loading/saving

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.