cogl-buffer: make sure the code compiles on GL ES
OpenGL ES has no PBO extension, so we fallback to using a malloc'ed buffer. Make sure the OpenGL-only defines don't leak into the OpenGL ES compilation.
This commit is contained in:
parent
ca80e8802b
commit
273fd23742
@ -105,6 +105,15 @@ _cogl_buffer_fini (CoglBuffer *buffer)
|
|||||||
cogl_buffer_unmap (buffer);
|
cogl_buffer_unmap (buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* OpenGL ES 1.1 and 2 have a GL_OES_mapbuffer extension that is able to map
|
||||||
|
* VBOs for write only, we don't support that in CoglBuffer */
|
||||||
|
#if defined (COGL_HAS_GLES)
|
||||||
|
GLenum
|
||||||
|
_cogl_buffer_access_to_gl_enum (CoglBufferAccess access)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
GLenum
|
GLenum
|
||||||
_cogl_buffer_access_to_gl_enum (CoglBufferAccess access)
|
_cogl_buffer_access_to_gl_enum (CoglBufferAccess access)
|
||||||
{
|
{
|
||||||
@ -115,7 +124,25 @@ _cogl_buffer_access_to_gl_enum (CoglBufferAccess access)
|
|||||||
else
|
else
|
||||||
return GL_READ_ONLY;
|
return GL_READ_ONLY;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* OpenGL ES 1.1 and 2 only know about STATIC_DRAW and DYNAMIC_DRAW */
|
||||||
|
#if defined (COGL_HAS_GLES)
|
||||||
|
GLenum
|
||||||
|
_cogl_buffer_hint_to_gl_enum (CoglBufferHint usage_hint)
|
||||||
|
{
|
||||||
|
switch (usage_hint)
|
||||||
|
{
|
||||||
|
case COGL_BUFFER_HINT_STATIC_DRAW:
|
||||||
|
return GL_STATIC_DRAW;
|
||||||
|
case COGL_BUFFER_HINT_DYNAMIC_DRAW:
|
||||||
|
case COGL_BUFFER_HINT_STREAM_DRAW:
|
||||||
|
return GL_DYNAMIC_DRAW;
|
||||||
|
default:
|
||||||
|
return GL_STATIC_DRAW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
GLenum
|
GLenum
|
||||||
_cogl_buffer_hints_to_gl_enum (CoglBufferUsageHint usage_hint,
|
_cogl_buffer_hints_to_gl_enum (CoglBufferUsageHint usage_hint,
|
||||||
CoglBufferUpdateHint update_hint)
|
CoglBufferUpdateHint update_hint)
|
||||||
@ -150,6 +177,7 @@ _cogl_buffer_hints_to_gl_enum (CoglBufferUsageHint usage_hint,
|
|||||||
|
|
||||||
return GL_STATIC_DRAW;
|
return GL_STATIC_DRAW;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
_cogl_buffer_bind (CoglBuffer *buffer,
|
_cogl_buffer_bind (CoglBuffer *buffer,
|
||||||
|
@ -78,7 +78,9 @@
|
|||||||
|
|
||||||
static void _cogl_pixel_buffer_free (CoglPixelBuffer *buffer);
|
static void _cogl_pixel_buffer_free (CoglPixelBuffer *buffer);
|
||||||
|
|
||||||
|
#if !defined (COGL_HAS_GLES)
|
||||||
static const CoglBufferVtable cogl_pixel_buffer_vtable;
|
static const CoglBufferVtable cogl_pixel_buffer_vtable;
|
||||||
|
#endif
|
||||||
static const CoglBufferVtable cogl_malloc_pixel_buffer_vtable;
|
static const CoglBufferVtable cogl_malloc_pixel_buffer_vtable;
|
||||||
|
|
||||||
/* we don't want to use the stock COGL_HANDLE_DEFINE * for 2 reasons:
|
/* we don't want to use the stock COGL_HANDLE_DEFINE * for 2 reasons:
|
||||||
@ -149,6 +151,8 @@ cogl_pixel_buffer_new_EXP (guint size)
|
|||||||
COGL_BUFFER_USAGE_HINT_DRAW,
|
COGL_BUFFER_USAGE_HINT_DRAW,
|
||||||
COGL_BUFFER_UPDATE_HINT_STATIC);
|
COGL_BUFFER_UPDATE_HINT_STATIC);
|
||||||
|
|
||||||
|
/* malloc version only for GLES */
|
||||||
|
#if !defined (COGL_HAS_GLES)
|
||||||
if (cogl_features_available (COGL_FEATURE_PBOS))
|
if (cogl_features_available (COGL_FEATURE_PBOS))
|
||||||
{
|
{
|
||||||
/* PBOS */
|
/* PBOS */
|
||||||
@ -158,6 +162,7 @@ cogl_pixel_buffer_new_EXP (guint size)
|
|||||||
COGL_BUFFER_SET_FLAG (buffer, BUFFER_OBJECT);
|
COGL_BUFFER_SET_FLAG (buffer, BUFFER_OBJECT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
/* malloc fallback subclass */
|
/* malloc fallback subclass */
|
||||||
buffer->vtable = &cogl_malloc_pixel_buffer_vtable;
|
buffer->vtable = &cogl_malloc_pixel_buffer_vtable;
|
||||||
@ -219,6 +224,7 @@ _cogl_pixel_buffer_free (CoglPixelBuffer *buffer)
|
|||||||
g_slice_free (CoglPixelBuffer, buffer);
|
g_slice_free (CoglPixelBuffer, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined (COGL_HAS_GLES)
|
||||||
static guchar *
|
static guchar *
|
||||||
_cogl_pixel_buffer_map (CoglBuffer *buffer,
|
_cogl_pixel_buffer_map (CoglBuffer *buffer,
|
||||||
CoglBufferAccess access)
|
CoglBufferAccess access)
|
||||||
@ -330,6 +336,7 @@ static const CoglBufferVtable cogl_pixel_buffer_vtable =
|
|||||||
_cogl_pixel_buffer_unmap,
|
_cogl_pixel_buffer_unmap,
|
||||||
_cogl_pixel_buffer_set_data,
|
_cogl_pixel_buffer_set_data,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fallback path, buffer->data points to a malloc'ed buffer.
|
* Fallback path, buffer->data points to a malloc'ed buffer.
|
||||||
|
@ -465,7 +465,6 @@ cogl_texture_new_from_buffer_EXP (CoglHandle buffer,
|
|||||||
const guint offset)
|
const guint offset)
|
||||||
{
|
{
|
||||||
CoglHandle texture;
|
CoglHandle texture;
|
||||||
CoglBitmap bitmap;
|
|
||||||
CoglBuffer *cogl_buffer;
|
CoglBuffer *cogl_buffer;
|
||||||
CoglPixelBuffer *pixel_buffer;
|
CoglPixelBuffer *pixel_buffer;
|
||||||
|
|
||||||
@ -496,8 +495,11 @@ cogl_texture_new_from_buffer_EXP (CoglHandle buffer,
|
|||||||
return COGL_INVALID_HANDLE;
|
return COGL_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined (COGL_HAS_GLES)
|
||||||
if (cogl_features_available (COGL_FEATURE_PBOS))
|
if (cogl_features_available (COGL_FEATURE_PBOS))
|
||||||
{
|
{
|
||||||
|
CoglBitmap bitmap;
|
||||||
|
|
||||||
/* Wrap the data into a bitmap */
|
/* Wrap the data into a bitmap */
|
||||||
bitmap.width = width;
|
bitmap.width = width;
|
||||||
bitmap.height = height;
|
bitmap.height = height;
|
||||||
@ -510,6 +512,7 @@ cogl_texture_new_from_buffer_EXP (CoglHandle buffer,
|
|||||||
_cogl_buffer_bind (NULL, GL_PIXEL_UNPACK_BUFFER);
|
_cogl_buffer_bind (NULL, GL_PIXEL_UNPACK_BUFFER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
texture = cogl_texture_new_from_data (width,
|
texture = cogl_texture_new_from_data (width,
|
||||||
height,
|
height,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user