CoglBuffer * _cogl_buffer_immutable_ref (CoglBuffer *buffer) { _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), NULL); buffer->immutable_ref++; return buffer; }
void _cogl_buffer_immutable_unref (CoglBuffer *buffer) { _COGL_RETURN_IF_FAIL (cogl_is_buffer (buffer)); _COGL_RETURN_IF_FAIL (buffer->immutable_ref > 0); buffer->immutable_ref--; }
CoglBufferUpdateHint cogl_buffer_get_update_hint (CoglBuffer *buffer) { if (!cogl_is_buffer (buffer)) return FALSE; return buffer->update_hint; }
unsigned int cogl_buffer_get_size (CoglBuffer *buffer) { if (!cogl_is_buffer (buffer)) return 0; return COGL_BUFFER (buffer)->size; }
void * cogl_buffer_map (CoglBuffer *buffer, CoglBufferAccess access, CoglBufferMapHint hints, CoglError **error) { _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), NULL); return cogl_buffer_map_range (buffer, 0, buffer->size, access, hints, error); }
CoglHandle cogl_texture_new_from_buffer_EXP (CoglHandle buffer, unsigned int width, unsigned int height, CoglTextureFlags flags, CoglPixelFormat format, CoglPixelFormat internal_format, unsigned int rowstride, const unsigned int offset) { CoglHandle texture; CoglBuffer *cogl_buffer; CoglPixelArray *pixel_array; CoglBitmap *bmp; g_return_val_if_fail (cogl_is_buffer (buffer), COGL_INVALID_HANDLE); if (format == COGL_PIXEL_FORMAT_ANY) return COGL_INVALID_HANDLE; cogl_buffer = COGL_BUFFER (buffer); pixel_array = COGL_PIXEL_ARRAY (buffer); /* Rowstride from CoglBuffer or even width * bpp if not given */ if (rowstride == 0) rowstride = pixel_array->stride; if (rowstride == 0) rowstride = width * _cogl_get_format_bpp (format); /* use the CoglBuffer height and width as last resort */ if (width == 0) width = pixel_array->width; if (height == 0) height = pixel_array->height; if (width == 0 || height == 0) { /* no width or height specified, neither at creation time (because the * array was created by cogl_pixel_array_new()) nor when calling this * function */ return COGL_INVALID_HANDLE; } /* Wrap the buffer into a bitmap */ bmp = _cogl_bitmap_new_from_buffer (cogl_buffer, format, width, height, rowstride, offset); texture = cogl_texture_new_from_bitmap (bmp, flags, internal_format); cogl_object_unref (bmp); return texture; }
void cogl_buffer_unmap (CoglBuffer *buffer) { if (!cogl_is_buffer (buffer)) return; if (!(buffer->flags & COGL_BUFFER_FLAG_MAPPED)) return; buffer->vtable.unmap (buffer); }
void cogl_buffer_set_update_hint (CoglBuffer *buffer, CoglBufferUpdateHint hint) { if (!cogl_is_buffer (buffer)) return; if (G_UNLIKELY (hint > COGL_BUFFER_UPDATE_HINT_STREAM)) hint = COGL_BUFFER_UPDATE_HINT_STATIC; buffer->update_hint = hint; }
CoglBool cogl_buffer_set_data (CoglBuffer *buffer, size_t offset, const void *data, size_t size) { _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), FALSE); _COGL_RETURN_VAL_IF_FAIL ((offset + size) <= buffer->size, FALSE); if (G_UNLIKELY (buffer->immutable_ref)) warn_about_midscene_changes (); return buffer->vtable.set_data (buffer, offset, data, size); }
void * cogl_buffer_map (CoglBuffer *buffer, CoglBufferAccess access, CoglBufferMapHint hints) { _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), NULL); if (G_UNLIKELY (buffer->immutable_ref)) warn_about_midscene_changes (); if (buffer->flags & COGL_BUFFER_FLAG_MAPPED) return buffer->data; buffer->data = buffer->vtable.map (buffer, access, hints); return buffer->data; }
CoglBitmap * cogl_bitmap_new_from_buffer (CoglBuffer *buffer, CoglPixelFormat format, int width, int height, int rowstride, int offset) { CoglBitmap *bmp; _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), NULL); bmp = cogl_bitmap_new_for_data (buffer->context, width, height, format, rowstride, NULL /* data */); bmp->buffer = cogl_object_ref (buffer); bmp->data = GINT_TO_POINTER (offset); return bmp; }
void * cogl_buffer_map_range (CoglBuffer *buffer, size_t offset, size_t size, CoglBufferAccess access, CoglBufferMapHint hints, CoglError **error) { _COGL_RETURN_VAL_IF_FAIL (cogl_is_buffer (buffer), NULL); _COGL_RETURN_VAL_IF_FAIL (!(buffer->flags & COGL_BUFFER_FLAG_MAPPED), NULL); if (G_UNLIKELY (buffer->immutable_ref)) warn_about_midscene_changes (); buffer->data = buffer->vtable.map_range (buffer, offset, size, access, hints, error); return buffer->data; }