Ejemplo n.º 1
0
static gboolean
_cogl_pixel_buffer_set_data (CoglBuffer   *buffer,
                             unsigned int  offset,
                             const guint8 *data,
                             unsigned int  size)
{
  CoglPixelBuffer *pixel_buffer = COGL_PIXEL_BUFFER (buffer);

  _COGL_GET_CONTEXT (ctx, FALSE);

  pixel_buffer->gl_target = GL_PIXEL_UNPACK_BUFFER;

  _cogl_buffer_bind (buffer, pixel_buffer->gl_target);

  /* create an empty store if we don't have one yet. creating the store
   * lazily allows the user of the CoglBuffer to set a hint before the
   * store is created. */
  if (!COGL_PIXEL_BUFFER_FLAG_IS_SET (pixel_buffer, STORE_CREATED))
    {
      GE( glBufferData (pixel_buffer->gl_target,
                        buffer->size,
                        NULL,
                        _cogl_buffer_hints_to_gl_enum (buffer->usage_hint,
                                                       buffer->update_hint)) );
      COGL_PIXEL_BUFFER_SET_FLAG (pixel_buffer, STORE_CREATED);
    }

  GE( glBufferSubData (pixel_buffer->gl_target, offset, size, data) );

  _cogl_buffer_bind (NULL, pixel_buffer->gl_target);

  return TRUE;
}
Ejemplo n.º 2
0
static void
bo_recreate_store (CoglBuffer *buffer)
{
  GLenum gl_target;
  GLenum gl_enum;

  /* This assumes the buffer is already bound */

  gl_target = convert_bind_target_to_gl_target (buffer->last_target);
  gl_enum = _cogl_buffer_hints_to_gl_enum (buffer);

  GE( buffer->context, glBufferData (gl_target,
                                     buffer->size,
                                     NULL,
                                     gl_enum) );
  buffer->store_created = TRUE;
}
Ejemplo n.º 3
0
static guint8 *
_cogl_pixel_buffer_map (CoglBuffer       *buffer,
                        CoglBufferAccess  access)
{
  CoglPixelBuffer *pixel_buffer = COGL_PIXEL_BUFFER (buffer);
  GLenum gl_target;
  guint8 *data;

  _COGL_GET_CONTEXT (ctx, NULL);

  /* we determine the target lazily, on the first map */
  gl_target = GL_PIXEL_UNPACK_BUFFER;
  pixel_buffer->gl_target = gl_target;

  _cogl_buffer_bind (buffer, gl_target);

  /* create an empty store if we don't have one yet. creating the store
   * lazily allows the user of the CoglBuffer to set a hint before the
   * store is created. */
  if (!COGL_PIXEL_BUFFER_FLAG_IS_SET (pixel_buffer, STORE_CREATED))
    {
      GE( glBufferData (gl_target,
                        buffer->size,
                        NULL,
                        _cogl_buffer_hints_to_gl_enum (buffer->usage_hint,
                                                       buffer->update_hint)) );
      COGL_PIXEL_BUFFER_SET_FLAG (pixel_buffer, STORE_CREATED);
    }

  GE_RET( data, glMapBuffer (gl_target,
                             _cogl_buffer_access_to_gl_enum (access)) );
  if (data)
    COGL_BUFFER_SET_FLAG (buffer, MAPPED);

  _cogl_buffer_bind (NULL, gl_target);

  return data;
}