Skip to content

Instantly share code, notes, and snippets.

View reduz's full-sized avatar

Juan Linietsky reduz

View GitHub Profile
@reduz
reduz / GPU_driven_renderer.md
Last active February 14, 2024 05:18
GPU Driven Renderer for Godot 4.x

GPU Driven renderer design for Godot 4.x

Goals:

The main goal is to implement a GPU driven renderer for Godot 4.x. This is a renderer that happens entirely on GPU (no CPU Dispatches during opaque pass).

Additionally, this is a renderer that relies exclusively on raytracing (and a base raster pass aided by raytracing).

It is important to make a note that we dont want to implement a GPU driven renderer similar to that of AAA/Unreal, as example.

@reduz
reduz / godot_over_time1.md
Last active February 6, 2024 23:55
Godot source code in 2002

This is a walkthrough to the Godot codebase over time. I can't publish full repositories, but I will put here the interfaces of some APIs including the year they were created and how they looked like at the time.

2002, Larvotor

This was the first version of the engine as such. It was later on used to create Regnum Oline. This is source code where I am sure I can still put legally here. Here are some class interfaces.

Mesh class:

@reduz
reduz / godot_vision_pro.md
Last active March 14, 2024 08:48
Godot on Vision Pro and similar devices

Vision Pro style API on Godot

Overview

Apple recently unveiled the Vision Pro. This type of device is mostly designed for augmented reality (AR), in the sense that it should be able to throw 3D models and rendering combined into a camera.

Normally with pass-through AR, one would expect to get the camera feed as an image and maybe some environment cubemap generated from the camera to apply proper lighting into the objects.

Mock up of how compositor material would work:

shader_type compositor;
// The custom buffers from the Compositor proposal are all available for reading and writing

// Available render modes
render_mode post_opaque, post_alpha, post_tonemap; // default is post_alpha

//uniform sampler2D buffer_texture0 : hint_custom_buffer0_texture, repeat_disable, filter_nearest;

During the past days, this great article by Sam Pruden has been making the rounds around the gamedev community. While the article provides an in-depth analysis, its a bit easy to miss the point and exert the wrong conclusions from it. As such, and in many cases, users unfamiliar with Godot internals have used it points such as following:

  • Godot C# support is inefficient
  • Godot API and binding system is designed around GDScript
  • Godot is not production ready

In this brief article, I will shed a bit more light about how the Godot binding system works and some detail on the Godot

@reduz
reduz / structs.cpp
Created July 19, 2023 12:29
Godot Struct Low Level Proposal
// The idea of this proposal is that we can solve these following problems:
//* Add struct support to GDScript (this has some user demand, given classes are quite heavy resource wise)
//* Add limited struct support to the Godot API, so we avoid exposing things as dictionaries in the API, which are unfriendly (no code completion, no doc)
//* As a plus, have a way to have optimized, flat memory arrays of these structs. this allows much higher performance in GDScript when dealing with thousands of elements (as in, bullet hell). We know we can use multimesh to accelerate drawing (or the new APIs in Godot 3 for drawing which are more optimized), but storing logical data for processing all these is still inefficient cache wise.
//In GDScript, structs should look very simple:
struct MyStruct:
var a : String
@reduz
reduz / structs.cpp
Created July 19, 2023 11:49
Godot Struct Low Level Proposal
// Implementation in Array
// ArrayPrivate needs to be changed:
class ArrayPrivate {
public:
SafeRefCount refcount;
Vector<Variant> array;
Variant *read_only = nullptr; // If enabled, a pointer is used to a temporary value that is used to return read-only values.
ContainerTypeValidate typed;
@reduz
reduz / gist:6bd1a4922f68cf4e4bd14c19612343f2
Created July 19, 2023 11:49
Godot Struct Low Level Proposal
// Implementation in Array
// ArrayPrivate needs to be changed:
class ArrayPrivate {
public:
SafeRefCount refcount;
Vector<Variant> array;
Variant *read_only = nullptr; // If enabled, a pointer is used to a temporary value that is used to return read-only values.
ContainerTypeValidate typed;
This file has been truncated, but you can view the full file.
{
"header": {
"version_major": 4,
"version_minor": 0,
"version_patch": 0,
"version_status": "dev",
"version_build": "custom_build",
"version_full_name": "Godot Engine v4.0.dev.custom_build"
},
This file has been truncated, but you can view the full file.
{
"header": {
"version_major": 4,
"version_minor": 0,
"version_patch": 0,
"version_status": "dev",
"version_build": "custom_build",
"version_full_name": "Godot Engine v4.0.dev.custom_build"
},