summaryrefslogtreecommitdiff
path: root/src/lib/evas/Evas_Common.h
diff options
context:
space:
mode:
authorCedric Bail <cedric.bail@free.fr>2014-04-25 19:28:38 +0200
committerCedric Bail <cedric.bail@free.fr>2014-04-25 19:29:08 +0200
commit53a9fcf30175b6689f2c683cab41d80d538f0dd5 (patch)
treea0c99f6a0becd3aca9ca3ab63517fa0015ff43b3 /src/lib/evas/Evas_Common.h
parentb35dfc5f05377c71c9b7f649018001b66764d971 (diff)
evas: remove Evas_3D legacy API.
Diffstat (limited to 'src/lib/evas/Evas_Common.h')
-rw-r--r--src/lib/evas/Evas_Common.h1820
1 files changed, 0 insertions, 1820 deletions
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h
index fb3d2c5082..175aeee4da 100644
--- a/src/lib/evas/Evas_Common.h
+++ b/src/lib/evas/Evas_Common.h
@@ -5827,1823 +5827,3 @@ typedef enum _Evas_3D_Mesh_File_Type
5827{ 5827{
5828 EVAS_3D_MESH_FILE_TYPE_MD2 = 0, /**< Quake's MD2 mesh file format */ 5828 EVAS_3D_MESH_FILE_TYPE_MD2 = 0, /**< Quake's MD2 mesh file format */
5829} Evas_3D_Mesh_File_Type; 5829} Evas_3D_Mesh_File_Type;
5830
5831/**
5832 * Create a new scene object on the given Evas @p e canvas.
5833 *
5834 * @param e The given canvas.
5835 * @return A new scene object.
5836 *
5837 * @since 1.10
5838 *
5839 * @ingroup Evas_3D_Scene
5840 */
5841EAPI Evas_3D_Scene *evas_3d_scene_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5842
5843/**
5844 * Set the root node of a scene.
5845 *
5846 * @param scene A scene.
5847 * @param node A node which will be used as a root node for the scene.
5848 *
5849 * @see evas_3d_scene_root_node_set()
5850 * @since 1.10
5851 *
5852 * @ingroup Evas_3D_Scene
5853 */
5854EAPI void evas_3d_scene_root_node_set(Evas_3D_Scene *scene, Evas_3D_Node *node) EINA_ARG_NONNULL(1);
5855
5856/**
5857 * Get the root node of a scene.
5858 *
5859 * @param scene The given scene.
5860 * @return The root node of the given scene.
5861 *
5862 * @see evas_3d_scene_root_node_get()
5863 * @since 1.10
5864 *
5865 * @ingroup Evas_3D_Scene
5866 */
5867EAPI Evas_3D_Node *evas_3d_scene_root_node_get(const Evas_3D_Scene *scene) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5868
5869/**
5870 * Set the camera node of a scene.
5871 *
5872 * @param scene The given scene.
5873 * @param node A node which will be used as a camera node for the scene.
5874 *
5875 * @see evas_3d_scene_camera_node_get()
5876 * @since 1.10
5877 *
5878 * @ingroup Evas_3D_Scene
5879 */
5880EAPI void evas_3d_scene_camera_node_set(Evas_3D_Scene *scene, Evas_3D_Node *node) EINA_ARG_NONNULL(1);
5881
5882/**
5883 * Get the camera node of a scene.
5884 *
5885 * @param scene The given scene.
5886 * @return The camera node of the given scene.
5887 *
5888 * @see evas_3d_scene_camera_node_set()
5889 * @since 1.10
5890 *
5891 * @ingroup Evas_3D_Scene
5892 */
5893EAPI Evas_3D_Node *evas_3d_scene_camera_node_get(const Evas_3D_Scene *scene) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5894
5895/**
5896 * Set the resolution of a scene.
5897 *
5898 * @param scene The given scene.
5899 * @param w Width of the resolution.
5900 * @param h Height of the resolution.
5901 *
5902 * A scene should be rendered to be displayed through an image objects. The
5903 * resolution defines size of the internal surface holding the rendered result.
5904 *
5905 * @see evas_3d_scene_size_get()
5906 * @since 1.10
5907 *
5908 * @ingroup Evas_3D_Scene
5909 */
5910EAPI void evas_3d_scene_size_set(Evas_3D_Scene *scene, int w, int h) EINA_ARG_NONNULL(1);
5911
5912/**
5913 * Get the internal resolution of a scene.
5914 *
5915 * @param scene The given scene.
5916 * @param w Pointer to receive width of the resolution.
5917 * @param h Pointer to receive height of the resolution.
5918 *
5919 * @see evas_3d_scene_size_set()
5920 * @since 1.10
5921 *
5922 * @ingroup Evas_3D_Scene
5923 */
5924EAPI void evas_3d_scene_size_get(const Evas_3D_Scene *scene, int *w, int *h) EINA_ARG_NONNULL(1);
5925
5926/**
5927 * Set the background color of a scene.
5928 *
5929 * @param scene The given scene.
5930 * @param r Red component of the background color.
5931 * @param g Green component of the background color.
5932 * @param b Blue component of the background color.
5933 * @param a Alpha component of the background color.
5934 *
5935 * Background color defines initial color of pixels before a scene is rendered.
5936 * If you want to display a scene with background evas objects are still
5937 * remaining as if it was the background, set the alpha term to 0.0.
5938 *
5939 * Default background color is (0.0, 0.0, 0.0, 0.0).
5940 *
5941 * @see evas_3d_scene_background_color_get()
5942 * @since 1.10
5943 *
5944 * @ingroup Evas_3D_Scene
5945 */
5946EAPI void evas_3d_scene_background_color_set(Evas_3D_Scene *scene, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) EINA_ARG_NONNULL(1);
5947
5948/**
5949 * Get the background color of a scene.
5950 *
5951 * @param scene The given scene.
5952 * @param r Pointer to receive red component of the background color.
5953 * @param g Pointer to receive green component of the background color.
5954 * @param b Pointer to receive blue component of the background color.
5955 * @param a Pointer to receive alpha component of the background color.
5956 *
5957 * @see evas_3d_scene_background_color_set()
5958 * @since 1.10
5959 *
5960 * @ingroup Evas_3D_Scene
5961 */
5962EAPI void evas_3d_scene_background_color_get(const Evas_3D_Scene *scene, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a) EINA_ARG_NONNULL(1);
5963
5964/**
5965 * Get information on the most front visible mesh for the given position.
5966 *
5967 * @param scene The given scene.
5968 * @param x X coordinate of the picking position.
5969 * @param y Y coordinate of the picking position.
5970 * @param node Pointer to receive the node contains the picked mesh.
5971 * @param mesh Pointer to receive the picked mesh.
5972 * @param s Pointer to receive the texture "s" coordinate.
5973 * @param t Pointer to receive the texture "t" coordinate.
5974 *
5975 * (x, y) is the screen coordinate of the given scene. That is, left-top is
5976 * (0, 0) and right-bottom is (w, h) where (w, h) is the size of the scene.
5977 * The texture coordinate may be useful when using proxy texture source.
5978 *
5979 * @since 1.10
5980 *
5981 * @ingroup Evas_3D_Scene
5982 */
5983EAPI Eina_Bool evas_3d_scene_pick(const Evas_3D_Scene *scene, Evas_Real x, Evas_Real y, Evas_3D_Node **node, Evas_3D_Mesh **mesh, Evas_Real *s, Evas_Real *t) EINA_ARG_NONNULL(1);
5984
5985/**
5986 * Create a new node on the given Evas @p canvas.
5987 *
5988 * @param e The given canvas.
5989 * @param type The type of the node.
5990 * @return The created node handle.
5991 *
5992 * @see evas_3d_node_del()
5993 * @since 1.10
5994 *
5995 * @ingroup Evas_3D_Node
5996 */
5997EAPI Evas_3D_Node *evas_3d_node_add(Evas *e, Evas_3D_Node_Type type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5998
5999/**
6000 * Delete a node from its belonging Evas canvas.
6001 *
6002 * @param node The given node.
6003 *
6004 * @see evas_3d_node_add()
6005 *
6006 * @since 1.10
6007 *
6008 * @ingroup Evas_3D_Node
6009 */
6010EAPI void evas_3d_node_del(Evas_3D_Node *node) EINA_ARG_NONNULL(1);
6011
6012/**
6013 * Get the type of the given node.
6014 *
6015 * @param node The given node.
6016 * @return The type of the given node.
6017 *
6018 * @see evas_3d_node_add()
6019 *
6020 * @since 1.10
6021 *
6022 * @ingroup Evas_3D_Node
6023 */
6024EAPI Evas_3D_Node_Type evas_3d_node_type_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6025
6026/**
6027 * Add a member node to the given node.
6028 *
6029 * @param node The given node which will be the parent.
6030 * @param member Node object to be added.
6031 *
6032 * Nodes can be constructed into N-ary tree structure like other ordinary scene
6033 * graph. Basically a node inherit transforms from its parent.
6034 *
6035 * @see evas_3d_node_parent_get()
6036 * @see evas_3d_node_member_del()
6037 * @see evas_3d_node_member_list_get()
6038 *
6039 * @since 1.10
6040 *
6041 * @ingroup Evas_3D_Node
6042 */
6043EAPI void evas_3d_node_member_add(Evas_3D_Node *node, Evas_3D_Node *member) EINA_ARG_NONNULL(1, 2);
6044
6045/**
6046 * Delete a member node from the given node.
6047 *
6048 * @param node The given node.
6049 * @param member Member node to be deleted from the given node.
6050 *
6051 * @see evas_3d_node_member_add()
6052 *
6053 * @ingroup Evas_3D_Node
6054 */
6055EAPI void evas_3d_node_member_del(Evas_3D_Node *node, Evas_3D_Node *member) EINA_ARG_NONNULL(1, 2);
6056
6057/**
6058 * Get the parent node of the given node.
6059 *
6060 * @param node The given node.
6061 * @return The parent node of the given node.
6062 *
6063 * @see evas_3d_node_member_add()
6064 *
6065 * @since 1.10
6066 *
6067 * @ingroup Evas_3D_Node
6068 */
6069EAPI Evas_3D_Node *evas_3d_node_parent_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6070
6071/**
6072 * Get the list of member nodes of the given node.
6073 *
6074 * @param node The given node.
6075 * @return The list of member nodes if any or @c NULL if there are none.
6076 *
6077 * @see evas_3d_node_member_add()
6078 *
6079 * @since 1.10
6080 *
6081 * @ingroup Evas_3D_Node
6082 */
6083EAPI const Eina_List *evas_3d_node_member_list_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6084
6085/**
6086 * @defgroup Evas_3D_Node_Transform
6087 * @ingroup Evas_3D_Node
6088 *
6089 * Functions that manipulate node transforms.
6090 *
6091 * Evas_3D_Node does not provide standard 4x4 matrix to transform something.
6092 * Instead, one can set position, orientation and scale of a node separately.
6093 * A node will be first scaled and rotated and then translated according to its
6094 * position, orientation and scale. Each transform attributes can be set to
6095 * inherit from its parent or not.
6096 */
6097
6098/**
6099 * Set the position of the given node.
6100 *
6101 * @param node The given node.
6102 * @param x X coordinate of the position.
6103 * @param y Y coordinate of the position.
6104 * @param z Z coordinate of the position.
6105 *
6106 * According to the inheritance flag, (x, y, z) can be a world space position or
6107 * parent space position.
6108 *
6109 * Default position is (0.0, 0.0, 0.0).
6110 *
6111 * @see evas_3d_node_position_inherit_set()
6112 * @see evas_3d_node_position_get()
6113 *
6114 * @since 1.10
6115 *
6116 * @ingroup Evas_3D_Node_Transform
6117 */
6118EAPI void evas_3d_node_position_set(Evas_3D_Node *node, Evas_Real x, Evas_Real y, Evas_Real z) EINA_ARG_NONNULL(1);
6119
6120/**
6121 * Set the orientation of the given node using quaternion.
6122 *
6123 * @param node The given node.
6124 * @param x X term of the orientation quaternion (w, x, y, z)
6125 * @param y Y term of the orientation quaternion (w, x, y, z)
6126 * @param z Z term of the orientation quaternion (w, x, y, z)
6127 * @param w W term of the orientation quaternion (w, x, y, z)
6128 *
6129 * According the the inheritance flag, (w, x, y, z) can be a world space
6130 * orientation or parent space orientation.
6131 *
6132 * Default orientation is (1.0, 0.0, 0.0, 0.0) (identity quaternion).
6133 *
6134 * @see evas_3d_node_orientation_inherit_set()
6135 *
6136 * @since 1.10
6137 *
6138 * @ingroup Evas_3D_Node_Transform
6139 */
6140EAPI void evas_3d_node_orientation_set(Evas_3D_Node *node, Evas_Real x, Evas_Real y, Evas_Real z, Evas_Real w) EINA_ARG_NONNULL(1);
6141
6142/**
6143 * Set the orientation of the given node using axis-angle.
6144 *
6145 * @param node The given node.
6146 * @param angle Rotation angle.
6147 * @param x X term of the rotation axis.
6148 * @param y Y term of the rotation axis.
6149 * @param z Z term of the rotation axis.
6150 *
6151 * @see evas_3d_node_orientation_set()
6152 *
6153 * @since 1.10
6154 *
6155 * @ingroup Evas_3D_Node_Transform
6156 */
6157EAPI void evas_3d_node_orientation_angle_axis_set(Evas_3D_Node *node, Evas_Real angle, Evas_Real x, Evas_Real y, Evas_Real z) EINA_ARG_NONNULL(1);
6158
6159/**
6160 * Set the scale of the given node.
6161 *
6162 * @param node The given node.
6163 * @param x Scale factor along X-axis.
6164 * @param y Scale factor along Y-axis.
6165 * @param z Scale factor along Z-axis.
6166 *
6167 * According to the inheritance flag, (x, y, z) can be a world space scale or
6168 * parent space scale. Be careful when using non-uniform scale factor with
6169 * inheritance, each transform attributes are not affected by other attributes.
6170 *
6171 * Default scale is (1.0, 1.0, 1.0).
6172 *
6173 * @see evas_3d_node_scale_inherit_set()
6174 * @see evas_3d_node_scale_get()
6175 *
6176 * @since 1.10
6177 *
6178 * @ingroup Evas_3D_Node_Transform
6179 */
6180EAPI void evas_3d_node_scale_set(Evas_3D_Node *node, Evas_Real x, Evas_Real y, Evas_Real z) EINA_ARG_NONNULL(1);
6181
6182/**
6183 * Get the position of the given node.
6184 *
6185 * @param node The given node.
6186 * @param Space where the target position belongs to.
6187 * @param x Pointer to receive X coordinate of the position.
6188 * @param y Pointer to receive Y coordinate of the position.
6189 * @param z Pointer to receive Z coordinate of the position.
6190 *
6191 * @see evas_3d_node_position_set()
6192 *
6193 * @since 1.10
6194 *
6195 * @ingroup Evas_3D_Node_Transform
6196 */
6197EAPI void evas_3d_node_position_get(const Evas_3D_Node *node, Evas_3D_Space space, Evas_Real *x, Evas_Real *y, Evas_Real *z) EINA_ARG_NONNULL(1);
6198
6199/**
6200 * Get the orientation of the given node as quaternion.
6201 *
6202 * @param node The given node.
6203 * @param space Space where the target position belongs to.
6204 * @param x Pointer to receive X term of the orientation quaternion.
6205 * @param y Pointer to receive Y term of the orientation quaternion.
6206 * @param z Pointer to receive Z term of the orientation quaternion.
6207 * @param w Pointer to receive W term of the orientation quaternion.
6208 *
6209 * @see evas_3d_node_orientation_set()
6210 *
6211 * @since 1.10
6212 *
6213 * @ingroup Evas_3D_Node_Transform
6214 */
6215EAPI void evas_3d_node_orientation_get(const Evas_3D_Node *node, Evas_3D_Space space, Evas_Real *x, Evas_Real *y, Evas_Real *z, Evas_Real *w) EINA_ARG_NONNULL(1);
6216
6217/**
6218 * Get the scale of the given node
6219 *
6220 * @param node The given node.
6221 * @param space Space where the target position belongs to.
6222 * @param x Scale facator to receive along X-axis.
6223 * @param x Scale facator to receive along Y-axis.
6224 * @param x Scale facator to receive along Z-axis.
6225 *
6226 * @see evas_3d_node_scale_set()
6227 *
6228 * @since 1.10
6229 *
6230 * @ingroup Evas_3D_Node_Transform
6231 */
6232EAPI void evas_3d_node_scale_get(const Evas_3D_Node *node, Evas_3D_Space space, Evas_Real *x, Evas_Real *y, Evas_Real *z) EINA_ARG_NONNULL(1);
6233
6234/**
6235 * Set the position inheritance of the given node.
6236 *
6237 * @param node The given node.
6238 * @param inherit Whether to inherit parent position @c EINA_TRUE or not
6239 * @c EINA_FALSE.
6240 *
6241 * When inheritance is enabled, a node's world space position is determined by
6242 * adding the parent node's world position and the node's position, otherwise,
6243 * the node's position will be the world space position.
6244 *
6245 * @since 1.10
6246 *
6247 * @ingroup Evas_3D_Node_Transform
6248 */
6249EAPI void evas_3d_node_position_inherit_set(Evas_3D_Node *node, Eina_Bool inherit) EINA_ARG_NONNULL(1);
6250
6251/**
6252 * Set the orientation inheritance of the given node.
6253 *
6254 * @param node The given node.
6255 * @param inherit Whether to inherit parent orientation @c EINA_TRUE or not
6256 * @c EINA_FALSE.
6257 *
6258 * When inheritance is enabled, a node's world space orientation is determined
6259 * by multiplying the parent node's world orientation and the node's
6260 * orientation, otherwise, the node's orientation will be the world space
6261 * orientation.
6262 *
6263 * @since 1.10
6264 *
6265 * @ingroup Evas_3D_Node_Transform
6266 */
6267EAPI void evas_3d_node_orientation_inherit_set(Evas_3D_Node *node, Eina_Bool inherit) EINA_ARG_NONNULL(1);
6268
6269/**
6270 * Set the scale inheritance of the given node.
6271 *
6272 * @param node The given node.
6273 * @param inherit Whether to inherit parent scale @c EINA_TRUE or not
6274 * @c EINA_FALSE.
6275 *
6276 * When inheritance is enabled, a node's world space scale is determined by
6277 * multiplying the parent node's world scale and the node's scale, otherwise,
6278 * the node's scale will be the world space scale.
6279 *
6280 * @since 1.10
6281 *
6282 * @ingroup Evas_3D_Node_Transform
6283 */
6284EAPI void evas_3d_node_scale_inherit_set(Evas_3D_Node *node, Eina_Bool inherit) EINA_ARG_NONNULL(1);
6285
6286/**
6287 * Get the position inheritance of the given node.
6288 *
6289 * @param node The given node.
6290 * @return @c EINA_TRUE if inheritance is enabled, or @c EINA_FALSE if not.
6291 *
6292 * @see evas_3d_node_position_inherit_set()
6293 * @since 1.10
6294 *
6295 * @ingroup Evas_3D_Node_Transform
6296 */
6297EAPI Eina_Bool evas_3d_node_position_inherit_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6298
6299/**
6300 * Get the orientation inheritance of the given node.
6301 *
6302 * @param node The given node.
6303 * @return @c EINA_TRUE if inheritance is enabled, or @c EINA_FALSE if not.
6304 *
6305 * @see evas_3d_node_orientation_inherit_set()
6306 * @since 1.10
6307 *
6308 * @ingroup Evas_3D_Node_Transform
6309 */
6310EAPI Eina_Bool evas_3d_node_orientation_inherit_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6311
6312/**
6313 * Get the scale inheritance flag of the given node.
6314 *
6315 * @param node The given node.
6316 * @return @c EINA_TRUE if inheritance is enabled, or @c EINA_FALSE if not.
6317 *
6318 * @see evas_3d_node_scale_inherit_set()
6319 * @since 1.10
6320 *
6321 * @ingroup Evas_3D_Node_Transform
6322 */
6323EAPI Eina_Bool evas_3d_node_scale_inherit_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6324
6325/**
6326 * Rotate the given node to look at desired position.
6327 *
6328 * @param node The given node.
6329 * @param target_space Space where the target position belongs to.
6330 * @param x X coordinate of the target position.
6331 * @param y Y coordinate of the target position.
6332 * @param z Z coordinate of the target position.
6333 * @param up_space Space where the up vector belongs to.
6334 * @param ux X term of the up vector.
6335 * @param uy Y term of the up vector.
6336 * @param uz Z term of the up vector.
6337 *
6338 * This function rotate the given node so that its forward vector (negative
6339 * Z-axis) points to the desired position and the up vector coincide with the
6340 * given up vector.
6341 *
6342 * @see evas_3d_node_orientation_set()
6343 *
6344 * @since 1.10
6345 *
6346 * @ingroup Evas_3D_Node_Transform
6347 */
6348EAPI void evas_3d_node_look_at_set(Evas_3D_Node *node, Evas_3D_Space target_space, Evas_Real x, Evas_Real y, Evas_Real z, Evas_3D_Space up_space, Evas_Real ux, Evas_Real uy, Evas_Real uz) EINA_ARG_NONNULL(1);
6349
6350/**
6351 * Set a camera to the given node.
6352 *
6353 * @param node The given node.
6354 * @param camera The camera to be set.
6355 *
6356 * @warning If the node type should be EVAS_3D_NODE_TYPE_CAMERA. Otherwise
6357 * nothing will be happened.
6358 *
6359 * @see evas_3d_node_add()
6360 *
6361 * @since 1.10
6362 *
6363 * @ingroup Evas_3D_Node
6364 */
6365EAPI void evas_3d_node_camera_set(Evas_3D_Node *node, Evas_3D_Camera *camera) EINA_ARG_NONNULL(1);
6366
6367/**
6368 * Get the camera of the given node.
6369 *
6370 * @param node The given node.
6371 * @return The camera of the given node if any, or @c NULL if there's none.
6372 *
6373 * @see evas_3d_node_camera_set()
6374 * @since 1.10
6375 *
6376 * @ingroup Evas_3D_Node
6377 */
6378EAPI Evas_3D_Camera *evas_3d_node_camera_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6379
6380/**
6381 * Set the light of the given node.
6382 *
6383 * @param node The given node.
6384 * @param light The light to be set.
6385 *
6386 * @warning If the node type should be EVAS_3D_NODE_TYPE_LIGHT. Otherwise
6387 * nothing will be happened.
6388 *
6389 * @see evas_3d_node_add()
6390 * @since 1.10
6391 *
6392 * @ingroup Evas_3D_Node
6393 */
6394EAPI void evas_3d_node_light_set(Evas_3D_Node *node, Evas_3D_Light *light) EINA_ARG_NONNULL(1);
6395
6396/**
6397 * Get the light of the given node.
6398 *
6399 * @param node The given node.
6400 * @return The light of the given node if any, or @c NULL if there's none.
6401 *
6402 * @see evas_3d_node_light_set()
6403 * @since 1.10
6404 *
6405 * @ingroup Evas_3D_Node
6406 */
6407EAPI Evas_3D_Light *evas_3d_node_light_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6408
6409/**
6410 * Add a mesh to the given node.
6411 *
6412 * @param node The given node.
6413 * @param mesh The mesh to be added.
6414 *
6415 * @warning If the node type should be EVAS_3D_NODE_TYPE_MESH. Otherwise
6416 * nothing will be happened.
6417 *
6418 * @see evas_3d_node_add()
6419 * @since 1.10
6420 *
6421 * @ingroup Evas_3D_Node
6422 */
6423EAPI void evas_3d_node_mesh_add(Evas_3D_Node *node, Evas_3D_Mesh *mesh) EINA_ARG_NONNULL(1);
6424
6425/**
6426 * Delete a mesh from the given node.
6427 *
6428 * @param node The given node.
6429 * @param mesh The mesh to be deleted.
6430 *
6431 * @warning If the node is not of type EVAS_3D_NODE_TYPE_MESH or the given mesh
6432 * does not belong to the given node, nothing will be happened.
6433 *
6434 * @see evas_3d_node_mesh_add()
6435 * @since 1.10
6436 *
6437 * @ingroup Evas_3D_Node
6438 */
6439EAPI void evas_3d_node_mesh_del(Evas_3D_Node *node, Evas_3D_Mesh *mesh) EINA_ARG_NONNULL(1);
6440
6441/**
6442 * Get the list of meshes of the given node.
6443 *
6444 * @param node The given node.
6445 * @return The list of meshes if any, or @c NULL if there're none.
6446 *
6447 * If there're no meshes in the given node, @c NULL will be returned.
6448 *
6449 * @warning If the node is not of type EVAS_3D_NODE_TYPE_MESH or the given mesh
6450 * does not belong to the given node, @c NULL will be returned.
6451 *
6452 * @see evas_3d_node_mesh_add()
6453 * @since 1.10
6454 *
6455 * @ingroup Evas_3D_Node
6456 */
6457EAPI const Eina_List *evas_3d_node_mesh_list_get(const Evas_3D_Node *node) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6458
6459/**
6460 * Set the animation frame number of the given node for the given mesh.
6461 *
6462 * @param node The given node.
6463 * @param mesh The given mesh.
6464 * @param frame The animation frame number.
6465 *
6466 * If the node is not of type EVAS_3D_NODE_TYPE_MESH or the given mesh does not
6467 * belong to the given mesh error mesh will be generated and nothing happens.
6468 *
6469 * Default mesh frame is 0.
6470 *
6471 * @see evas_3d_node_mesh_add()
6472 * @since 1.10
6473 *
6474 * @ingroup Evas_3D_Node
6475 */
6476EAPI void evas_3d_node_mesh_frame_set(Evas_3D_Node *node, Evas_3D_Mesh *mesh, int frame) EINA_ARG_NONNULL(1);
6477
6478/**
6479 * Set the animation frame number of the given node for the given mesh.
6480 *
6481 * @param node The given node.
6482 * @param mesh The given mesh.
6483 * @param frame The animation frame number.
6484 *
6485 * If the node is not of type EVAS_3D_NODE_TYPE_MESH or the given mesh does not
6486 * belong to the given mesh, nothing will be happened.
6487 *
6488 * @see evas_3d_node_mesh_add()
6489 * @since 1.10
6490 *
6491 * @ingroup Evas_3D_Node
6492 */
6493EAPI int evas_3d_node_mesh_frame_get(const Evas_3D_Node *node, Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6494
6495/**
6496 * Create a new camera on the given Evas @p canvas.
6497 *
6498 * @param e The given canvas.
6499 * @return The created camera handle.
6500 *
6501 * @since 1.10
6502 *
6503 * @ingroup Evas_3D_Camera
6504 */
6505EAPI Evas_3D_Camera *evas_3d_camera_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6506
6507/**
6508 * Delete a node from its belonging Evas canvas.
6509 *
6510 * @param camera The given camera.
6511 *
6512 * @see evas_3d_camera_add()
6513 * @since 1.10
6514 *
6515 * @ingroup Evas_3D_Camera
6516 */
6517EAPI void evas_3d_camera_del(Evas_3D_Camera *camera) EINA_ARG_NONNULL(1);
6518
6519/**
6520 * Set the projection matrix of the given camera.
6521 *
6522 * @param camera The given camera.
6523 * @param matrix Pointer to the array of 16 Evas_Real values in column major
6524 * order.
6525 *
6526 * Default projection matrix is identity matrix.
6527 *
6528 * @see evas_3d_camera_projection_perspective_set()
6529 * @see evas_3d_camera_projection_ortho_set()
6530 * @see evas_3d_camera_projection_frustum_set()
6531 *
6532 * @since 1.10
6533 *
6534 * @ingroup Evas_3D_Camera
6535 */
6536EAPI void evas_3d_camera_projection_matrix_set(Evas_3D_Camera *camera, const Evas_Real *matrix) EINA_ARG_NONNULL(1);
6537
6538/**
6539 * Get the projection matrix of the given camera.
6540 *
6541 * @param camera The given camera.
6542 * @param matrix Pointer to receive the 16 Evas_Real values in column major
6543 * order.
6544 *
6545 * @see evas_3d_camera_projection_matrix_set()
6546 *
6547 * @since 1.10
6548 *
6549 * @ingroup Evas_3D_Camera
6550 */
6551EAPI void evas_3d_camera_projection_matrix_get(const Evas_3D_Camera *camera, Evas_Real *matrix) EINA_ARG_NONNULL(1, 2);
6552
6553/**
6554 * Set the projection matrix of the given camera with perspective projection.
6555 *
6556 * @param camera The given camera.
6557 * @param fovy Field of view angle in Y direction.
6558 * @param aspect Aspect ratio.
6559 * @param near Distance to near clipping plane.
6560 * @param far Distance to far clipping plane.
6561 *
6562 * @see evas_3d_camera_projection_matrix_set()
6563 * @since 1.10
6564 *
6565 * @ingroup Evas_3D_Camera
6566 */
6567EAPI void evas_3d_camera_projection_perspective_set(Evas_3D_Camera *camera, Evas_Real fovy, Evas_Real aspect, Evas_Real near, Evas_Real far) EINA_ARG_NONNULL(1);
6568
6569/**
6570 * Set the projection matrix of the given camera with frustum projection.
6571 *
6572 * @param camera The given camera.
6573 * @param left Left X coordinate of the near clipping plane.
6574 * @param right Right X coordinate of the near clipping plane.
6575 * @param top Top Y coordinate of the near clipping plane.
6576 * @param bottom Bottom Y coordinate of the near clipping plane.
6577 * @param near Distance to near clipping plane.
6578 * @param far Distance to far clipping plane.
6579 *
6580 * @see evas_3d_camera_projection_matrix_set()
6581 * @since 1.10
6582 *
6583 * @ingroup Evas_3D_Camera
6584 */
6585EAPI void evas_3d_camera_projection_frustum_set(Evas_3D_Camera *camera, Evas_Real left, Evas_Real right, Evas_Real bottom, Evas_Real top, Evas_Real near, Evas_Real far) EINA_ARG_NONNULL(1);
6586
6587/**
6588 * Set the projection matrix of the given camera with orthogonal projection.
6589 *
6590 * @param camera The given camera.
6591 * @param left Left X coordinate of the near clipping plane.
6592 * @param right Right X coordinate of the near clipping plane.
6593 * @param top Top Y coordinate of the near clipping plane.
6594 * @param bottom Bottom Y coordinate of the near clipping plane.
6595 * @param near Distance to near clipping plane.
6596 * @param far Distance to far clipping plane.
6597 *
6598 * @see evas_3d_camera_projection_matrix_set()
6599 * @since 1.10
6600 *
6601 * @ingroup Evas_3D_Camera
6602 */
6603EAPI void evas_3d_camera_projection_ortho_set(Evas_3D_Camera *camera, Evas_Real left, Evas_Real right, Evas_Real bottom, Evas_Real top, Evas_Real near, Evas_Real far) EINA_ARG_NONNULL(1);
6604
6605/**
6606 * Create a new light on the given Evas @p canvas.
6607 *
6608 * @param e The given canvas.
6609 * @return The created light handle.
6610 *
6611 * @since 1.10
6612 *
6613 * @ingroup Evas_3D_Light
6614 */
6615EAPI Evas_3D_Light *evas_3d_light_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6616
6617/**
6618 * Delete a node from its belonging Evas canvas.
6619 *
6620 * @param light The given light.
6621 *
6622 * @see evas_3d_light_add()
6623 * @since 1.10
6624 *
6625 * @ingroup Evas_3D_Light
6626 */
6627EAPI void evas_3d_light_del(Evas_3D_Light *light) EINA_ARG_NONNULL(1);
6628
6629/**
6630 * Set the directional flag of the given light.
6631 *
6632 * @param light The given light.
6633 * @param directional Whether the light is directional (@c EINA_TRUE), or not
6634 * (@c EINA_FALSE).
6635 *
6636 * Directional light is a type of light which is infinitely far away with no
6637 * attenuation. The light direction is determined by the containing node's
6638 * forward vector (negative Z-axis).
6639 *
6640 * By default, directional is not enabled.
6641 *
6642 * @see evas_3d_node_look_at_set()
6643 * @since 1.10
6644 *
6645 * @ingroup Evas_3D_Light
6646 */
6647EAPI void evas_3d_light_directional_set(Evas_3D_Light *light, Eina_Bool directional) EINA_ARG_NONNULL(1);
6648
6649/**
6650 * Get the directional flag of the given light.
6651 *
6652 * @param light The given light.
6653 * @return @c EINA_TRUE if the light is directional or @c EINA_FALSE if not.
6654 *
6655 * @see evas_3d_light_directional_set()
6656 * @since 1.10
6657 *
6658 * @ingroup Evas_3D_Light
6659 */
6660EAPI Eina_Bool evas_3d_light_directional_get(const Evas_3D_Light *light) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6661
6662/**
6663 * Set the ambient color of the given light.
6664 *
6665 * @param light The given light.
6666 * @param r Red component of the ambient color between [0.0, 1.0].
6667 * @param g Green component of the ambient color between [0.0, 1.0].
6668 * @param b Blue component of the ambient color between [0.0, 1.0].
6669 * @param a Alpha component of the ambient color between [0.0, 1.0].
6670 *
6671 * Default ambient color is (0.0, 0.0, 0.0, 1.0).
6672 *
6673 * @since 1.10
6674 *
6675 * @ingroup Evas_3D_Light
6676 */
6677EAPI void evas_3d_light_ambient_set(Evas_3D_Light *light, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) EINA_ARG_NONNULL(1);
6678
6679/**
6680 * Get the ambient color of the given light.
6681 *
6682 * @param light The given light.
6683 * @param r Pointer to receive the red component of the ambient color.
6684 * @param g Pointer to receive the green component of the ambient color.
6685 * @param b Pointer to receive the blue component of the ambient color.
6686 * @param a Pointer to receive the alpha component of the ambient color.
6687 *
6688 * @see evas_3d_light_ambient_set()
6689 * @since 1.10
6690 *
6691 * @ingroup Evas_3D_Light
6692 */
6693EAPI void evas_3d_light_ambient_get(const Evas_3D_Light *light, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a) EINA_ARG_NONNULL(1);
6694
6695/**
6696 * Set the diffuse color of the given light.
6697 *
6698 * @param light The given light.
6699 * @param r Red component of the diffuse color between [0.0, 1.0].
6700 * @param g Green component of the diffuse color between [0.0, 1.0].
6701 * @param b Blue component of the diffuse color between [0.0, 1.0].
6702 * @param a Alpha component of the diffuse color between [0.0, 1.0].
6703 *
6704 * Default diffuse color is (1.0, 1.0, 1.0, 1.0).
6705 *
6706 * @since 1.10
6707 *
6708 * @ingroup Evas_3D_Light
6709 */
6710EAPI void evas_3d_light_diffuse_set(Evas_3D_Light *light, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) EINA_ARG_NONNULL(1);
6711
6712/**
6713 * Get the diffuse color of the given light.
6714 *
6715 * @param light The given light.
6716 * @param r Pointer to receive the red component of the diffuse color.
6717 * @param g Pointer to receive the green component of the diffuse color.
6718 * @param b Pointer to receive the blue component of the diffuse color.
6719 * @param a Pointer to receive the alpha component of the diffuse color.
6720 *
6721 * @see evas_3d_light_diffuse_set()
6722 * @since 1.10
6723 *
6724 * @ingroup Evas_3D_Light
6725 */
6726EAPI void evas_3d_light_diffuse_get(const Evas_3D_Light *light, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a) EINA_ARG_NONNULL(1);
6727
6728/**
6729 * Get the specular color of the given light.
6730 *
6731 * @param light The given light.
6732 * @param r Pointer to receive the red component of the specular color.
6733 * @param g Pointer to receive the green component of the specular color.
6734 * @param b Pointer to receive the blue component of the specular color.
6735 * @param a Pointer to receive the alpha component of the specular color.
6736 *
6737 * Default specular color is (1.0, 1.0, 1.0, 1.0).
6738 * @since 1.10
6739 *
6740 * @ingroup Evas_3D_Light
6741 */
6742EAPI void evas_3d_light_specular_set(Evas_3D_Light *light, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) EINA_ARG_NONNULL(1);
6743
6744/**
6745 * Get the specular color of the given light.
6746 *
6747 * @param light The given light.
6748 * @param r Pointer to receive the red component of the specular color.
6749 * @param g Pointer to receive the green component of the specular color.
6750 * @param b Pointer to receive the blue component of the specular color.
6751 * @param a Pointer to receive the alpha component of the specular color.
6752 *
6753 * @see evas_3d_light_specular_set()
6754 * @since 1.10
6755 *
6756 * @ingroup Evas_3D_Light
6757 */
6758EAPI void evas_3d_light_specular_get(const Evas_3D_Light *light, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a) EINA_ARG_NONNULL(1);
6759
6760/**
6761 * Set the spot exponent of the given light.
6762 *
6763 * @param light The given light.
6764 * @param exponent Spot exponent value.
6765 *
6766 * Higher spot exponent means intensity at the center of the cone is relatively
6767 * stronger. Zero exponent means the light intensity is evenly distibuted. The
6768 * spot exponent has no effect when the light is not spot light (spot cutoff
6769 * angle is less than 180 degree).
6770 *
6771 * Default spot exponent is 0.
6772 *
6773 * @see evas_3d_light_spot_cutoff_set()i
6774 * @since 1.10
6775 *
6776 * @ingroup Evas_3D_Light
6777 */
6778EAPI void evas_3d_light_spot_exponent_set(Evas_3D_Light *light, Evas_Real exponent) EINA_ARG_NONNULL(1);
6779
6780/**
6781 * Get the spot exponent of the given light.
6782 *
6783 * @param light The given light.
6784 * @return The spot exponent value.
6785 *
6786 * @see evas_3d_light_spot_exponent_set()
6787 * @since 1.10
6788 *
6789 * @ingroup Evas_3D_Light
6790 */
6791EAPI Evas_Real evas_3d_light_spot_exponent_get(const Evas_3D_Light *light) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6792
6793/**
6794 * Set the spot cutoff angle of the given light.
6795 *
6796 * @param light The given light.
6797 * @param cutoff Cutoff angle in degree.
6798 *
6799 * Only angle less than 180 degree will make it spot light, so that other spot
6800 * light attribute will take effect.
6801 *
6802 * Default spot cutoff angle is 180.
6803 *
6804 * @since 1.10
6805 *
6806 * @ingroup Evas_3D_Light
6807 */
6808EAPI void evas_3d_light_spot_cutoff_set(Evas_3D_Light *light, Evas_Real cutoff) EINA_ARG_NONNULL(1);
6809
6810/**
6811 * Get the spot cutoff angle of the given light.
6812 *
6813 * @param light The given light.
6814 * @return Cutoff angle in degree.
6815 *
6816 * @see evas_3d_light_spot_cutoff_set()
6817 * @since 1.10
6818 *
6819 * @ingroup Evas_3D_Light
6820 */
6821EAPI Evas_Real evas_3d_light_spot_cutoff_get(const Evas_3D_Light *light) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6822
6823/**
6824 * Set the attenuation of the given light.
6825 *
6826 * @param light The given light.
6827 * @param constant Constant attenuation term.
6828 * @param linear Linear attenuation term.
6829 * @param quadratic Quadratic attenuation term.
6830 *
6831 * Light attenuation has no effect with directional light. And the attenuation
6832 * should be enabled first to take effect. The attenuation factor is calculated
6833 * as follows.
6834 *
6835 * atten = 1.0 / constant + linear * distance + quadratic * distance * distance
6836 *
6837 * Default attenuation is constant = 1.0, linear = 0.0, quadratic = 0.0.
6838 *
6839 * @see evas_3d_light_attenuation_enable_set()
6840 * @since 1.10
6841 *
6842 * @ingroup Evas_3D_Light
6843 */
6844EAPI void evas_3d_light_attenuation_set(Evas_3D_Light *light, Evas_Real constant, Evas_Real linear, Evas_Real quadratic) EINA_ARG_NONNULL(1);
6845
6846/**
6847 * Get the attenuation of the given light.
6848 *
6849 * @param light The given light.
6850 * @param constant Pointer to receive constant attenuation term.
6851 * @param linear Pointer to receive linear attenuation term.
6852 * @param quadratic Pointer to receive quadratic attenuation term.
6853 *
6854 * @see evas_3d_light_attenuation_set()
6855 * @since 1.10
6856 *
6857 * @ingroup Evas_3D_Light
6858 */
6859EAPI void evas_3d_light_attenuation_get(const Evas_3D_Light *light, Evas_Real *constant, Evas_Real *linear, Evas_Real *quadratic) EINA_ARG_NONNULL(1);
6860
6861/**
6862 * Set the attenuation enable flag of the given light.
6863 *
6864 * @param light The given light.
6865 * @param enable Whether to enable attenuation (@c EINA_TRUE), or not
6866 * (@c EINA_FALSE).
6867 *
6868 * By default, light attenuation is not enabled.
6869 *
6870 * @see evas_3d_light_attenuation_set()
6871 * @since 1.10
6872 *
6873 * @ingroup Evas_3D_Light
6874 */
6875EAPI void evas_3d_light_attenuation_enable_set(Evas_3D_Light *light, Eina_Bool enable) EINA_ARG_NONNULL(1);
6876
6877/**
6878 * Get the attenuation enable flag of the given light.
6879 *
6880 * @param light The given light.
6881 * @return @c EINA_TRUE if enabled, or @c EINA_FALSE if not.
6882 *
6883 * @see evas_3d_light_attenuation_enable_set()
6884 * @since 1.10
6885 *
6886 * @ingroup Evas_3D_Light
6887 */
6888EAPI Eina_Bool evas_3d_light_attenuation_enable_get(const Evas_3D_Light *light) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6889
6890/**
6891 * Create a new mesh on the given Evas @p canvas.
6892 *
6893 * @param e The given canvas.
6894 * @return The created mesh handle.
6895 *
6896 * @since 1.10
6897 *
6898 * @ingroup Evas_3D_Mesh
6899 */
6900EAPI Evas_3D_Mesh *evas_3d_mesh_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6901
6902/**
6903 * Delete a mesh from its belonging Evas canvas.
6904 *
6905 * @param mesh The given mesh.
6906 *
6907 * @see evas_3d_mesh_add()
6908 * @since 1.10
6909 *
6910 * @ingroup Evas_3D_Mesh
6911 */
6912EAPI void evas_3d_mesh_del(Evas_3D_Mesh *mesh) EINA_ARG_NONNULL(1);
6913
6914/**
6915 * Set the shade mode of the given mesh.
6916 *
6917 * @param mesh The given mesh.
6918 * @param mode The shade mode.
6919 *
6920 * Default shade mode is EVAS_3D_SHADE_MODE_VERTEX_COLOR.
6921 *
6922 * @since 1.10
6923 *
6924 * @ingroup Evas_3D_Mesh
6925 */
6926EAPI void evas_3d_mesh_shade_mode_set(Evas_3D_Mesh *mesh, Evas_3D_Shade_Mode mode) EINA_ARG_NONNULL(1);
6927
6928/**
6929 * Get the shade mode of the given mesh.
6930 *
6931 * @param mesh The given mesh.
6932 * @return The shade mode.
6933 *
6934 * @see eavs_3d_mesh_shade_mode_set()
6935 * @since 1.10
6936 *
6937 * @ingroup Evas_3D_Mesh
6938 */
6939EAPI Evas_3D_Shade_Mode evas_3d_mesh_shade_mode_get(const Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6940
6941/**
6942 * Load mesh data from file.
6943 *
6944 * @param mesh The given mesh.
6945 * @param type The type of the mesh file.
6946 * @param file Path to the mesh file.
6947 * @param key Key in the mesh file.
6948 *
6949 * Loading a mesh from existing file is supported. Currently, only MD2 file
6950 * format is supported.
6951 *
6952 * @ingroup Evas_3D_Mesh
6953 * @since 1.10
6954 */
6955EAPI void evas_3d_mesh_file_set(Evas_3D_Mesh *mesh, Evas_3D_Mesh_File_Type type, const char *file, const char *key) EINA_ARG_NONNULL(1);
6956
6957/**
6958 * Set the vertex count of the given mesh.
6959 *
6960 * @param mesh The given mesh.
6961 * @param count Vertex count.
6962 *
6963 * Each key frame should have same vertex count to be properly interpolated.
6964 * Key frames have their own vertex data and the data should have more vertices
6965 * than the mesh's vertex count.
6966 *
6967 * Default vertex count is 0.
6968 *
6969 * @since 1.10
6970 *
6971 * @ingroup Evas_3D_Mesh
6972 */
6973EAPI void evas_3d_mesh_vertex_count_set(Evas_3D_Mesh *mesh, unsigned int count) EINA_ARG_NONNULL(1);
6974
6975/**
6976 * Get the vertex count of the given mesh.
6977 *
6978 * @param mesh The given mesh.
6979 * @return Vertex count.
6980 *
6981 * @see evas_3d_mesh_vertex_count_set()
6982 *
6983 * @since 1.10
6984 *
6985 * @ingroup Evas_3D_Mesh
6986 */
6987EAPI int evas_3d_mesh_vertex_count_get(const Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6988
6989/**
6990 * Add a key frame to the given mesh.
6991 *
6992 * @param mesh The given mesh.
6993 * @param frame The number of the key frame to be added.
6994 *
6995 * If specified frame is already exist, nothing will be happened.
6996 *
6997 * @since 1.10
6998 *
6999 * @ingroup Evas_3D_Mesh
7000 */
7001EAPI void evas_3d_mesh_frame_add(Evas_3D_Mesh *mesh, int frame) EINA_ARG_NONNULL(1);
7002
7003/**
7004 * Delete a key frame from the given mesh.
7005 *
7006 * @param mesh The given mesh.
7007 * @param frame The number of the key frame to be deleted.
7008 *
7009 * @see evas_3d_mesh_frame_add()
7010 * @since 1.10
7011 *
7012 * @ingroup Evas_3D_Mesh
7013 */
7014EAPI void evas_3d_mesh_frame_del(Evas_3D_Mesh *mesh, int frame) EINA_ARG_NONNULL(1);
7015
7016/**
7017 * Set the material of the key frame of the given mesh.
7018 *
7019 * @param mesh The given mesh.
7020 * @param frame The number of the key frame.
7021 * @param material The material to be set to the key frame.
7022 *
7023 * Setting different materials for each key frame is useful for doing animations
7024 * like GIF images or color changing animationas.
7025 *
7026 * @see evas_3d_mesh_frame_add()
7027 * @since 1.10
7028 *
7029 * @ingroup Evas_3D_Mesh
7030 */
7031EAPI void evas_3d_mesh_frame_material_set(Evas_3D_Mesh *mesh, int frame, Evas_3D_Material *material) EINA_ARG_NONNULL(1);
7032
7033/**
7034 * Get the material of the key frame of the given mesh.
7035 *
7036 * @param mesh The given mesh.
7037 * @param frame The number of the key frame.
7038 * @return The material of the key frame.
7039 *
7040 * @see evas_3d_mesh_frame_material_set()
7041 * @since 1.10
7042 *
7043 * @ingroup Evas_3D_Mesh
7044 */
7045EAPI Evas_3D_Material *evas_3d_mesh_frame_material_get(const Evas_3D_Mesh *mesh, int frame) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7046
7047/**
7048 * Set the vertex data of the key frame of the given mesh.
7049 *
7050 * @param mesh The given mesh.
7051 * @param frame The number of the key frame.
7052 * @param attrib Vertex attribute ID.
7053 * @param stride Stride to go to the next vertex (in bytes).
7054 * @param data Pointer to the vertex data buffer.
7055 *
7056 * This function make evas read from the given buffer whenever it requires.
7057 * If you want to release the buffer after calling this functions, use
7058 * evas_3d_mesh_frame_vertex_data_copy_set() instead.
7059 *
7060 * After setting the vertex data, further modifications should be protected
7061 * by map/unmap pair.
7062 *
7063 * @see evas_3d_mesh_frame_add()
7064 * @see evas_3d_mesh_frame_vertex_data_copy_set()
7065 * @see evas_3d_mesh_frame_vertex_data_map()
7066 * @see evas_3d_mesh_frame_vertex_data_unmap()
7067 * @since 1.10
7068 *
7069 * @ingroup Evas_3D_Mesh
7070 */
7071EAPI void evas_3d_mesh_frame_vertex_data_set(Evas_3D_Mesh *mesh, int frame, Evas_3D_Vertex_Attrib attrib, int stride, const void *data) EINA_ARG_NONNULL(1);
7072
7073/**
7074 * Set the vertex data of the key frame of the given mesh by copying from a
7075 * buffer.
7076 *
7077 * @param mesh The given mesh.
7078 * @param frame The number of the key frame.
7079 * @param attrib Vertex attribute ID.
7080 * @param stride Stride to go to the next vertex (in bytes).
7081 * @param data Pointer to the vertex data buffer.
7082 *
7083 * This function allocates internal vertex buffer and copy from the given
7084 * buffer. So you can release the buffer. If you want to modify the vertex data
7085 * use evas_3d_mesh_frame_vertex_data_map(). After finishing the modifications,
7086 * you should call evas_3d_mesh_frame_vertex_data_unmap().
7087 *
7088 * @see evas_3d_mesh_frame_add()
7089 * @see evas_3d_mesh_frame_vertex_data_set()
7090 * @see evas_3d_mesh_frame_vertex_data_map()
7091 * @see evas_3d_mesh_frame_vertex_data_unmap()
7092 *
7093 * @ingroup Evas_3D_Mesh
7094 */
7095EAPI void evas_3d_mesh_frame_vertex_data_copy_set(Evas_3D_Mesh *mesh, int frame, Evas_3D_Vertex_Attrib attrib, int stride, const void *data) EINA_ARG_NONNULL(1);
7096
7097/**
7098 * Map the vertex buffer of the key frame of the given mesh.
7099 *
7100 * @param mesh The given mesh.
7101 * @param frame The number of the key frame.
7102 * @param attrib Vertex attribute ID.
7103 * @return Starting address of the mapped vertex buffer.
7104 *
7105 * After manipulating the mapped buffer, evas_3d_mesh_frame_vertex_data_unmap()
7106 * should be called to properly download the data to the engine. If the data
7107 * was set using evas_3d_mesh_frame_vertex_data_set(), pointer to the original
7108 * buffer will be returned. Otherwise, the returned pointer can differ every
7109 * time calling this function.
7110 *
7111 * @see evas_3d_mesh_frame_vertex_data_unmap()
7112 * @since 1.10
7113 *
7114 * @ingroup Evas_3D_Mesh
7115 */
7116EAPI void *evas_3d_mesh_frame_vertex_data_map(Evas_3D_Mesh *mesh, int frame, Evas_3D_Vertex_Attrib attrib) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7117
7118/**
7119 * Unmap the vertex buffer of the key frame of the given mesh.
7120 *
7121 * @param mesh The given mesh.
7122 * @param frame The number of the key frame.
7123 * @param attrib Vertex attribute ID.
7124 *
7125 * @see evas_3d_mesh_frame_vertex_data_map()
7126 * @since 1.10
7127 *
7128 * @ingroup Evas_3D_Mesh
7129 */
7130EAPI void evas_3d_mesh_frame_vertex_data_unmap(Evas_3D_Mesh *mesh, int frame, Evas_3D_Vertex_Attrib attrib) EINA_ARG_NONNULL(1);
7131
7132/**
7133 * Get the vertex buffer stride of the key frame of the given mesh.
7134 *
7135 * @param mesh The given mesh.
7136 * @param frame The number of the key frame.
7137 * @param attrib Vertex attribute ID.
7138 * @return Stride to go to the next vertex (in bytes).
7139 *
7140 * This function returns valid stride only when the vertex buffer is mapped.
7141 * If the data was set with evas_3d_mesh_frame_vertex_data_set(), the original
7142 * stride will be returned unchanged.
7143 *
7144 * @see evas_3d_mesh_frame_vertex_data_map()
7145 * @since 1.10
7146 *
7147 * @ingroup Evas_3D_Mesh
7148 */
7149EAPI int evas_3d_mesh_frame_vertex_stride_get(const Evas_3D_Mesh *mesh, int frame, Evas_3D_Vertex_Attrib attrib) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7150
7151/**
7152 * Set the vertex index data of the given mesh.
7153 *
7154 * @param mesh The given mesh.
7155 * @param format Vertex index data format.
7156 * @param count Vertex index count.
7157 * @param indices Pointer to the index data.
7158 *
7159 * When the index data is set, Evas 3D assembles vertices using the index data.
7160 * If you want to free the data buffer, use evas_3d_mesh_index_data_copy_set().
7161 * Further modifications should be made within map/unmap pair.
7162 *
7163 * @see evas_3d_mesh_index_data_copy_set()
7164 * @see evas_3d_mesh_index_data_map()
7165 * @see evas_3d_mesh_index_data_unmap()
7166 * @since 1.10
7167 *
7168 * @ingroup Evas_3D_Mesh
7169 */
7170EAPI void evas_3d_mesh_index_data_set(Evas_3D_Mesh *mesh, Evas_3D_Index_Format format, int count, const void *indices) EINA_ARG_NONNULL(1);
7171
7172/**
7173 * Set the vertex index data of the given mesh by copying from a buffer.
7174 *
7175 * @param mesh The given mesh.
7176 * @param format Vertex index data format.
7177 * @param count Vertex index count.
7178 * @param indices Pointer to the vertex data.
7179 *
7180 * This function allocates internal index buffer any copy data from the given
7181 * buffer. Futher modifications can be made within map/unmap pair.
7182 *
7183 * @see evas_3d_mesh_index_data_set()
7184 * @since 1.10
7185 *
7186 * @ingroup Evas_3D_Mesh
7187 */
7188EAPI void evas_3d_mesh_index_data_copy_set(Evas_3D_Mesh *mesh, Evas_3D_Index_Format format, int count, const void *indices) EINA_ARG_NONNULL(1);
7189
7190/**
7191 * Get the format of the index data of the given mesh.
7192 *
7193 * @param mesh The given mesh.
7194 * @return Format of the index data.
7195 *
7196 * Returns valid format only when the index buffer is mapped. First map the
7197 * index buffer and then query the properties of the mapped buffer. If the index
7198 * data was set by evas_3d_mesh_index_data_set(), the original format will be
7199 * returned. Otherwise the format can differ every time you call the
7200 * evas_3d_mesh_index_data_map() function.
7201 *
7202 * @see evas_3d_mesh_index_data_map()
7203 * @since 1.10
7204 *
7205 * @ingroup Evas_3D_Mesh
7206 */
7207EAPI Evas_3D_Index_Format evas_3d_mesh_index_format_get(const Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7208
7209/**
7210 * Get the count of the index data of the given mesh.
7211 *
7212 * @param mesh The given mesh.
7213 * @return Index data count.
7214 *
7215 * This function returns the index count of the last called data_set function.
7216 *
7217 * @see evas_3d_mesh_index_data_set()
7218 * @see evas_3d_mesh_index_data_copy_set()
7219 * @since 1.10
7220 *
7221 * @ingroup Evas_3D_Mesh
7222 */
7223EAPI int evas_3d_mesh_index_count_get(const Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7224
7225/**
7226 * Map the index buffer of the given mesh.
7227 *
7228 * @param mesh The given mesh.
7229 * @return Pointer to the mapped buffer.
7230 *
7231 * evas_3d_mesh_index_data_unmap() should be called after modifications. If the
7232 * data was set using evas_3d_mesh_index_data_set(), the original pointer will
7233 * be returned, otherwise, the returned pointer may differ every time you call
7234 * this function.
7235 *
7236 * @see evas_3d_mesh_index_data_unmap()
7237 * @since 1.10
7238 *
7239 * @ingroup Evas_3D_Mesh
7240 */
7241EAPI void *evas_3d_mesh_index_data_map(Evas_3D_Mesh *mesh) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7242
7243/**
7244 * Unmap the index buffer of the given mesh.
7245 *
7246 * @param mesh The given mesh.
7247 *
7248 * @see evas_3d_mesh_index_data_map()
7249 * @since 1.10
7250 *
7251 * @ingroup Evas_3D_Mesh
7252 */
7253EAPI void evas_3d_mesh_index_data_unmap(Evas_3D_Mesh *mesh) EINA_ARG_NONNULL(1);
7254
7255/**
7256 * Set the vertex assembly of the given mesh.
7257 *
7258 * @param mesh The given mesh.
7259 * @param assembly Vertex assembly.
7260 *
7261 * Vertex assembly defines how the engine organizes vertices into geometric
7262 * primitives.
7263 *
7264 * Default vertex assembly is EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES.
7265 *
7266 * @since 1.10
7267 *
7268 * @ingroup Evas_3D_Mesh
7269 */
7270EAPI void evas_3d_mesh_vertex_assembly_set(Evas_3D_Mesh *mesh, Evas_3D_Vertex_Assembly assembly);
7271
7272/**
7273 * Get the vertex assembly of the given mesh.
7274 *
7275 * @param mesh The given mesh.
7276 * @return The vertex assembly.
7277 *
7278 * @see evas_3d_mesh_vertex_assembly_set()
7279 * @since 1.10
7280 *
7281 * @ingroup Evas_3D_Mesh
7282 */
7283EAPI Evas_3D_Vertex_Assembly evas_3d_mesh_vertex_assembly_get(const Evas_3D_Mesh *mesh);
7284
7285/**
7286 * Create a new texture on the given Evas @p canvas.
7287 *
7288 * @param e The given canvas.
7289 * @return The created texture handle.
7290 *
7291 * @ingroup Evas_3D_Texture
7292 */
7293EAPI Evas_3D_Texture *evas_3d_texture_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7294
7295/**
7296 * Delete a texture from its belonging Evas canvas.
7297 *
7298 * @param texture The given texture.
7299 *
7300 * @see evas_3d_texture_add()
7301 *
7302 * @ingroup Evas_3D_Texture
7303 */
7304EAPI void evas_3d_texture_del(Evas_3D_Texture *texture) EINA_ARG_NONNULL(1);
7305
7306/**
7307 * Set the data of the given texture.
7308 *
7309 * @param texure The given texture
7310 * @param color_format Color format of the texture.
7311 * @param pixel_format Pixel format of the data.
7312 * @param w Width of the data.
7313 * @param h Height of the data.
7314 * @param data Pointer to the data.
7315 *
7316 * @see evas_3d_texture_file_set()
7317 * @since 1.10
7318 *
7319 * @ingroup Evas_3D_Texture
7320 */
7321EAPI void evas_3d_texture_data_set(Evas_3D_Texture *texture, Evas_3D_Color_Format color_format, Evas_3D_Pixel_Format pixel_format, int w, int h, const void *data);
7322
7323/**
7324 * Set the data of the given texture from file.
7325 *
7326 * @param texture The given texture.
7327 * @param file The image file path.
7328 * @param key The image key in @p file (if its an Eet one), or @c NULL,
7329 * otherwise.
7330 *
7331 * If the file supports multiple data stored in it (as Eet files do),
7332 * you can specify the key to be used as the index of the image in
7333 * this file.
7334 *
7335 * @since 1.10
7336 *
7337 * @ingroup Evas_3D_Texture
7338 */
7339EAPI void evas_3d_texture_file_set(Evas_3D_Texture *texture, const char *file, const char *key) EINA_ARG_NONNULL(1);
7340
7341/**
7342 * Set the data of the given texture from an evas object.
7343 *
7344 * @param texture The given texture.
7345 * @param source Source evas object to be used as the texture data.
7346 *
7347 * Evas 3D support using existing evas object as a texture source. This feature
7348 * make it possible using any exisiting evas object inside 3D scene.
7349 *
7350 * @see evas_3d_texture_source_visible_set
7351 *
7352 * @ingroup Evas_3D_Texture
7353 */
7354EAPI void evas_3d_texture_source_set(Evas_3D_Texture *texture, Evas_Object *source) EINA_ARG_NONNULL(1);
7355
7356/**
7357 * Set the visibility flag of the source evas object of the given texture.
7358 *
7359 * @param texture The given texture.
7360 * @param visible @c EINA_TRUE for visible, @c EINA_FALSE for invisible.
7361 *
7362 * Recommend to call evas_object_show() on the source object and controll the
7363 * visibility using this function.
7364 *
7365 * By default, source object is visible.
7366 *
7367 * @see evas_3d_texture_source_set()
7368 * @since 1.10
7369 *
7370 * @ingroup Evas_3D_Texture
7371 */
7372EAPI void evas_3d_texture_source_visible_set(Evas_3D_Texture *texture, Eina_Bool visible) EINA_ARG_NONNULL(1);
7373
7374/**
7375 * Get the visibility flag of the source evas object of the given texture.
7376 *
7377 * @param texture The given texture.
7378 * @return @c EINA_TRUE if visible, @c EINA_FALSE if invisible.
7379 *
7380 * @see evas_3d_texture_source_visible_set()
7381 * @since 1.10
7382 *
7383 * @ingroup Evas_3D_Texture
7384 */
7385EAPI Eina_Bool evas_3d_texture_source_visible_get(const Evas_3D_Texture *texture) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7386
7387/**
7388 * Get the color format of the given texture.
7389 *
7390 * @param texture The given texture.
7391 *
7392 * EVAS_3D_COLOR_FORMAT_RGBA will be returned if the texture has source object.
7393 * Otherwise, the color format of the data will be returned.
7394 *
7395 * @see evas_3d_texture_data_set()
7396 * @see evas_3d_texture_file_set()
7397 * @see evas_3d_texture_source_set()
7398 * @since 1.10
7399 *
7400 * @ingroup Evas_3D_Texture
7401 */
7402EAPI Evas_3D_Color_Format evas_3d_texture_color_format_get(const Evas_3D_Texture *texture) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7403
7404/**
7405 * Get the size of the given texture.
7406 *
7407 * @param texture The given texture.
7408 * @param w Pointer to receive the width of the texture size.
7409 * @param h Pointer to receive the height of the texture size.
7410 *
7411 * If the texture has source object, the size of the source object will be
7412 * returned. Otherwise, the size of the data (or image file) will be returned.
7413 *
7414 * @see evas_3d_texture_data_set()
7415 * @see evas_3d_texture_file_set()
7416 * @see evas_3d_texture_source_set()
7417 * @since 1.10
7418 *
7419 * @ingroup Evas_3D_Texture
7420 */
7421EAPI void evas_3d_texture_size_get(const Evas_3D_Texture *texture, int *w, int *h) EINA_ARG_NONNULL(1);
7422
7423/**
7424 * Set the wrap mode of the given texture.
7425 *
7426 * @param texture The given texture.
7427 * @param s Wrap mode for S-axis.
7428 * @param t Wrap mode for T-axis.
7429 *
7430 * If the texture coordinate exceed range [0.0, 1.0] the values are modified
7431 * according to the wrap mode.
7432 *
7433 * Default wrap modes are both EVAS_3D_WRAP_MODE_CLAMP for s and t.
7434 *
7435 * @since 1.10
7436 *
7437 * @ingroup Evas_3D_Texture
7438 */
7439EAPI void evas_3d_texture_wrap_set(Evas_3D_Texture *texture, Evas_3D_Wrap_Mode s, Evas_3D_Wrap_Mode t) EINA_ARG_NONNULL(1);
7440
7441/**
7442 * Get the wrap mode of the given texture.
7443 *
7444 * @param texture The given texture.
7445 * @param s Pointer to receive S-axis wrap mode.
7446 * @param t Pointer to receive T-axis wrap mode.
7447 *
7448 * @see evas_3d_texture_wrap_set()
7449 * @since 1.10
7450 *
7451 * @ingroup Evas_3D_Texture
7452 */
7453EAPI void evas_3d_texture_wrap_get(Evas_3D_Texture *texture, Evas_3D_Wrap_Mode *s, Evas_3D_Wrap_Mode *t) EINA_ARG_NONNULL(1);
7454
7455/**
7456 * Set the filter of the given texture.
7457 *
7458 * @param texture The given texture.
7459 * @param min Minification filter used when down-scaling.
7460 * @param mag Magnification filter used when up-scaling.
7461 *
7462 * Default filters are both EVAS_3D_TEXTURE_FILTER_NEAREST for s and t.
7463 *
7464 * @since 1.10
7465 *
7466 * @ingroup Evas_3D_Texture
7467 */
7468EAPI void evas_3d_texture_filter_set(Evas_3D_Texture *texture, Evas_3D_Texture_Filter min, Evas_3D_Texture_Filter mag) EINA_ARG_NONNULL(1);
7469
7470/**
7471 * Get the filter of the given texture.
7472 *
7473 * @param texture The given texture.
7474 * @param min Pointer to receive the minification filter.
7475 * @param mag Pointer to receive the magnification filter.
7476 *
7477 * @see evas_3d_texture_filter_set()
7478 * @since 1.10
7479 *
7480 * @ingroup Evas_3D_Texture
7481 */
7482EAPI void evas_3d_texture_filter_get(const Evas_3D_Texture *texture, Evas_3D_Texture_Filter *min, Evas_3D_Texture_Filter *mag) EINA_ARG_NONNULL(1);
7483
7484/**
7485 * Create a new material on the given Evas @p canvas.
7486 *
7487 * @param e The given canvas.
7488 * @param type The type of the material.
7489 * @return The created material handle.
7490 *
7491 * @since 1.10
7492 *
7493 * @ingroup Evas_3D_Material
7494 */
7495EAPI Evas_3D_Material *evas_3d_material_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7496
7497/**
7498 * Delete a material from its belonging Evas canvas.
7499 *
7500 * @param material The given material.
7501 *
7502 * @see evas_3d_material_add()
7503 * @since 1.10
7504 *
7505 * @ingroup Evas_3D_Material
7506 */
7507EAPI void evas_3d_material_del(Evas_3D_Material *material) EINA_ARG_NONNULL(1);
7508
7509/**
7510 * Set the material attribute enable flag of the given material.
7511 *
7512 * @param material The given material.
7513 * @param attrib Material attribute ID.
7514 * @param enable Whether to enable the attribute (@c EINA_TRUE), or not
7515 * (@c EINA_FALSE).
7516 *
7517 * You might want to disable some material reflection contribution. For
7518 * example,Emission attribute is rarely used. Disabling unused attributes
7519 * might help the shading less complex so that can get speed up.
7520 *
7521 * By default, diffuse and specular is enabled.
7522 *
7523 * @since 1.10
7524 *
7525 * @ingroup Evas_3D_Material
7526 */
7527EAPI void evas_3d_material_enable_set(Evas_3D_Material *material, Evas_3D_Material_Attrib attrib, Eina_Bool enable) EINA_ARG_NONNULL(1);
7528
7529/**
7530 * Get the material attribute enable flag of the given material.
7531 *
7532 * @param material The given material.
7533 * @param attrib Material attribute ID.
7534 * @return @c EINA_TRUE if enabled, or @c EINA_FALSE if not.
7535 *
7536 * @see evas_3d_material_enable_set()
7537 * @since 1.10
7538 *
7539 * @ingroup Evas_3D_Material
7540 */
7541EAPI Eina_Bool evas_3d_material_enable_get(const Evas_3D_Material *material, Evas_3D_Material_Attrib attrib) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7542
7543/**
7544 * Set the material attribute color of the given material.
7545 *
7546 * @param material The given material.
7547 * @param attrib Material attribute ID.
7548 * @param r Red component of the color.
7549 * @param g Green component of the color.
7550 * @param b Blue component of the color.
7551 * @param a Alpha component of the color.
7552 *
7553 * Material color is used also when texture map is enabled. The colors will be
7554 * modulated (multiplied). To controll the color contribution of a material
7555 * attribute, use gray color. Setting color value for normal attribute has no
7556 * effect.
7557 *
7558 * Default color is as follows.
7559 *
7560 * Ambient : (0.2, 0.2, 0.2, 1.0)
7561 * Diffuse : (0.8, 0.8, 0.8, 1.0)
7562 * Specular : (1.0, 1.0, 1.0, 1.0)
7563 * Emission : (0.0, 0.0, 0.0, 1.0)
7564 * Normal : Not used
7565 *
7566 * @since 1.10
7567 *
7568 * @ingroup Evas_3D_Material
7569 */
7570EAPI void evas_3d_material_color_set(Evas_3D_Material *material, Evas_3D_Material_Attrib attrib, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) EINA_ARG_NONNULL(1);
7571
7572/**
7573 * Get the material attribute color of the given material.
7574 *
7575 * @param material The given material.
7576 * @param attrib Material attribute ID.
7577 * @param r Pointer to receive red component of the color.
7578 * @param g Pointer to receive green component of the color.
7579 * @param b Pointer to receive blue component of the color.
7580 * @param a Pointer to receive alpha component of the color.
7581 *
7582 * @see evas_3d_material_color_set()
7583 * @since 1.10
7584 *
7585 * @ingroup Evas_3D_Material
7586 */
7587EAPI void evas_3d_material_color_get(const Evas_3D_Material *material, Evas_3D_Material_Attrib attrib, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a) EINA_ARG_NONNULL(1);
7588
7589/**
7590 * Set the shininess of the given material.
7591 *
7592 * @param material The given material.
7593 * @param shininess Shininess value.
7594 *
7595 * Shininess is only used when specular attribute is enabled. Higher shininess
7596 * value will make the object more shiny.
7597 *
7598 * Default shininess value is 150.0.
7599 *
7600 * @see evas_3d_material_enable_set()
7601 * @since 1.10
7602 *
7603 * @ingroup Evas_3D_Material
7604 */
7605EAPI void evas_3d_material_shininess_set(Evas_3D_Material *material, Evas_Real shininess) EINA_ARG_NONNULL(1);
7606
7607/**
7608 * Get the shininess of the given material.
7609 *
7610 * @param material The given material.
7611 * @return The shininess value.
7612 *
7613 * @see evas_3d_material_shininess_set()
7614 * @since 1.10
7615 *
7616 * @ingroup Evas_3D_Material
7617 */
7618EAPI Evas_Real evas_3d_material_shininess_get(const Evas_3D_Material *material) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7619
7620/**
7621 * Set the texture of the given material.
7622 *
7623 * @param material The given material.
7624 * @param attrib Material attribute ID.
7625 * @param texture Texture to be set.
7626 *
7627 * You have to enable the desired attribute first.
7628 *
7629 * @see evas_3d_material_enable_set()
7630 * @since 1.10
7631 *
7632 * @ingroup Evas_3D_Material
7633 */
7634EAPI void evas_3d_material_texture_set(Evas_3D_Material *material, Evas_3D_Material_Attrib attrib, Evas_3D_Texture *texture) EINA_ARG_NONNULL(1);
7635
7636/**
7637 * Get the texture of the given material.
7638 *
7639 * @param material The given material.
7640 * @param attrib Material attribute ID.
7641 * @return The texture that is set to the given material attribute.
7642 *
7643 * @see evas_3d_material_texture_set()
7644 * @since 1.10
7645 *
7646 * @ingroup Evas_3D_Material
7647 */
7648EAPI Evas_3D_Texture *evas_3d_material_texture_get(const Evas_3D_Material *material, Evas_3D_Material_Attrib attrib) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7649