Prechádzať zdrojové kódy

Add C# examples to Using Viewports documentation

Co-authored-by: Raul Santos <[email protected]>
Shawn Hardern 11 mesiacov pred
rodič
commit
bf067871c0
1 zmenil súbory, kde vykonal 41 pridanie a 6 odobranie
  1. 41 6
      tutorials/rendering/viewports.rst

+ 41 - 6
tutorials/rendering/viewports.rst

@@ -76,10 +76,15 @@ There can only be one active camera per :ref:`Viewport <class_Viewport>`, so if
 than one, make sure that the desired one has the :ref:`current <class_Camera3D_property_current>` property set,
 than one, make sure that the desired one has the :ref:`current <class_Camera3D_property_current>` property set,
 or make it the current camera by calling:
 or make it the current camera by calling:
 
 
-::
+.. tabs::
+ .. code-tab:: gdscript GDScript
 
 
     camera.make_current()
     camera.make_current()
 
 
+ .. code-tab:: csharp
+
+    camera.MakeCurrent();
+
 By default, cameras will render all objects in their world. In 3D, cameras can use their
 By default, cameras will render all objects in their world. In 3D, cameras can use their
 :ref:`cull_mask <class_Camera3D_property_cull_mask>` property combined with the
 :ref:`cull_mask <class_Camera3D_property_cull_mask>` property combined with the
 :ref:`VisualInstance3D's <class_VisualInstance3D>` :ref:`layer <class_VisualInstance3D_property_layers>`
 :ref:`VisualInstance3D's <class_VisualInstance3D>` :ref:`layer <class_VisualInstance3D_property_layers>`
@@ -95,11 +100,17 @@ these values are overridden, but for all others, this sets their resolution.
 It is also possible to scale the 2D content and make the :ref:`SubViewport <class_SubViewport>` resolution
 It is also possible to scale the 2D content and make the :ref:`SubViewport <class_SubViewport>` resolution
 different from the one specified in size, by calling:
 different from the one specified in size, by calling:
 
 
-::
+.. tabs::
+ .. code-tab:: gdscript GDScript
 
 
     sub_viewport.set_size_2d_override(Vector2i(width, height)) # Custom size for 2D.
     sub_viewport.set_size_2d_override(Vector2i(width, height)) # Custom size for 2D.
     sub_viewport.set_size_2d_override_stretch(true) # Enable stretch for custom size.
     sub_viewport.set_size_2d_override_stretch(true) # Enable stretch for custom size.
 
 
+ .. code-tab:: csharp
+
+    subViewport.Size2DOverride = new Vector2I(width, height); // Custom size for 2D.
+    subViewport.Size2DOverrideStretch = true; // Enable stretch for custom size.
+
 For information on scaling and stretching with the Root Viewport visit the :ref:`Multiple Resolutions Tutorial <doc_multiple_resolutions>`
 For information on scaling and stretching with the Root Viewport visit the :ref:`Multiple Resolutions Tutorial <doc_multiple_resolutions>`
 
 
 Worlds
 Worlds
@@ -137,7 +148,8 @@ It is possible to query a capture of the :ref:`Viewport <class_Viewport>` conten
 Viewport, this is effectively a screen capture. This is done with the
 Viewport, this is effectively a screen capture. This is done with the
 following code:
 following code:
 
 
-::
+.. tabs::
+ .. code-tab:: gdscript GDScript
 
 
    # Retrieve the captured Image using get_image().
    # Retrieve the captured Image using get_image().
    var img = get_viewport().get_texture().get_image()
    var img = get_viewport().get_texture().get_image()
@@ -146,16 +158,32 @@ following code:
    # Set sprite texture.
    # Set sprite texture.
    sprite.texture = tex
    sprite.texture = tex
 
 
+ .. code-tab:: csharp
+
+    // Retrieve the captured Image using get_image().
+    var img = GetViewport().GetTexture().GetImage();
+    // Convert Image to ImageTexture.
+    var tex = ImageTexture.CreateFromImage(img);
+    // Set sprite texture.
+    sprite.Texture = tex;
+
 But if you use this in ``_ready()`` or from the first frame of the :ref:`Viewport's <class_Viewport>` initialization,
 But if you use this in ``_ready()`` or from the first frame of the :ref:`Viewport's <class_Viewport>` initialization,
 you will get an empty texture because there is nothing to get as texture. You can deal with
 you will get an empty texture because there is nothing to get as texture. You can deal with
 it using (for example):
 it using (for example):
 
 
-::
+.. tabs::
+ .. code-tab:: gdscript GDScript
 
 
    # Wait until the frame has finished before getting the texture.
    # Wait until the frame has finished before getting the texture.
    await RenderingServer.frame_post_draw
    await RenderingServer.frame_post_draw
    # You can get the image after this.
    # You can get the image after this.
 
 
+ .. code-tab:: csharp
+
+    // Wait until the frame has finished before getting the texture.
+    await RenderingServer.Singleton.ToSignal(RenderingServer.SignalName.FramePostDraw);
+    // You can get the image after this.
+
 Viewport Container
 Viewport Container
 ------------------
 ------------------
 
 
@@ -218,12 +246,19 @@ When rendering to a :ref:`SubViewport <class_SubViewport>`, whatever is inside w
 visible in the scene editor. To display the contents, you have to draw the SubViewport's :ref:`ViewportTexture <class_ViewportTexture>` somewhere.
 visible in the scene editor. To display the contents, you have to draw the SubViewport's :ref:`ViewportTexture <class_ViewportTexture>` somewhere.
 This can be requested via code using (for example):
 This can be requested via code using (for example):
 
 
-::
+.. tabs::
+ .. code-tab:: gdscript GDScript
 
 
     # This gives us the ViewportTexture.
     # This gives us the ViewportTexture.
     var tex = viewport.get_texture()
     var tex = viewport.get_texture()
     sprite.texture = tex
     sprite.texture = tex
 
 
+ .. code-tab:: csharp
+
+    // This gives us the ViewportTexture.
+    var tex = viewport.GetTexture();
+    sprite.Texture = tex;
+
 Or it can be assigned in the editor by selecting "New ViewportTexture"
 Or it can be assigned in the editor by selecting "New ViewportTexture"
 
 
 .. image:: img/texturemenu.webp
 .. image:: img/texturemenu.webp
@@ -245,6 +280,6 @@ This flexibility allows users to render an image once and then use the texture w
 
 
 .. note::
 .. note::
 
 
-    Make sure to check the Viewport demos. They are available in the 
+    Make sure to check the Viewport demos. They are available in the
     viewport folder of the demos archive, or at
     viewport folder of the demos archive, or at
     https://github.com/godotengine/godot-demo-projects/tree/master/viewport.
     https://github.com/godotengine/godot-demo-projects/tree/master/viewport.