diff --git a/cogl/cogl-attribute-buffer.c b/cogl/cogl-attribute-buffer.c index f9eeeac74..a122e968a 100644 --- a/cogl/cogl-attribute-buffer.c +++ b/cogl/cogl-attribute-buffer.c @@ -44,18 +44,11 @@ cogl_attribute_buffer_new (CoglContext *context, const void *data) { CoglAttributeBuffer *array = g_slice_new (CoglAttributeBuffer); - CoglBool use_malloc; - - if (!(context->private_feature_flags & COGL_PRIVATE_FEATURE_VBOS)) - use_malloc = TRUE; - else - use_malloc = FALSE; /* parent's constructor */ _cogl_buffer_initialize (COGL_BUFFER (array), context, bytes, - use_malloc, COGL_BUFFER_BIND_TARGET_ATTRIBUTE_BUFFER, COGL_BUFFER_USAGE_HINT_ATTRIBUTE_BUFFER, COGL_BUFFER_UPDATE_HINT_STATIC); diff --git a/cogl/cogl-buffer-private.h b/cogl/cogl-buffer-private.h index 52bffafe4..7e81e262e 100644 --- a/cogl/cogl-buffer-private.h +++ b/cogl/cogl-buffer-private.h @@ -113,12 +113,11 @@ _cogl_buffer_register_buffer_type (const CoglObjectClass *klass); _cogl_buffer_register_buffer_type (&_cogl_##type_name##_class)) void -_cogl_buffer_initialize (CoglBuffer *buffer, - CoglContext *context, - unsigned int size, - CoglBool use_malloc, +_cogl_buffer_initialize (CoglBuffer *buffer, + CoglContext *context, + size_t size, CoglBufferBindTarget default_target, - CoglBufferUsageHint usage_hint, + CoglBufferUsageHint usage_hint, CoglBufferUpdateHint update_hint); void diff --git a/cogl/cogl-buffer.c b/cogl/cogl-buffer.c index ffd1ef16b..12b2d5ac9 100644 --- a/cogl/cogl-buffer.c +++ b/cogl/cogl-buffer.c @@ -292,14 +292,15 @@ malloc_set_data (CoglBuffer *buffer, } void -_cogl_buffer_initialize (CoglBuffer *buffer, - CoglContext *context, - unsigned int size, - CoglBool use_malloc, - CoglBufferBindTarget default_target, - CoglBufferUsageHint usage_hint, - CoglBufferUpdateHint update_hint) +_cogl_buffer_initialize (CoglBuffer *buffer, + CoglContext *context, + size_t size, + CoglBufferBindTarget default_target, + CoglBufferUsageHint usage_hint, + CoglBufferUpdateHint update_hint) { + CoglBool use_malloc = FALSE; + buffer->context = context; buffer->flags = COGL_BUFFER_FLAG_NONE; buffer->store_created = FALSE; @@ -310,6 +311,19 @@ _cogl_buffer_initialize (CoglBuffer *buffer, buffer->data = NULL; buffer->immutable_ref = 0; + if (default_target == COGL_BUFFER_BIND_TARGET_PIXEL_PACK || + default_target == COGL_BUFFER_BIND_TARGET_PIXEL_UNPACK) + { + if (!(context->private_feature_flags & COGL_PRIVATE_FEATURE_PBOS)) + use_malloc = TRUE; + } + else if (default_target == COGL_BUFFER_BIND_TARGET_ATTRIBUTE_BUFFER || + default_target == COGL_BUFFER_BIND_TARGET_INDEX_BUFFER) + { + if (!(context->private_feature_flags & COGL_PRIVATE_FEATURE_VBOS)) + use_malloc = TRUE; + } + if (use_malloc) { buffer->vtable.map = malloc_map; diff --git a/cogl/cogl-index-buffer.c b/cogl/cogl-index-buffer.c index 547cae3f4..a36c2d29c 100644 --- a/cogl/cogl-index-buffer.c +++ b/cogl/cogl-index-buffer.c @@ -45,18 +45,11 @@ CoglIndexBuffer * cogl_index_buffer_new (CoglContext *context, size_t bytes) { CoglIndexBuffer *indices = g_slice_new (CoglIndexBuffer); - CoglBool use_malloc; - - if (!(context->private_feature_flags & COGL_PRIVATE_FEATURE_VBOS)) - use_malloc = TRUE; - else - use_malloc = FALSE; /* parent's constructor */ _cogl_buffer_initialize (COGL_BUFFER (indices), context, bytes, - use_malloc, COGL_BUFFER_BIND_TARGET_INDEX_BUFFER, COGL_BUFFER_USAGE_HINT_INDEX_BUFFER, COGL_BUFFER_UPDATE_HINT_STATIC); diff --git a/cogl/cogl-pixel-buffer.c b/cogl/cogl-pixel-buffer.c index 7b505d937..0c7502cc7 100644 --- a/cogl/cogl-pixel-buffer.c +++ b/cogl/cogl-pixel-buffer.c @@ -73,18 +73,11 @@ cogl_pixel_buffer_new (CoglContext *context, { CoglPixelBuffer *pixel_buffer = g_slice_new0 (CoglPixelBuffer); CoglBuffer *buffer = COGL_BUFFER (pixel_buffer); - CoglBool use_malloc; - - if (!(context->private_feature_flags & COGL_PRIVATE_FEATURE_PBOS)) - use_malloc = TRUE; - else - use_malloc = FALSE; /* parent's constructor */ _cogl_buffer_initialize (buffer, context, size, - use_malloc, COGL_BUFFER_BIND_TARGET_PIXEL_UNPACK, COGL_BUFFER_USAGE_HINT_TEXTURE, COGL_BUFFER_UPDATE_HINT_STATIC);