mirror of
https://github.com/brl/mutter.git
synced 2025-03-25 20:53:54 +00:00
Merge branch 'master' into cogl-float
The patches have been updated to apply cleanly. The patches for the g_warnings in clutter-actor.c have been removed because master now uses CLUTTER_UNITS_FORMAT so they aren't necessary. The clutter-units.h patch now sets CLUTTER_UNITS_FORMAT to 'f'.
This commit is contained in:
commit
eea3d2ce7c
@ -134,6 +134,26 @@ CoglHandle cogl_texture_new_from_foreign (GLuint gl_handle,
|
|||||||
GLuint y_pot_waste,
|
GLuint y_pot_waste,
|
||||||
CoglPixelFormat format);
|
CoglPixelFormat format);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_texture_new_from_bitmap:
|
||||||
|
* @handle: handle of the preloaded texture.
|
||||||
|
* @max_waste: maximum extra horizontal and|or vertical margin pixels to make
|
||||||
|
* texture fit GPU limitations.
|
||||||
|
* @auto_mipmap: enable or disable automatic generation of mipmap pyramid
|
||||||
|
* from the base level image whenever it is updated.
|
||||||
|
* @internal_format: the #CoglPixelFormat to use for the GPU storage of the
|
||||||
|
* texture.
|
||||||
|
*
|
||||||
|
* Create a cogl texture from a #CoglBitmap.
|
||||||
|
*
|
||||||
|
* Returns: a #CoglHandle to the newly created texture or COGL_INVALID_HANDLE
|
||||||
|
* if creating the texture failed.
|
||||||
|
*/
|
||||||
|
CoglHandle cogl_texture_new_from_bitmap (CoglBitmap *bitmap,
|
||||||
|
gint max_waste,
|
||||||
|
gboolean auto_mipmap,
|
||||||
|
CoglPixelFormat internal_format);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_is_texture:
|
* cogl_is_texture:
|
||||||
* @handle: A CoglHandle
|
* @handle: A CoglHandle
|
||||||
@ -385,6 +405,45 @@ void cogl_texture_polygon (CoglHandle handle,
|
|||||||
CoglTextureVertex *vertices,
|
CoglTextureVertex *vertices,
|
||||||
gboolean use_color);
|
gboolean use_color);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_bitmap_new_from_file:
|
||||||
|
* @filename: the file to load.
|
||||||
|
* @error: a #GError or %NULL.
|
||||||
|
*
|
||||||
|
* Load an image file from disk. This function can be safely called from
|
||||||
|
* within a thread.
|
||||||
|
*
|
||||||
|
* Returns: A #CoglBitmap to the new loaded image data, or %NULL if loading
|
||||||
|
* the image failed.
|
||||||
|
*
|
||||||
|
* Since: 1.0
|
||||||
|
*/
|
||||||
|
CoglBitmap * cogl_bitmap_new_from_file (const gchar *filename,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_bitmap_get_size_from_file:
|
||||||
|
* @filename: the file to check
|
||||||
|
* @width: return location for the bitmap width
|
||||||
|
* @height: return location for the bitmap height
|
||||||
|
*
|
||||||
|
* Parses an image file enough to extract the width and height
|
||||||
|
* of the bitmap.
|
||||||
|
*
|
||||||
|
* Since: 1.0
|
||||||
|
*/
|
||||||
|
gboolean cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
|
gint *width,
|
||||||
|
gint *height);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cogl_bitmap_free:
|
||||||
|
* @bmp: a #CoglBitmap.
|
||||||
|
*
|
||||||
|
* Frees a #CoglBitmap.
|
||||||
|
*/
|
||||||
|
void cogl_bitmap_free (CoglBitmap *bmp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_texture_multiple_rectangles:
|
* cogl_texture_multiple_rectangles:
|
||||||
* @handle: a @CoglHandle.
|
* @handle: a @CoglHandle.
|
||||||
@ -401,7 +460,7 @@ void cogl_texture_polygon (CoglHandle handle,
|
|||||||
* parameters x1, y1, x2, y2, tx1, ty1, tx2 and ty2 and have the same
|
* parameters x1, y1, x2, y2, tx1, ty1, tx2 and ty2 and have the same
|
||||||
* meaning as in cogl_texture_rectangle().
|
* meaning as in cogl_texture_rectangle().
|
||||||
*
|
*
|
||||||
* Since: 1.0
|
* Since: 0.8.6
|
||||||
*/
|
*/
|
||||||
void cogl_texture_multiple_rectangles
|
void cogl_texture_multiple_rectangles
|
||||||
(CoglHandle handle,
|
(CoglHandle handle,
|
||||||
|
79
cogl-types.h
79
cogl-types.h
@ -28,6 +28,13 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CoglBitmap:
|
||||||
|
*
|
||||||
|
* Type used for storing image data.
|
||||||
|
*/
|
||||||
|
typedef struct _CoglBitmap CoglBitmap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CoglHandle:
|
* CoglHandle:
|
||||||
*
|
*
|
||||||
@ -86,27 +93,29 @@ typedef struct _CoglTextureVertex CoglTextureVertex;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* CoglPixelFormat:
|
* CoglPixelFormat:
|
||||||
* @COGL_PIXEL_FORMAT_ANY:
|
* @COGL_PIXEL_FORMAT_ANY: Any format
|
||||||
* @COGL_PIXEL_FORMAT_A_8:
|
* @COGL_PIXEL_FORMAT_A_8: 8 bits alpha mask
|
||||||
* @COGL_PIXEL_FORMAT_RGB_888:
|
* @COGL_PIXEL_FORMAT_RGB_565: RGB, 16 bits
|
||||||
* @COGL_PIXEL_FORMAT_BGR_888:
|
* @COGL_PIXEL_FORMAT_RGBA_4444: RGBA, 16 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_8888:
|
* @COGL_PIXEL_FORMAT_RGBA_5551: RGBA, 16 bits
|
||||||
* @COGL_PIXEL_FORMAT_BGRA_8888:
|
* @COGL_PIXEL_FORMAT_YUV: FIXME
|
||||||
* @COGL_PIXEL_FORMAT_ARGB_8888:
|
* @COGL_PIXEL_FORMAT_G_8: FIXME
|
||||||
* @COGL_PIXEL_FORMAT_ABGR_8888:
|
* @COGL_PIXEL_FORMAT_RGB_888: RGB, 24 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_8888_PRE:
|
* @COGL_PIXEL_FORMAT_BGR_888: BGR, 24 bits
|
||||||
* @COGL_PIXEL_FORMAT_BGRA_8888_PRE:
|
* @COGL_PIXEL_FORMAT_RGBA_8888: RGBA, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_ARGB_8888_PRE:
|
* @COGL_PIXEL_FORMAT_BGRA_8888: BGRA, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_ABGR_8888_PRE:
|
* @COGL_PIXEL_FORMAT_ARGB_8888: ARGB, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGB_565:
|
* @COGL_PIXEL_FORMAT_ABGR_8888: ABGR, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_4444:
|
* @COGL_PIXEL_FORMAT_RGBA_8888_PRE: Premultiplied RGBA, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_5551:
|
* @COGL_PIXEL_FORMAT_BGRA_8888_PRE: Premultiplied BGRA, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_4444_PRE:
|
* @COGL_PIXEL_FORMAT_ARGB_8888_PRE: Premultiplied ARGB, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_RGBA_5551_PRE:
|
* @COGL_PIXEL_FORMAT_ABGR_8888_PRE: Premultiplied ABGR, 32 bits
|
||||||
* @COGL_PIXEL_FORMAT_YUV:
|
* @COGL_PIXEL_FORMAT_RGBA_4444_PRE: Premultiplied RGBA, 16 bits
|
||||||
* @COGL_PIXEL_FORMAT_G_8:
|
* @COGL_PIXEL_FORMAT_RGBA_5551_PRE: Premultiplied RGBA, 16 bits
|
||||||
*
|
*
|
||||||
* Pixel formats used by COGL.
|
* Pixel formats used by COGL.
|
||||||
|
*
|
||||||
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@ -173,19 +182,21 @@ typedef enum
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* CoglFeatureFlags:
|
* CoglFeatureFlags:
|
||||||
* @COGL_FEATURE_TEXTURE_RECTANGLE:
|
* @COGL_FEATURE_TEXTURE_RECTANGLE: ARB_texture_rectangle support
|
||||||
* @COGL_FEATURE_TEXTURE_NPOT:
|
* @COGL_FEATURE_TEXTURE_NPOT: ARB_texture_non_power_of_two support
|
||||||
* @COGL_FEATURE_TEXTURE_YUV:
|
* @COGL_FEATURE_TEXTURE_YUV: ycbcr conversion support
|
||||||
* @COGL_FEATURE_TEXTURE_READ_PIXELS:
|
* @COGL_FEATURE_TEXTURE_READ_PIXELS: glReadPixels() support
|
||||||
* @COGL_FEATURE_SHADERS_GLSL:
|
* @COGL_FEATURE_SHADERS_GLSL: GLSL support
|
||||||
* @COGL_FEATURE_OFFSCREEN:
|
* @COGL_FEATURE_OFFSCREEN: FBO support
|
||||||
* @COGL_FEATURE_OFFSCREEN_MULTISAMPLE:
|
* @COGL_FEATURE_OFFSCREEN_MULTISAMPLE: Multisample support on FBOs
|
||||||
* @COGL_FEATURE_OFFSCREEN_BLIT:
|
* @COGL_FEATURE_OFFSCREEN_BLIT: Blit support on FBOs
|
||||||
* @COGL_FEATURE_FOUR_CLIP_PLANES:
|
* @COGL_FEATURE_FOUR_CLIP_PLANES: At least 4 clip planes available
|
||||||
* @COGL_FEATURE_STENCIL_BUFFER:
|
* @COGL_FEATURE_STENCIL_BUFFER: Stencil buffer support
|
||||||
* @COGL_FEATURE_VBOS:
|
* @COGL_FEATURE_VBOS: VBO support
|
||||||
*
|
*
|
||||||
* Flags for the supported features.
|
* Flags for the supported features.
|
||||||
|
*
|
||||||
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@ -204,11 +215,13 @@ typedef enum
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* CoglBufferTarget:
|
* CoglBufferTarget:
|
||||||
* @COGL_WINDOW_BUFFER:
|
* @COGL_WINDOW_BUFFER: FIXME
|
||||||
* @COGL_MASK_BUFFER:
|
* @COGL_MASK_BUFFER: FIXME
|
||||||
* @COGL_OFFSCREEN_BUFFER:
|
* @COGL_OFFSCREEN_BUFFER: FIXME
|
||||||
*
|
*
|
||||||
|
* Target flags for FBOs.
|
||||||
*
|
*
|
||||||
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@ INCLUDES = \
|
|||||||
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
||||||
-I$(top_builddir)/clutter \
|
-I$(top_builddir)/clutter \
|
||||||
-I$(top_builddir)/clutter/cogl \
|
-I$(top_builddir)/clutter/cogl \
|
||||||
|
-DG_LOG_DOMAIN=\"Cogl-Common\" \
|
||||||
-DCLUTTER_COMPILATION \
|
-DCLUTTER_COMPILATION \
|
||||||
$(CLUTTER_CFLAGS) \
|
$(CLUTTER_CFLAGS) \
|
||||||
$(CLUTTER_DEBUG_CFLAGS) \
|
$(CLUTTER_DEBUG_CFLAGS) \
|
||||||
|
@ -84,6 +84,20 @@ cogl_bitmap_error_quark (void)
|
|||||||
return g_quark_from_static_string ("cogl-bitmap-error-quark");
|
return g_quark_from_static_string ("cogl-bitmap-error-quark");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
|
gint *width,
|
||||||
|
gint *height)
|
||||||
|
{
|
||||||
|
if (width)
|
||||||
|
*width = 0;
|
||||||
|
|
||||||
|
if (height)
|
||||||
|
*height = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* the error does not contain the filename as the caller already has it */
|
/* the error does not contain the filename as the caller already has it */
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
||||||
@ -177,9 +191,22 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
|
|||||||
#elif defined(USE_GDKPIXBUF)
|
#elif defined(USE_GDKPIXBUF)
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
_cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
const gchar *filename,
|
gint *width,
|
||||||
GError **error)
|
gint *height)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (filename != NULL, FALSE);
|
||||||
|
|
||||||
|
if (gdk_pixbuf_get_file_info (filename, width, height) != NULL)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
||||||
|
const gchar *filename,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
gboolean has_alpha;
|
gboolean has_alpha;
|
||||||
@ -198,11 +225,13 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
|
|||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
if (bmp == NULL) return FALSE;
|
if (bmp == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* Load from file using GdkPixbuf */
|
/* Load from file using GdkPixbuf */
|
||||||
pixbuf = gdk_pixbuf_new_from_file (filename, error);
|
pixbuf = gdk_pixbuf_new_from_file (filename, error);
|
||||||
if (pixbuf == NULL) return FALSE;
|
if (pixbuf == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* Get pixbuf properties */
|
/* Get pixbuf properties */
|
||||||
has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
|
has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
|
||||||
@ -278,6 +307,20 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
|
|||||||
|
|
||||||
#include "stb_image.c"
|
#include "stb_image.c"
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
|
gint *width,
|
||||||
|
gint *height)
|
||||||
|
{
|
||||||
|
if (width)
|
||||||
|
*width = 0;
|
||||||
|
|
||||||
|
if (height)
|
||||||
|
*height = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
_cogl_bitmap_from_file (CoglBitmap *bmp,
|
||||||
const gchar *filename,
|
const gchar *filename,
|
||||||
@ -290,11 +333,15 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
|
|||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
if (bmp == NULL) return FALSE;
|
if (bmp == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* Load from file using stb */
|
/* Load from file using stb */
|
||||||
pixels = stbi_load (filename, &width, &height, &stb_pixel_format, STBI_rgb_alpha);
|
pixels = stbi_load (filename,
|
||||||
if (pixels == NULL) return FALSE;
|
&width, &height, &stb_pixel_format,
|
||||||
|
STBI_rgb_alpha);
|
||||||
|
if (pixels == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* Store bitmap info */
|
/* Store bitmap info */
|
||||||
bmp->data = g_memdup (pixels, height * width * 4);
|
bmp->data = g_memdup (pixels, height * width * 4);
|
||||||
|
@ -148,3 +148,42 @@ _cogl_bitmap_copy_subregion (CoglBitmap *src,
|
|||||||
dstdata += dst->rowstride;
|
dstdata += dst->rowstride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
|
gint *width,
|
||||||
|
gint *height)
|
||||||
|
{
|
||||||
|
return _cogl_bitmap_get_size_from_file (filename, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
CoglBitmap *
|
||||||
|
cogl_bitmap_new_from_file (const gchar *filename,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
CoglBitmap bmp;
|
||||||
|
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
|
||||||
|
|
||||||
|
/* Try loading with imaging backend */
|
||||||
|
if (!_cogl_bitmap_from_file (&bmp, filename, error))
|
||||||
|
{
|
||||||
|
/* Try fallback */
|
||||||
|
if (!_cogl_bitmap_fallback_from_file (&bmp, filename))
|
||||||
|
return NULL;
|
||||||
|
else if (error && *error)
|
||||||
|
{
|
||||||
|
g_error_free (*error);
|
||||||
|
*error = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (CoglBitmap *) g_memdup (&bmp, sizeof (CoglBitmap));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_bitmap_free (CoglBitmap *bmp)
|
||||||
|
{
|
||||||
|
g_free (bmp->data);
|
||||||
|
g_free (bmp);
|
||||||
|
}
|
||||||
|
@ -28,8 +28,6 @@
|
|||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
typedef struct _CoglBitmap CoglBitmap;
|
|
||||||
|
|
||||||
struct _CoglBitmap
|
struct _CoglBitmap
|
||||||
{
|
{
|
||||||
guchar *data;
|
guchar *data;
|
||||||
@ -92,4 +90,9 @@ _cogl_bitmap_copy_subregion (CoglBitmap *src,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_cogl_bitmap_get_size_from_file (const gchar *filename,
|
||||||
|
gint *width,
|
||||||
|
gint *height);
|
||||||
|
|
||||||
#endif /* __COGL_BITMAP_H */
|
#endif /* __COGL_BITMAP_H */
|
||||||
|
@ -209,6 +209,8 @@ COGL_HANDLE_DEFINE (Mesh, mesh, mesh_handles);
|
|||||||
*
|
*
|
||||||
* This creates a Cogl handle for a new mesh that you can then start to add
|
* This creates a Cogl handle for a new mesh that you can then start to add
|
||||||
* attributes too.
|
* attributes too.
|
||||||
|
*
|
||||||
|
* Return value: a new #CoglHandle
|
||||||
*/
|
*/
|
||||||
CoglHandle
|
CoglHandle
|
||||||
cogl_mesh_new (guint n_vertices)
|
cogl_mesh_new (guint n_vertices)
|
||||||
|
@ -20,6 +20,7 @@ INCLUDES = \
|
|||||||
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
||||||
-I$(top_builddir)/clutter \
|
-I$(top_builddir)/clutter \
|
||||||
-I$(top_builddir)/clutter/cogl \
|
-I$(top_builddir)/clutter/cogl \
|
||||||
|
-DG_LOG_DOMAIN=\"Cogl-GL\" \
|
||||||
-DCLUTTER_COMPILATION \
|
-DCLUTTER_COMPILATION \
|
||||||
$(CLUTTER_CFLAGS) \
|
$(CLUTTER_CFLAGS) \
|
||||||
$(CLUTTER_DEBUG_CFLAGS) \
|
$(CLUTTER_DEBUG_CFLAGS) \
|
||||||
|
@ -1323,30 +1323,13 @@ cogl_texture_new_from_data (guint width,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglHandle
|
||||||
cogl_texture_new_from_file (const gchar *filename,
|
cogl_texture_new_from_bitmap (CoglBitmap *bmp,
|
||||||
gint max_waste,
|
gint max_waste,
|
||||||
gboolean auto_mipmap,
|
gboolean auto_mipmap,
|
||||||
CoglPixelFormat internal_format,
|
CoglPixelFormat internal_format)
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
CoglBitmap bmp;
|
|
||||||
CoglTexture *tex;
|
CoglTexture *tex;
|
||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
|
|
||||||
|
|
||||||
/* Try loading with imaging backend */
|
|
||||||
if (!_cogl_bitmap_from_file (&bmp, filename, error))
|
|
||||||
{
|
|
||||||
/* Try fallback */
|
|
||||||
if (!_cogl_bitmap_fallback_from_file (&bmp, filename))
|
|
||||||
return COGL_INVALID_HANDLE;
|
|
||||||
else if (error && *error)
|
|
||||||
{
|
|
||||||
g_error_free (*error);
|
|
||||||
*error = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create new texture and fill with loaded data */
|
/* Create new texture and fill with loaded data */
|
||||||
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
|
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
|
||||||
|
|
||||||
@ -1356,8 +1339,9 @@ cogl_texture_new_from_file (const gchar *filename,
|
|||||||
tex->is_foreign = FALSE;
|
tex->is_foreign = FALSE;
|
||||||
tex->auto_mipmap = auto_mipmap;
|
tex->auto_mipmap = auto_mipmap;
|
||||||
|
|
||||||
tex->bitmap = bmp;
|
tex->bitmap = *bmp;
|
||||||
tex->bitmap_owner = TRUE;
|
tex->bitmap_owner = TRUE;
|
||||||
|
bmp->data = NULL;
|
||||||
|
|
||||||
tex->slice_x_spans = NULL;
|
tex->slice_x_spans = NULL;
|
||||||
tex->slice_y_spans = NULL;
|
tex->slice_y_spans = NULL;
|
||||||
@ -1398,6 +1382,30 @@ cogl_texture_new_from_file (const gchar *filename,
|
|||||||
return _cogl_texture_handle_new (tex);
|
return _cogl_texture_handle_new (tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CoglHandle
|
||||||
|
cogl_texture_new_from_file (const gchar *filename,
|
||||||
|
gint max_waste,
|
||||||
|
gboolean auto_mipmap,
|
||||||
|
CoglPixelFormat internal_format,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
CoglBitmap *bmp;
|
||||||
|
CoglHandle handle;
|
||||||
|
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
|
||||||
|
|
||||||
|
if (!(bmp = cogl_bitmap_new_from_file (filename, error)))
|
||||||
|
return COGL_INVALID_HANDLE;
|
||||||
|
|
||||||
|
handle = cogl_texture_new_from_bitmap (bmp,
|
||||||
|
max_waste,
|
||||||
|
auto_mipmap,
|
||||||
|
internal_format);
|
||||||
|
cogl_bitmap_free (bmp);
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglHandle
|
||||||
cogl_texture_new_from_foreign (GLuint gl_handle,
|
cogl_texture_new_from_foreign (GLuint gl_handle,
|
||||||
GLenum gl_target,
|
GLenum gl_target,
|
||||||
|
@ -20,6 +20,7 @@ INCLUDES = \
|
|||||||
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
|
||||||
-I$(top_builddir)/clutter \
|
-I$(top_builddir)/clutter \
|
||||||
-I$(top_builddir)/clutter/cogl \
|
-I$(top_builddir)/clutter/cogl \
|
||||||
|
-DG_LOG_DOMAIN=\"Cogl-GLES\" \
|
||||||
-DCLUTTER_COMPILATION \
|
-DCLUTTER_COMPILATION \
|
||||||
$(CLUTTER_CFLAGS) \
|
$(CLUTTER_CFLAGS) \
|
||||||
$(CLUTTER_DEBUG_CFLAGS) \
|
$(CLUTTER_DEBUG_CFLAGS) \
|
||||||
|
@ -72,6 +72,7 @@ typedef struct
|
|||||||
can be flushed */
|
can be flushed */
|
||||||
GLuint texture_current;
|
GLuint texture_current;
|
||||||
GLenum texture_target;
|
GLenum texture_target;
|
||||||
|
GLenum texture_format;
|
||||||
|
|
||||||
/* Framebuffer objects */
|
/* Framebuffer objects */
|
||||||
GArray *fbo_handles;
|
GArray *fbo_handles;
|
||||||
|
@ -891,8 +891,8 @@ cogl_gles2_do_set_uniform (GLint location, CoglBoxedValue *value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
cogl_wrap_glDrawArrays (GLenum mode, GLint first, GLsizei count)
|
cogl_wrap_prepare_for_draw (void)
|
||||||
{
|
{
|
||||||
CoglGles2WrapperProgram *program;
|
CoglGles2WrapperProgram *program;
|
||||||
|
|
||||||
@ -999,9 +999,25 @@ cogl_wrap_glDrawArrays (GLenum mode, GLint first, GLsizei count)
|
|||||||
w->dirty_custom_uniforms = 0;
|
w->dirty_custom_uniforms = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_wrap_glDrawArrays (GLenum mode, GLint first, GLsizei count)
|
||||||
|
{
|
||||||
|
cogl_wrap_prepare_for_draw ();
|
||||||
|
|
||||||
glDrawArrays (mode, first, count);
|
glDrawArrays (mode, first, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_wrap_glDrawElements (GLenum mode, GLsizei count, GLenum type,
|
||||||
|
const GLvoid *indices)
|
||||||
|
{
|
||||||
|
cogl_wrap_prepare_for_draw ();
|
||||||
|
|
||||||
|
glDrawElements (mode, count, type, indices);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
|
cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
|
||||||
GLenum internal_format)
|
GLenum internal_format)
|
||||||
|
@ -250,7 +250,8 @@ void cogl_wrap_glFogx (GLenum pname, GLfixed param);
|
|||||||
void cogl_wrap_glFogxv (GLenum pname, const GLfixed *params);
|
void cogl_wrap_glFogxv (GLenum pname, const GLfixed *params);
|
||||||
|
|
||||||
void cogl_wrap_glDrawArrays (GLenum mode, GLint first, GLsizei count);
|
void cogl_wrap_glDrawArrays (GLenum mode, GLint first, GLsizei count);
|
||||||
|
void cogl_wrap_glDrawElements (GLenum mode, GLsizei count, GLenum type,
|
||||||
|
const GLvoid *indices);
|
||||||
void cogl_wrap_glTexParameteri (GLenum target, GLenum pname, GLfloat param);
|
void cogl_wrap_glTexParameteri (GLenum target, GLenum pname, GLfloat param);
|
||||||
|
|
||||||
void cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
|
void cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
|
||||||
@ -274,6 +275,7 @@ void _cogl_gles2_clear_cache_for_program (CoglHandle program);
|
|||||||
|
|
||||||
#define cogl_wrap_glClearColorx glClearColor
|
#define cogl_wrap_glClearColorx glClearColor
|
||||||
#define cogl_wrap_glDrawArrays glDrawArrays
|
#define cogl_wrap_glDrawArrays glDrawArrays
|
||||||
|
#define cogl_wrap_glDrawElements glDrawElements
|
||||||
#define cogl_wrap_glPushMatrix glPushMatrix
|
#define cogl_wrap_glPushMatrix glPushMatrix
|
||||||
#define cogl_wrap_glPopMatrix glPopMatrix
|
#define cogl_wrap_glPopMatrix glPopMatrix
|
||||||
#define cogl_wrap_glMatrixMode glMatrixMode
|
#define cogl_wrap_glMatrixMode glMatrixMode
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#define glTexCoordPointer cogl_wrap_glTexCoordPointer
|
#define glTexCoordPointer cogl_wrap_glTexCoordPointer
|
||||||
#define glColorPointer cogl_wrap_glColorPointer
|
#define glColorPointer cogl_wrap_glColorPointer
|
||||||
#define glDrawArrays cogl_wrap_glDrawArrays
|
#define glDrawArrays cogl_wrap_glDrawArrays
|
||||||
|
#define glDrawElements cogl_wrap_glDrawElements
|
||||||
#define glTexParameteri cogl_wrap_glTexParameteri
|
#define glTexParameteri cogl_wrap_glTexParameteri
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1446,30 +1447,13 @@ cogl_texture_new_from_data (guint width,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglHandle
|
||||||
cogl_texture_new_from_file (const gchar *filename,
|
cogl_texture_new_from_bitmap (CoglBitmap *bmp,
|
||||||
gint max_waste,
|
gint max_waste,
|
||||||
gboolean auto_mipmap,
|
gboolean auto_mipmap,
|
||||||
CoglPixelFormat internal_format,
|
CoglPixelFormat internal_format)
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
CoglBitmap bmp;
|
|
||||||
CoglTexture *tex;
|
CoglTexture *tex;
|
||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
|
|
||||||
|
|
||||||
/* Try loading with imaging backend */
|
|
||||||
if (!_cogl_bitmap_from_file (&bmp, filename, error))
|
|
||||||
{
|
|
||||||
/* Try fallback */
|
|
||||||
if (!_cogl_bitmap_fallback_from_file (&bmp, filename))
|
|
||||||
return COGL_INVALID_HANDLE;
|
|
||||||
else if (error && *error)
|
|
||||||
{
|
|
||||||
g_error_free (*error);
|
|
||||||
*error = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create new texture and fill with loaded data */
|
/* Create new texture and fill with loaded data */
|
||||||
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
|
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
|
||||||
|
|
||||||
@ -1479,8 +1463,9 @@ cogl_texture_new_from_file (const gchar *filename,
|
|||||||
tex->is_foreign = FALSE;
|
tex->is_foreign = FALSE;
|
||||||
tex->auto_mipmap = auto_mipmap;
|
tex->auto_mipmap = auto_mipmap;
|
||||||
|
|
||||||
tex->bitmap = bmp;
|
tex->bitmap = *bmp;
|
||||||
tex->bitmap_owner = TRUE;
|
tex->bitmap_owner = TRUE;
|
||||||
|
bmp->data = NULL;
|
||||||
|
|
||||||
tex->slice_x_spans = NULL;
|
tex->slice_x_spans = NULL;
|
||||||
tex->slice_y_spans = NULL;
|
tex->slice_y_spans = NULL;
|
||||||
@ -1521,6 +1506,30 @@ cogl_texture_new_from_file (const gchar *filename,
|
|||||||
return _cogl_texture_handle_new (tex);
|
return _cogl_texture_handle_new (tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CoglHandle
|
||||||
|
cogl_texture_new_from_file (const gchar *filename,
|
||||||
|
gint max_waste,
|
||||||
|
gboolean auto_mipmap,
|
||||||
|
CoglPixelFormat internal_format,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
CoglBitmap *bmp;
|
||||||
|
CoglHandle handle;
|
||||||
|
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
|
||||||
|
|
||||||
|
if (!(bmp = cogl_bitmap_new_from_file (filename, error)))
|
||||||
|
return COGL_INVALID_HANDLE;
|
||||||
|
|
||||||
|
handle = cogl_texture_new_from_bitmap (bmp,
|
||||||
|
max_waste,
|
||||||
|
auto_mipmap,
|
||||||
|
internal_format);
|
||||||
|
cogl_bitmap_free (bmp);
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglHandle
|
||||||
cogl_texture_new_from_foreign (GLuint gl_handle,
|
cogl_texture_new_from_foreign (GLuint gl_handle,
|
||||||
GLenum gl_target,
|
GLenum gl_target,
|
||||||
@ -2094,7 +2103,9 @@ _cogl_texture_flush_vertices (void)
|
|||||||
GE( glTexCoordPointer (2, GL_FLOAT,
|
GE( glTexCoordPointer (2, GL_FLOAT,
|
||||||
sizeof (CoglTextureGLVertex), p->t ) );
|
sizeof (CoglTextureGLVertex), p->t ) );
|
||||||
|
|
||||||
GE( glBindTexture (ctx->texture_target, ctx->texture_current) );
|
GE( cogl_gles2_wrapper_bind_texture (ctx->texture_target,
|
||||||
|
ctx->texture_current,
|
||||||
|
ctx->texture_format) );
|
||||||
GE( glDrawElements (GL_TRIANGLES,
|
GE( glDrawElements (GL_TRIANGLES,
|
||||||
needed_indices,
|
needed_indices,
|
||||||
GL_UNSIGNED_SHORT,
|
GL_UNSIGNED_SHORT,
|
||||||
@ -2284,6 +2295,7 @@ _cogl_texture_quad_sw (CoglTexture *tex,
|
|||||||
_cogl_texture_flush_vertices ();
|
_cogl_texture_flush_vertices ();
|
||||||
ctx->texture_target = tex->gl_target;
|
ctx->texture_target = tex->gl_target;
|
||||||
ctx->texture_current = gl_handle;
|
ctx->texture_current = gl_handle;
|
||||||
|
ctx->texture_format = tex->gl_intformat;
|
||||||
|
|
||||||
_cogl_texture_add_quad_vertices (COGL_FIXED_TO_FLOAT (slice_qx1),
|
_cogl_texture_add_quad_vertices (COGL_FIXED_TO_FLOAT (slice_qx1),
|
||||||
COGL_FIXED_TO_FLOAT (slice_qy1),
|
COGL_FIXED_TO_FLOAT (slice_qy1),
|
||||||
@ -2328,6 +2340,7 @@ _cogl_texture_quad_hw (CoglTexture *tex,
|
|||||||
_cogl_texture_flush_vertices ();
|
_cogl_texture_flush_vertices ();
|
||||||
ctx->texture_target = tex->gl_target;
|
ctx->texture_target = tex->gl_target;
|
||||||
ctx->texture_current = gl_handle;
|
ctx->texture_current = gl_handle;
|
||||||
|
ctx->texture_format = tex->gl_intformat;
|
||||||
|
|
||||||
/* Don't include the waste in the texture coordinates */
|
/* Don't include the waste in the texture coordinates */
|
||||||
x_span = &g_array_index (tex->slice_x_spans, CoglTexSliceSpan, 0);
|
x_span = &g_array_index (tex->slice_x_spans, CoglTexSliceSpan, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user