Переглянути джерело

Document CURRENT_RENDERER built-in shader define

tetrapod00 8 місяців тому
батько
коміт
6afebce86f

+ 32 - 0
tutorials/shaders/shader_reference/shader_preprocessor.rst

@@ -458,3 +458,35 @@ the preprocessor step.
     // This causes a shader compilation error, as the `#if USE_LIGHT` and `#endif`
     // This causes a shader compilation error, as the `#if USE_LIGHT` and `#endif`
     // are included as-is in the final shader code.
     // are included as-is in the final shader code.
     #endif
     #endif
+
+Built-in defines
+----------------
+
+Current renderer
+^^^^^^^^^^^^^^^^
+
+Since Godot 4.4, you can check which renderer is currently used with the built-in
+defines ``CURRENT_RENDERER``, ``RENDERER_COMPATIBILITY``, ``RENDERER_MOBILE``,
+and ``RENDERER_FORWARD_PLUS``:
+
+- ``CURRENT_RENDERER`` is set to either ``0``, ``1``, or ``2`` depending on the
+  current renderer.
+- ``RENDERER_COMPATIBILITY`` is always ``0``.
+- ``RENDERER_MOBILE`` is always ``1``.
+- ``RENDERER_FORWARD_PLUS`` is always ``2``.
+
+As an example, this shader sets ``ALBEDO`` to a different color in each renderer:
+
+.. code-block:: glsl
+
+    shader_type spatial;
+
+    void fragment() {
+    #if CURRENT_RENDERER == RENDERER_COMPATIBILITY
+        ALBEDO = vec3(0.0, 0.0, 1.0);
+    #elif CURRENT_RENDERER == RENDERER_MOBILE
+        ALBEDO = vec3(1.0, 0.0, 0.0);
+    #else // CURRENT_RENDERER == RENDERER_FORWARD_PLUS
+        ALBEDO = vec3(0.0, 1.0, 0.0);
+    #endif
+    }