Git Product home page Git Product logo

kaijuengine / kaiju Goto Github PK

View Code? Open in Web Editor NEW
28.0 2.0 3.0 19.32 MB

Kaiju Engine - Multiplatform 2D and 3D Vulkan game engine written in Go/Golang

Home Page: https://kaijuengine.org

License: Other

Go 80.55% C 17.08% Shell 0.02% Batchfile 0.02% GLSL 0.42% CSS 0.27% HTML 0.37% Assembly 0.13% Objective-C 1.16%
game-engine game-engine-2d game-engine-3d game-engine-development game-engine-framework gameengine go golang

kaiju's People

Contributors

brentfarris avatar crazy8ball 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

Watchers

 avatar  avatar

kaiju's Issues

Remove onerous requirement for video PRs

This project looks very interesting, but honestly this bit of the README makes me nope out of it entirely.

Every PR will be required to have a video of the development process of that request.

I mean, Oh. My. God. What a nightmare, both for contributors and for the PR reviewers. O.O What do you expect the video format to be like? Are you expecting the entire process of implementing the change to be captured, or just a brief overview? Will there be a requirement for audio commentary? Who's going to edit these things, or are we expected to upload 2-hour videos when implementing a large feature or fixing a big bug?

Cleanup initial Win32 window code

  • Move message handling to window_proc
  • Select shared memory by hwnd
    • Can use SetWindowLongPtrA and SetWindowLongPtrA
      • SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)myPtr);
      • LONG_PTR usrData = GetWindowLongPtrA(hwnd, GWLP_USERDATA);
      • Note that the first couple results from GetWindowLongPtrA will be NULL
  • Create a struct to hold shared memory and size
  • Write fatal error message string to shared memory
  • Error on fatal error from window construction

Setup new project creation code

  • Create a project folder given a path and name
  • Copy the engine source code into the folder
    • .go files should be prefixed with // Code generated by 'kaiju project'. DO NOT EDIT.
    • Ignore the editor folder when copying
  • Create a source folder for developer code
    • Create a blank Main function in the root source folder

Create a shader render housing draw instance groups

We only want to bind the shader once and then draw all instance groups after it is bound, this way we're not re-binding an already bound pipeline or re-binding it later after another one is bound (out of order). This should basically just be a structure with a shader pointer and slice of draw instance groups. This also means that the shader can be removed from the draw instance groups.

Cache GL instance data texture, update pixels each frame

Currently we are generating and deleting a texture every frame for instance data. This change will generate/regenerate the texture as instances are added to the group and delete the texture when all instances are removed or the group is destroyed.

Setup yaegi Go interpreter

Yaegi is a Go interpreter. When it loads up it should Eval all go code within the source folder of the project. The [project]/source.Main function shall be called with the system host pointer.

Question: Willing to adopt "standard" layout?

Would you be open to adopting the "standard" project layout to organize the repo? I know that there isn't really a standard layout for golang projects, but this is a pattern than you'll see out in the wild quite often. For instance, docker and kubernetes use this to structure their projects.

I see that you already have multiple applications in mind (runtime vs editor, both windows and linux), and having a single main.go in the repo root doesnt really represent your intention. Currently, the main.go in the repo root looks (to me) like an example of using the Kaiju engine. Using this "standard" project layout, it might look something like this:
image

The refactor effort would be fairly minimal; just moving some things around. Most of what's in the root of the repo would go into either pkg or internal directories depending on whether you intend for them to be used in an external codebase.

I'm interested to hear what you think about this, and would definitely collaborate and create a video if you opened an issue for this.

Cleanup rendering and make instanced rendering default

Currently the rendering code is set int the main.go file for testing. I want to move the rendering off to the correct location and call it as I would in production code. This will also require me to refactor how the rending is handled and change it to instanced rendering.

Optimize transform matrix updates

Currently we need to clean the dirty state of every transform after the render. I want to change the code to set the frame that the transform was dirty on so that it could be checked to see if the transform has been dirty this frame. Then whenever the matrix is requested and the transform is dirty, clean it in that moment and set the frame.

Create the host (mediator) and entity

Host and Entity are core concepts to the engine, so they will be created simultaneously here. The host is the mediator to all systems, and the entity is the identifier to an instance of a transform and other data. Entities are housed within the host mediator.

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.