mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 11:30:45 -05:00
offscreen: Replace use of CoglHandle with CoglOffscreen
This updates cogl_offscreen_new_to_texture to return a CoglOffscreen pointer instead of a CoglHandle. Reviewed-by: Neil Roberts <neil@linux.intel.com>
This commit is contained in:
parent
0a2a3d7c80
commit
13c36fff0d
@ -30,6 +30,7 @@
|
|||||||
#include "cogl-journal-private.h"
|
#include "cogl-journal-private.h"
|
||||||
#include "cogl-winsys-private.h"
|
#include "cogl-winsys-private.h"
|
||||||
#include "cogl-attribute-private.h"
|
#include "cogl-attribute-private.h"
|
||||||
|
#include "cogl-offscreen.h"
|
||||||
|
|
||||||
#ifdef COGL_HAS_XLIB_SUPPORT
|
#ifdef COGL_HAS_XLIB_SUPPORT
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
@ -154,7 +155,7 @@ struct _CoglFramebuffer
|
|||||||
gboolean clear_clip_dirty;
|
gboolean clear_clip_dirty;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _CoglOffscreen
|
struct _CoglOffscreen
|
||||||
{
|
{
|
||||||
CoglFramebuffer _parent;
|
CoglFramebuffer _parent;
|
||||||
GLuint fbo_handle;
|
GLuint fbo_handle;
|
||||||
@ -169,9 +170,7 @@ typedef struct _CoglOffscreen
|
|||||||
* fb->config to configure if we want a depth or stencil buffer so
|
* fb->config to configure if we want a depth or stencil buffer so
|
||||||
* we can get rid of these flags */
|
* we can get rid of these flags */
|
||||||
CoglOffscreenFlags create_flags;
|
CoglOffscreenFlags create_flags;
|
||||||
} CoglOffscreen;
|
};
|
||||||
|
|
||||||
#define COGL_OFFSCREEN(X) ((CoglOffscreen *)(X))
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cogl_framebuffer_init (CoglFramebuffer *framebuffer,
|
_cogl_framebuffer_init (CoglFramebuffer *framebuffer,
|
||||||
@ -280,7 +279,7 @@ _cogl_free_framebuffer_stack (GSList *stack);
|
|||||||
*
|
*
|
||||||
* Return value: the new CoglOffscreen object.
|
* Return value: the new CoglOffscreen object.
|
||||||
*/
|
*/
|
||||||
CoglHandle
|
CoglOffscreen *
|
||||||
_cogl_offscreen_new_to_texture_full (CoglTexture *texture,
|
_cogl_offscreen_new_to_texture_full (CoglTexture *texture,
|
||||||
CoglOffscreenFlags create_flags,
|
CoglOffscreenFlags create_flags,
|
||||||
unsigned int level);
|
unsigned int level);
|
||||||
|
@ -704,7 +704,7 @@ _cogl_framebuffer_init_bits (CoglFramebuffer *framebuffer)
|
|||||||
framebuffer->dirty_bitmasks = FALSE;
|
framebuffer->dirty_bitmasks = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglOffscreen *
|
||||||
_cogl_offscreen_new_to_texture_full (CoglTexture *texture,
|
_cogl_offscreen_new_to_texture_full (CoglTexture *texture,
|
||||||
CoglOffscreenFlags create_flags,
|
CoglOffscreenFlags create_flags,
|
||||||
unsigned int level)
|
unsigned int level)
|
||||||
@ -774,7 +774,7 @@ _cogl_offscreen_new_to_texture_full (CoglTexture *texture,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglOffscreen *
|
||||||
cogl_offscreen_new_to_texture (CoglTexture *texture)
|
cogl_offscreen_new_to_texture (CoglTexture *texture)
|
||||||
{
|
{
|
||||||
return _cogl_offscreen_new_to_texture_full (texture, 0, 0);
|
return _cogl_offscreen_new_to_texture_full (texture, 0, 0);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007,2008,2009 Intel Corporation.
|
* Copyright (C) 2007,2008,2009,2012 Intel Corporation.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -41,6 +41,10 @@ G_BEGIN_DECLS
|
|||||||
* Cogl allows creating and operating on offscreen framebuffers.
|
* Cogl allows creating and operating on offscreen framebuffers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
typedef struct _CoglOffscreen CoglOffscreen;
|
||||||
|
|
||||||
|
#define COGL_OFFSCREEN(X) ((CoglOffscreen *)X)
|
||||||
|
|
||||||
/* Offscreen api */
|
/* Offscreen api */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,50 +58,57 @@ G_BEGIN_DECLS
|
|||||||
* given texture. You don't need to destroy the offscreen buffer before
|
* given texture. You don't need to destroy the offscreen buffer before
|
||||||
* you can use the @texture again.
|
* you can use the @texture again.
|
||||||
*
|
*
|
||||||
* Note: This does not work with sliced Cogl textures.
|
* <note>This only works with low-level #CoglTexture types such as
|
||||||
|
* #CoglTexture2D, #CoglTexture3D and #CoglTextureRectangle, and not
|
||||||
|
* with meta-texture types such as #CoglTexture2DSliced.</note>
|
||||||
*
|
*
|
||||||
* Return value: (transfer full): a #CoglHandle for the new offscreen
|
* Return value: (transfer full): a newly instantiated #CoglOffscreen
|
||||||
* buffer or %COGL_INVALID_HANDLE if it wasn't possible to create the
|
* framebuffer or %NULL if it wasn't possible to create the
|
||||||
* buffer.
|
* buffer.
|
||||||
*/
|
*/
|
||||||
CoglHandle cogl_offscreen_new_to_texture (CoglTexture *texture);
|
CoglOffscreen *
|
||||||
|
cogl_offscreen_new_to_texture (CoglTexture *texture);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_is_offscreen:
|
* cogl_is_offscreen:
|
||||||
* @handle: A CoglHandle for an offscreen buffer
|
* @object: A pointer to a #CoglObject
|
||||||
*
|
*
|
||||||
* Determines whether the given #CoglHandle references an offscreen buffer
|
* Determines whether the given #CoglObject references an offscreen
|
||||||
* object.
|
* framebuffer object.
|
||||||
*
|
*
|
||||||
* Returns: %TRUE if the handle references an offscreen buffer,
|
* Returns: %TRUE if @object is a #CoglOffscreen framebuffer,
|
||||||
* %FALSE otherwise
|
* %FALSE otherwise
|
||||||
*/
|
*/
|
||||||
gboolean cogl_is_offscreen (CoglHandle handle);
|
gboolean
|
||||||
|
cogl_is_offscreen (void *object);
|
||||||
|
|
||||||
#ifndef COGL_DISABLE_DEPRECATED
|
#ifndef COGL_DISABLE_DEPRECATED
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_offscreen_ref:
|
* cogl_offscreen_ref:
|
||||||
* @handle: A CoglHandle for an offscreen buffer
|
* @offscreen: A pointer to a #CoglOffscreen framebuffer
|
||||||
*
|
*
|
||||||
* Increments the reference count on the offscreen buffer.
|
* Increments the reference count on the @offscreen framebuffer.
|
||||||
*
|
*
|
||||||
* Return value: (transfer none): For convenience it returns the given CoglHandle
|
* Return value: (transfer none): For convenience it returns the
|
||||||
|
* given @offscreen
|
||||||
*
|
*
|
||||||
* Deprecated: 1.2: cogl_handle_ref() should be used in new code.
|
* Deprecated: 1.2: cogl_object_ref() should be used in new code.
|
||||||
*/
|
*/
|
||||||
CoglHandle cogl_offscreen_ref (CoglHandle handle) G_GNUC_DEPRECATED;
|
void *
|
||||||
|
cogl_offscreen_ref (void *offscreen) G_GNUC_DEPRECATED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_offscreen_unref:
|
* cogl_offscreen_unref:
|
||||||
* @handle: A CoglHandle for an offscreen buffer
|
* @offscreen: A pointer to a #CoglOffscreen framebuffer
|
||||||
*
|
*
|
||||||
* Decreases the reference count for the offscreen buffer and frees it when
|
* Decreases the reference count for the @offscreen buffer and frees it when
|
||||||
* the count reaches 0.
|
* the count reaches 0.
|
||||||
*
|
*
|
||||||
* Deprecated: 1.2: cogl_handle_unref() should be used in new code.
|
* Deprecated: 1.2: cogl_object_unref() should be used in new code.
|
||||||
*/
|
*/
|
||||||
void cogl_offscreen_unref (CoglHandle handle) G_GNUC_DEPRECATED;
|
void
|
||||||
|
cogl_offscreen_unref (void *offscreen) G_GNUC_DEPRECATED;
|
||||||
|
|
||||||
#endif /* COGL_DISABLE_DEPRECATED */
|
#endif /* COGL_DISABLE_DEPRECATED */
|
||||||
|
|
||||||
|
@ -1019,6 +1019,7 @@ get_texture_bits_via_offscreen (CoglTexture *texture,
|
|||||||
unsigned int dst_rowstride,
|
unsigned int dst_rowstride,
|
||||||
CoglPixelFormat dst_format)
|
CoglPixelFormat dst_format)
|
||||||
{
|
{
|
||||||
|
CoglOffscreen *offscreen;
|
||||||
CoglFramebuffer *framebuffer;
|
CoglFramebuffer *framebuffer;
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, FALSE);
|
_COGL_GET_CONTEXT (ctx, FALSE);
|
||||||
@ -1026,14 +1027,16 @@ get_texture_bits_via_offscreen (CoglTexture *texture,
|
|||||||
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
framebuffer = _cogl_offscreen_new_to_texture_full
|
offscreen = _cogl_offscreen_new_to_texture_full
|
||||||
(texture,
|
(texture,
|
||||||
COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL,
|
COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
if (framebuffer == NULL)
|
if (offscreen == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
framebuffer = COGL_FRAMEBUFFER (offscreen);
|
||||||
|
|
||||||
if (!cogl_framebuffer_allocate (framebuffer, NULL))
|
if (!cogl_framebuffer_allocate (framebuffer, NULL))
|
||||||
{
|
{
|
||||||
cogl_object_unref (framebuffer);
|
cogl_object_unref (framebuffer);
|
||||||
|
@ -296,7 +296,7 @@ test_cogl_backface_culling (TestUtilsGTestFixture *fixture,
|
|||||||
tex = cogl_texture_new_with_size (state.width, state.height,
|
tex = cogl_texture_new_with_size (state.width, state.height,
|
||||||
COGL_TEXTURE_NO_SLICING,
|
COGL_TEXTURE_NO_SLICING,
|
||||||
COGL_PIXEL_FORMAT_ANY); /* internal fmt */
|
COGL_PIXEL_FORMAT_ANY); /* internal fmt */
|
||||||
state.offscreen = cogl_offscreen_new_to_texture (tex);
|
state.offscreen = COGL_FRAMEBUFFER (cogl_offscreen_new_to_texture (tex));
|
||||||
state.offscreen_tex = tex;
|
state.offscreen_tex = tex;
|
||||||
|
|
||||||
paint (&state);
|
paint (&state);
|
||||||
|
@ -87,7 +87,8 @@ test_cogl_color_mask (TestUtilsGTestFixture *fixture,
|
|||||||
COGL_PIXEL_FORMAT_RGB_888);
|
COGL_PIXEL_FORMAT_RGB_888);
|
||||||
|
|
||||||
|
|
||||||
state.fbo[i] = cogl_offscreen_new_to_texture (state.tex[i]);
|
state.fbo[i] = COGL_FRAMEBUFFER (
|
||||||
|
cogl_offscreen_new_to_texture (state.tex[i]));
|
||||||
|
|
||||||
/* Clear the texture color bits */
|
/* Clear the texture color bits */
|
||||||
cogl_push_framebuffer (state.fbo[i]);
|
cogl_push_framebuffer (state.fbo[i]);
|
||||||
|
Loading…
Reference in New Issue
Block a user