class Evas_3D_Scene (Evas_3D_Object, Evas.Common_Interface)
{
   legacy_prefix: null;
   data: Evas_3D_Scene_Data;
   methods {
      size_set {
         /*
           Set the resolution of a scene.

           A scene should be rendered to be displayed through an image objects. The
           resolution defines size of the internal surface holding the rendered result.

           @ingroup Evas_3D_Scene
          */
         params {
            @in int w;  /*@ Width of the resolution. */
            @in int h; /*@ Height of the resolution. */
         }
      }

      size_get @const {
         /*
           Get the internal resolution of a scene.

           @ingroup Evas_3D_Scene
          */
         params {
            @out int w;  /*@ Pointer to receive width of the resolution. */
            @out int h; /*@ Pointer to receive height of the resolution. */
         }
      }

      background_color_set {
         /*
           Set the background color of a scene.

           Background color defines initial color of pixels before a scene is rendered.
           If you want to display a scene with background evas objects are still
           remaining as if it was the background, set the alpha term to 0.0.

           Default background color is (0.0, 0.0, 0.0, 0.0).

           @ingroup Evas_3D_Scene
          */
         params {
            @in Evas_Real r; /*@ Red component of the background color. */
            @in Evas_Real g; /*@ Green component of the background color. */
            @in Evas_Real b; /*@ Blue component of the background color. */
            @in Evas_Real a; /*@ Alpha component of the background color. */
         }
      }

      background_color_get @const {
         /*
           Get the background color of a scene.

           @ingroup Evas_3D_Scene
          */
         params {
            @out Evas_Real r; /*@ Pointer to receive red component of the background color.*/
            @out Evas_Real g; /*@ Pointer to receive green component of the background color. */
            @out Evas_Real b; /*@ Pointer to receive blue component of the background color. */
            @out Evas_Real a; /*@ Pointer to receive alpha component of the background color. */
         }
      }

      pick @const {
         /*
           Get information on the most front visible mesh for the given position.

           (x, y) is the screen coordinate of the given scene. That is, left-top is
           (0, 0) and right-bottom is (w, h) where (w, h) is the size of the scene.
           The texture coordinate is useful when using proxy texture source.

           @ingroup Evas_3D_Scene
          */
         return: bool;
         params {
            @in Evas_Real x;         /*@ X coordinate of the picking position. */
            @in Evas_Real y;         /*@ Y coordinate of the picking position. */
            @out Evas_3D_Node *node; /*@ Pointer to receive the node contains the picked mesh. */
            @out Evas_3D_Mesh *mesh; /*@ Pointer to receive the picked mesh. */
            @out Evas_Real s;        /*@ Pointer to receive the texture "s" coordinate. */
            @out Evas_Real t;        /*@ Pointer to receive the texture "t" coordinate. */
         }
      }

      exist @const {
         /*
           Search given node in the given position.

           @ingroup Evas_3D_Scene
         */
         return: Evas_3D_Node *;
         params {
            @in Evas_Real x;         /*@ X coordinate of the picking position. */
            @in Evas_Real y;         /*@ Y coordinate of the picking position. */
            @in Evas_3D_Node *node;  /*@ Node for search. */
         }
      }

      pick_member_list_get @const {
         /*
           Get list of the all root members from scene in the given position.

           @ingroup Evas_3D_Scene
         */
         return: list<Evas_3D_Node *> *;
         params {
            @in Evas_Real x;         /*@ X coordinate of the picking position. */
            @in Evas_Real y;         /*@ Y coordinate of the picking position. */
         }
      }
      shadows_enable_set {
         /*
           Enable or disable shadows on given scene

           If shadows_enabled @c EINA_TRUE, the objects in the scene can throw shadow to another objects located behind them.
           The depth map used for shading. Directed and projective light sources are supported.

           @ingroup Evas_3D_Scene
          */
         params {
            @in bool shadows_enabled;  /*@ shadows enabled status. */
         }
      }

      shadows_enable_get @const {
         /*
           Get shadows enabled status for given scene.
           @return The shadows enabled status.

           @ingroup Evas_3D_Scene
         */
         return: bool;
         params {
         }
      }
   }
   properties {

      root_node {
         set {
            /*
              Set the root node of a scene.

              @ingroup Evas_3D_Scene
             */
         }
         get {
            /*
              Get the root node of a scene.

              @return        The root node of the given scene.

              @ingroup Evas_3D_Scene
             */
         }
         values {
            Evas_3D_Node *node; /*@ A node which will be used as a root node for the scene. */
         }
      }

      camera_node {
         set {
            /*
              Set the camera node of a scene.

              @ingroup Evas_3D_Scene
             */
         }
         get {
            /*
              Get the camera node of a scene.

              @return        The camera node of the given scene.

              @ingroup Evas_3D_Scene
             */
         }
         values {
            Evas_3D_Node *node; /*@ A node which will be used as a camera node for the scene. */
         }
      }
   }
   implements {
      Eo.Base.constructor;
      Evas_3D_Object.update_notify;
      Evas_3D_Object.change_notify;
   }

}
