GLView: Add constructor for GLES 1.1 context glview

This also adds the legacy bindings

@feature
This commit is contained in:
Jean-Philippe Andre 2014-09-23 14:04:32 +09:00
parent 5b60f2f7ac
commit cdb6490b70
4 changed files with 64 additions and 10 deletions

View File

@ -173,7 +173,7 @@ _set_render_policy_callback(Evas_Object *obj)
}
EOLIAN static void
_elm_glview_evas_object_smart_add(Eo *obj, Elm_Glview_Data *priv)
_elm_glview_evas_object_smart_add(Eo *obj, Elm_Glview_Data *priv EINA_UNUSED)
{
Evas_Object *img;
@ -185,7 +185,11 @@ _elm_glview_evas_object_smart_add(Eo *obj, Elm_Glview_Data *priv)
evas_object_image_size_set(img, 1, 1);
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
}
static void
_elm_glview_constructor(Eo *obj, Elm_Glview_Data *priv)
{
// Evas_GL
priv->evasgl = evas_gl_new(evas_object_evas_get(obj));
if (!priv->evasgl)
@ -215,15 +219,22 @@ _elm_glview_evas_object_smart_add(Eo *obj, Elm_Glview_Data *priv)
priv->w = 64;
priv->h = 64;
// Set context version
if (!priv->gles_version)
priv->gles_version = EVAS_GL_GLES_2_X;
priv->config->gles_version = priv->gles_version;
// Create Context
priv->context = evas_gl_context_create(priv->evasgl, NULL);
if (priv->gles_version == EVAS_GL_GLES_2_X)
priv->context = evas_gl_context_create(priv->evasgl, NULL);
else
priv->context = evas_gl_context_version_create(priv->evasgl, NULL, priv->gles_version);
if (!priv->context)
{
ERR("Error Creating an Evas_GL Context.\n");
evas_gl_config_free(priv->config);
evas_gl_free(priv->evasgl);
priv->evasgl = NULL;
ELM_SAFE_FREE(priv->config, evas_gl_config_free);
ELM_SAFE_FREE(priv->evasgl, evas_gl_free);
return;
}
}
@ -258,14 +269,34 @@ EAPI Evas_Object *
elm_glview_add(Evas_Object *parent)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
Evas_Object *obj = eo_add(MY_CLASS, parent);
Evas_Object *obj = eo_add(MY_CLASS, parent,
elm_obj_glview_version_constructor(EVAS_GL_GLES_2_X));
return obj;
}
EAPI Evas_Object *
elm_glview_version_add(Evas_Object *parent, Evas_GL_Context_Version version)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
Evas_Object *obj = eo_add(MY_CLASS, parent,
elm_obj_glview_version_constructor(version));
return obj;
}
EOLIAN static void
_elm_glview_eo_base_constructor(Eo *obj, Elm_Glview_Data *sd)
_elm_glview_eo_base_constructor(Eo *obj, Elm_Glview_Data *sd EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, eo_constructor());
}
EOLIAN static void
_elm_glview_version_constructor(Eo *obj, Elm_Glview_Data *sd,
Evas_GL_Context_Version version)
{
sd->gles_version =
((version > 0) && (version <= 3)) ? version : EVAS_GL_GLES_2_X;
_elm_glview_constructor(obj, sd);
eo_do(obj,
evas_obj_type_set(MY_CLASS_NAME_LEGACY),
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
@ -281,7 +312,7 @@ _elm_glview_eo_base_constructor(Eo *obj, Elm_Glview_Data *sd)
EOLIAN static Evas_GL_API*
_elm_glview_gl_api_get(Eo *obj EINA_UNUSED, Elm_Glview_Data *sd)
{
return evas_gl_api_get(sd->evasgl);
return evas_gl_context_api_get(sd->evasgl, sd->context);
}
EOLIAN static Eina_Bool

View File

@ -1,6 +1,15 @@
class Elm_Glview (Elm_Widget)
{
eo_prefix: elm_obj_glview;
methods {
version_constructor {
/*@ Constructor with context version number. */
legacy: null;
params {
@in Evas_GL_Context_Version version;
}
}
}
properties {
size {
set {
@ -216,5 +225,7 @@ class Elm_Glview (Elm_Widget)
language,changed;
access,changed;
}
constructors {
.version_constructor;
}
}

View File

@ -8,4 +8,15 @@
*/
EAPI Evas_Object *elm_glview_add(Evas_Object *parent);
#include "elm_glview.eo.legacy.h"
/**
* Adds a new GLView to the parent, given an OpenGL-ES context version number.
*
* @param[in] parent The parent object
* @param[in] version Requested GL ES version number (default is 2.x, 1.x may also be supported)
* @return The new object or @c NULL if it cannot be created
*
* @since 1.12
*/
EAPI Evas_Object *elm_glview_version_add(Evas_Object *parent, Evas_GL_Context_Version version);
#include "elm_glview.eo.legacy.h"

View File

@ -29,6 +29,7 @@ struct _Elm_Glview_Data
Elm_GLView_Mode mode;
Elm_GLView_Resize_Policy scale_policy;
Elm_GLView_Render_Policy render_policy;
Evas_GL_Context_Version gles_version;
Evas_GL *evasgl;
Evas_GL_Config *config;