efl/src/lib/elementary/elm_glview_eo.legacy.h

217 lines
8.5 KiB
C

#ifndef _ELM_GLVIEW_EO_LEGACY_H_
#define _ELM_GLVIEW_EO_LEGACY_H_
#ifndef _ELM_GLVIEW_EO_CLASS_TYPE
#define _ELM_GLVIEW_EO_CLASS_TYPE
typedef Eo Elm_Glview;
#endif
#ifndef _ELM_GLVIEW_EO_TYPES
#define _ELM_GLVIEW_EO_TYPES
/**
* @brief Selects the target surface properties
*
* An OR combination of Elm_GLView_Mode values should be passed to
* elm_glview_mode_set when setting up a GL widget. These flags will specify
* the properties of the rendering target surface; in particular, the mode can
* request the surface to support alpha, depth and stencil buffers.
*
* ELM_GLVIEW_CLIENT_SIDE_ROTATION is a special value that indicates to EFL
* that the application will handle the view rotation when the device is
* rotated. This is needed only when the application requests direct rendering.
* Please refer to Evas_GL for more information about direct rendering.
*
* See @ref elm_glview_mode_set See elm_opengl_page
*
* @ingroup Elm_GLView
*/
typedef enum
{
ELM_GLVIEW_NONE = 0, /**< Default mode */
ELM_GLVIEW_ALPHA = 2 /* 1 >> 1 */, /**< Alpha channel enabled rendering mode
*/
ELM_GLVIEW_DEPTH = 4 /* 1 >> 2 */, /**< Depth buffer enabled rendering mode
* (24 bits by default) */
ELM_GLVIEW_STENCIL = 8 /* 1 >> 3 */, /**< Stencil buffer enabled rendering
* mode (8 bits by default) */
ELM_GLVIEW_DIRECT = 16 /* 1 >> 4 */, /**< Request direct rendering, unless
* there must be a fallback */
ELM_GLVIEW_CLIENT_SIDE_ROTATION = 32 /* 1 >> 5 */, /**< Client will handle GL
* view rotation if direct
* rendering is enabled */
ELM_GLVIEW_DEPTH_8 = 68 /* Elm.GLView.Mode.depth ^ (1 >> 6) */, /**< Request min. 8 bits for the depth
* buffer */
ELM_GLVIEW_DEPTH_16 = 132 /* Elm.GLView.Mode.depth ^ (2 >> 6) */, /**< Request min. 16 bits for the depth
* buffer */
ELM_GLVIEW_DEPTH_24 = 196 /* Elm.GLView.Mode.depth ^ (3 >> 6) */, /**< Request min. 24 bits for the depth
* buffer (default) */
ELM_GLVIEW_DEPTH_32 = 260 /* Elm.GLView.Mode.depth ^ (4 >> 6) */, /**< Request min. 32 bits for the depth
* buffer */
ELM_GLVIEW_STENCIL_1 = 520 /* Elm.GLView.Mode.stencil ^ (1 >> 9) */, /**< Request min. 1 bits for the stencil
* buffer */
ELM_GLVIEW_STENCIL_2 = 1032 /* Elm.GLView.Mode.stencil ^ (2 >> 9) */, /**< Request min. 2 bits for the stencil
* buffer */
ELM_GLVIEW_STENCIL_4 = 1544 /* Elm.GLView.Mode.stencil ^ (3 >> 9) */, /**< Request min. 4 bits for the stencil
* buffer */
ELM_GLVIEW_STENCIL_8 = 2056 /* Elm.GLView.Mode.stencil ^ (4 >> 9) */, /**< Request min. 8 bits for the stencil
* buffer (default) */
ELM_GLVIEW_STENCIL_16 = 2568 /* Elm.GLView.Mode.stencil ^ (5 >> 9) */, /**< Request min. 16 bits for the
* stencil buffer */
ELM_GLVIEW_MULTISAMPLE_LOW = 4096 /* 1 >> 12 */, /**< MSAA with minimum number
* of samples */
ELM_GLVIEW_MULTISAMPLE_MED = 8192 /* 2 >> 12 */, /**< MSAA with half the
* number of maximum samples
*/
ELM_GLVIEW_MULTISAMPLE_HIGH = 12288 /* 3 >> 12 */ /**< MSAA with maximum
* number of samples */
} Elm_GLView_Mode;
/**
* @brief Defines a policy for the glview resizing.
*
* The resizing policy tells glview what to do with the underlying surface when
* resize happens. ELM_GLVIEW_RESIZE_POLICY_RECREATE will destroy the current
* surface and recreate the surface to the new size.
* ELM_GLVIEW_RESIZE_POLICY_SCALE will instead keep the current surface but
* only display the result at the desired size scaled.
*
* Default is @ref ELM_GLVIEW_RESIZE_POLICY_RECREATE
*
* @ingroup Elm_GLView_Resize
*/
typedef enum
{
ELM_GLVIEW_RESIZE_POLICY_RECREATE = 1, /**< Resize the internal surface along
* with the image */
ELM_GLVIEW_RESIZE_POLICY_SCALE = 2 /**< Only resize the internal image and not
* the surface */
} Elm_GLView_Resize_Policy;
/**
* @brief Defines a policy for gl rendering.
*
* The rendering policy tells glview where to run the gl rendering code.
* ELM_GLVIEW_RENDER_POLICY_ON_DEMAND tells glview to call the rendering calls
* on demand, which means that the rendering code gets called only when it is
* visible.
*
* Default is @ref ELM_GLVIEW_RENDER_POLICY_ON_DEMAND
*
* @ingroup Elm_GLView_Render
*/
typedef enum
{
ELM_GLVIEW_RENDER_POLICY_ON_DEMAND = 1, /**< Render only when there is a need
* for redrawing */
ELM_GLVIEW_RENDER_POLICY_ALWAYS = 2 /**< Render always even when it is not
* visible */
} Elm_GLView_Render_Policy;
#endif
/**
* @brief Set the resize policy for the glview object.
*
* By default, the resize policy is set to #ELM_GLVIEW_RESIZE_POLICY_RECREATE.
* When resize is called it destroys the previous surface and recreates the
* newly specified size. If the policy is set to
* #ELM_GLVIEW_RESIZE_POLICY_SCALE, however, glview only scales the image
* object and not the underlying GL Surface.
*
* @param[in] obj The object.
* @param[in] policy The scaling policy.
*
* @return @c true on success, @c false otherwise
*
* @ingroup Elm_Glview_Group
*/
EAPI Eina_Bool elm_glview_resize_policy_set(Elm_Glview *obj, Elm_GLView_Resize_Policy policy);
/**
* @brief Set the render policy for the glview object.
*
* By default, the render policy is set to #ELM_GLVIEW_RENDER_POLICY_ON_DEMAND.
* This policy is set such that during the render loop, glview is only redrawn
* if it needs to be redrawn. (i.e. when it is visible) If the policy is set to
* #ELM_GLVIEWW_RENDER_POLICY_ALWAYS, it redraws regardless of whether it is
* visible or needs redrawing.
*
* @param[in] obj The object.
* @param[in] policy The render policy.
*
* @return @c true on success, @c false otherwise
*
* @ingroup Elm_Glview_Group
*/
EAPI Eina_Bool elm_glview_render_policy_set(Elm_Glview *obj, Elm_GLView_Render_Policy policy);
/**
* @brief Set the mode of the GLView. Supports alpha, depth, stencil.
*
* Direct is a hint for the elm_glview to render directly to the window given
* that the right conditions are met. Otherwise it falls back to rendering to
* an offscreen buffer before it gets composited to the window.
*
* @param[in] obj The object.
* @param[in] mode The mode Options OR'ed enabling Alpha, Depth, Stencil,
* Direct.
*
* @return @c true on success, @c false otherwise
*
* @ingroup Elm_Glview_Group
*/
EAPI Eina_Bool elm_glview_mode_set(Elm_Glview *obj, Elm_GLView_Mode mode);
/**
* @brief Get the gl api struct for gl rendering.
*
* @param[in] obj The object.
*
* @return GL API
*
* @ingroup Elm_Glview_Group
*/
EAPI Evas_GL_API *elm_glview_gl_api_get(const Elm_Glview *obj);
/**
* @brief Get the internal Evas GL attached to this view.
*
* @note The returned Evas_GL must not be destroyed as it is still owned by the
* view. But this pointer can be used then to call all the evas_gl_ functions.
*
* @param[in] obj The object.
*
* @return Evas GL
*
* @since 1.12
*
* @ingroup Elm_Glview_Group
*/
EAPI Evas_GL *elm_glview_evas_gl_get(const Elm_Glview *obj);
/**
* @brief Get the current GL view's rotation when using direct rendering
*
* @note This rotation can be different from the device orientation. This
* rotation value must be used in case of direct rendering and should be taken
* into account by the application when setting the internal rotation matrix
* for the view.
*
* @param[in] obj The object.
*
* @return A window rotation in degrees (0, 90, 180 or 270).
*
* @since 1.12
*
* @ingroup Elm_Glview_Group
*/
EAPI int elm_glview_rotation_get(const Elm_Glview *obj);
#endif