Skip to content

Change the naming of rendering methods and drivers #4261

Closed
godotengine/godot
#65541
@reduz

Description

Describe the project you are working on

Godot

Describe the problem or limitation you are having in your project

In Godot 3, choosing the rendering driver is relatively easy because only GLES2 and GLES3 are present.
In Godot 4, this problem is far harder due to the addition of the new RenderingDevice rendering layer. The following combinations are (and will be) possible:

RenderingDevice renderers:

  • ForwardClustered
  • DeferredClustered
  • ForwardMobile

RenderingDevice drivers:

  • Vulkan
  • D3D12
  • Metal
  • WebGPU

GLES3 drivers:

  • Native (OpenGL/GLES)
  • Angle D3D12/Metal

This is far too many combinations, we can't put 3 combos for selecting everything.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

The general idea is that we simplify this by having a main rendering method, then drivers configurable in the project settings.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

As suggested by @clayjohn we should instead focus on rendering method, driver second. This way, the combobox showing the graphic driver instead the following methods:

  • RD_Forward (Renderer for desktop, focused on flexibility, using RenderingDevice)
  • RD_Deferred (Renderer for desktop, focused on performance, using RenderingDevice)
  • RD_Mobile (Renderer for mobile, focused on performance on mobile devices, using RenderingDevice)
  • GL_Compat (Renderer for compatibility with old desktop and mobile, using GLES3)

Then, in the project settings, we need to have a setting with the rendering driver.

rendering/rendering_device/driver - this one not really editable

Then the following platform overrides:

rendering/rendering_device/driver.windows [ Vulkan | Direct3D]
rendering/rendering_device/driver.linuxbsd [ Vulkan ]
rendering/rendering_device/driver.javascript [ WebGPU ]
rendering/rendering_device/driver.android [ Vulkan ]
rendering/rendering_device/driver.ios [ Metal | Vulkan ]
rendering/rendering_device/driver.osx [ Metal | Vulkan ]

also

rendering/gl_compatibility/driver - not really editable

Then the following platform overrides:

rendering/gl_compatibility/driver.windows [ OpenGL | AngleDirect3D ]
rendering/gl_compatibility/driver.linuxbsd [ OpenGL | AngleVulkan ]
rendering/gl_compatibility/driver.javascript [ WebGL ]
rendering/gl_compatibility/driver.android [ GLES3 | AngleVulkan ]
rendering/gl_compatibility/driver.ios [ AngleMetal | OpenGL (Deprecated) ]
rendering/gl_compatibility/driver.osx [ AngleMetal | OpenGL (Deprecated) ]

Remember also that overrides can be set by export setting, so different export settings can also change the driver.

If this enhancement will not be used often, can it be worked around with a few lines of script?

N/A

Is there a reason why this should be core and not an add-on in the asset library?

N/A

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions