diff --git a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c index d7231d3ca..cbccdcaac 100644 --- a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c +++ b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c @@ -47,26 +47,21 @@ static gboolean _cogl_driver_gl_real_context_init (CoglContext *context) { + GLuint vertex_array; _cogl_driver_gl_context_init (context); - if ((context->driver == COGL_DRIVER_GL3)) - { - GLuint vertex_array; - - /* In a forward compatible context, GL 3 doesn't support rendering - * using the default vertex array object. Cogl doesn't use vertex - * array objects yet so for now we just create a dummy array - * object that we will use as our own default object. Eventually - * it could be good to attach the vertex array objects to - * CoglPrimitives */ - context->glGenVertexArrays (1, &vertex_array); - context->glBindVertexArray (vertex_array); - } + /* In a forward compatible context, GL 3 doesn't support rendering + * using the default vertex array object. Cogl doesn't use vertex + * array objects yet so for now we just create a dummy array + * object that we will use as our own default object. Eventually + * it could be good to attach the vertex array objects to + * CoglPrimitives */ + context->glGenVertexArrays (1, &vertex_array); + context->glBindVertexArray (vertex_array); /* There's no enable for this in GLES2, it's always on */ - if (context->driver == COGL_DRIVER_GL3) - GE (context, glEnable (GL_PROGRAM_POINT_SIZE) ); + GE (context, glEnable (GL_PROGRAM_POINT_SIZE) ); return TRUE; } @@ -89,20 +84,11 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context, switch (format) { case COGL_PIXEL_FORMAT_A_8: - /* If the driver doesn't natively support alpha textures then we + /* The driver doesn't natively support alpha textures so we * will use a red component texture with a swizzle to implement * the texture */ - if (_cogl_has_private_feature - (context, COGL_PRIVATE_FEATURE_ALPHA_TEXTURES) == 0) - { - glintformat = GL_RED; - glformat = GL_RED; - } - else - { - glintformat = GL_ALPHA; - glformat = GL_ALPHA; - } + glintformat = GL_RED; + glformat = GL_RED; gltype = GL_UNSIGNED_BYTE; break; case COGL_PIXEL_FORMAT_G_8: @@ -112,22 +98,8 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context, break; case COGL_PIXEL_FORMAT_RG_88: - if (cogl_has_feature (context, COGL_FEATURE_ID_TEXTURE_RG)) - { - glintformat = GL_RG; - glformat = GL_RG; - } - else - { - /* If red-green textures aren't supported then we'll use RGB - * as an internal format. Note this should only end up - * mattering for downloading the data because Cogl will - * refuse to allocate a texture with RG components if RG - * textures aren't supported */ - glintformat = GL_RGB; - glformat = GL_RGB; - required_format = COGL_PIXEL_FORMAT_RGB_888; - } + glintformat = GL_RG; + glformat = GL_RG; gltype = GL_UNSIGNED_BYTE; break; @@ -389,13 +361,12 @@ check_gl_version (CoglContext *ctx, return FALSE; } - /* We require GLSL 1.20, which is implied by OpenGL 2.1. */ - if (!COGL_CHECK_GL_VERSION (major, minor, 2, 1)) + if (!COGL_CHECK_GL_VERSION (major, minor, 3, 1)) { g_set_error (error, COGL_DRIVER_ERROR, COGL_DRIVER_ERROR_INVALID_VERSION, - "OpenGL 2.1 or better is required"); + "OpenGL 3.1 or better is required"); return FALSE; } @@ -475,21 +446,11 @@ _cogl_driver_update_features (CoglContext *ctx, COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_MESA_PACK_INVERT, TRUE); - if (!ctx->glGenRenderbuffers) - { - g_set_error (error, - COGL_DRIVER_ERROR, - COGL_DRIVER_ERROR_NO_SUITABLE_DRIVER_FOUND, - "Framebuffer objects are required to use the GL driver"); - return FALSE; - } COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS, TRUE); - if (ctx->glBlitFramebuffer) - COGL_FLAGS_SET (ctx->features, - COGL_FEATURE_ID_BLIT_FRAMEBUFFER, TRUE); + COGL_FLAGS_SET (ctx->features, COGL_FEATURE_ID_BLIT_FRAMEBUFFER, TRUE); COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_PBOS, TRUE); @@ -500,9 +461,8 @@ _cogl_driver_update_features (CoglContext *ctx, COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE, TRUE); - if (_cogl_check_extension ("GL_EXT_packed_depth_stencil", gl_extensions)) - COGL_FLAGS_SET (private_features, - COGL_PRIVATE_FEATURE_EXT_PACKED_DEPTH_STENCIL, TRUE); + COGL_FLAGS_SET (private_features, + COGL_PRIVATE_FEATURE_EXT_PACKED_DEPTH_STENCIL, TRUE); if (ctx->glGenSamplers) COGL_FLAGS_SET (private_features, @@ -524,29 +484,19 @@ _cogl_driver_update_features (CoglContext *ctx, COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_TEXTURE_MAX_LEVEL, TRUE); - if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 3, 1) || - _cogl_check_extension ("GL_EXT_texture_lod_bias", gl_extensions)) - { - COGL_FLAGS_SET (private_features, - COGL_PRIVATE_FEATURE_TEXTURE_LOD_BIAS, TRUE); - } + COGL_FLAGS_SET (private_features, + COGL_PRIVATE_FEATURE_TEXTURE_LOD_BIAS, TRUE); if (ctx->glFenceSync) COGL_FLAGS_SET (ctx->features, COGL_FEATURE_ID_FENCE, TRUE); - if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 3, 0) || - _cogl_check_extension ("GL_ARB_texture_rg", gl_extensions)) - COGL_FLAGS_SET (ctx->features, - COGL_FEATURE_ID_TEXTURE_RG, - TRUE); + COGL_FLAGS_SET (ctx->features, COGL_FEATURE_ID_TEXTURE_RG, TRUE); COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102, TRUE); - if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 3, 0)) - COGL_FLAGS_SET (private_features, - COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT, - TRUE); + COGL_FLAGS_SET (private_features, + COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT, TRUE); if (ctx->glGenQueries && ctx->glQueryCounter && ctx->glGetInteger64v) COGL_FLAGS_SET (ctx->features, COGL_FEATURE_ID_TIMESTAMP_QUERY, TRUE); diff --git a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c index 2b924abc2..e2b92892e 100644 --- a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c +++ b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c @@ -76,11 +76,7 @@ _cogl_texture_driver_gen (CoglContext *ctx, * level to 0 so OpenGL will consider the texture storage to be * "complete". */ -#ifdef HAVE_COGL_GL - if (_cogl_has_private_feature - (ctx, COGL_PRIVATE_FEATURE_TEXTURE_MAX_LEVEL)) - GE( ctx, glTexParameteri (gl_target, GL_TEXTURE_MAX_LEVEL, 0)); -#endif + GE( ctx, glTexParameteri (gl_target, GL_TEXTURE_MAX_LEVEL, 0)); /* GL_TEXTURE_MAG_FILTER defaults to GL_LINEAR, no need to set it */ GE( ctx, glTexParameteri (gl_target, @@ -97,10 +93,9 @@ _cogl_texture_driver_gen (CoglContext *ctx, g_assert_not_reached(); } - /* If the driver doesn't support alpha textures directly then we'll + /* As the driver doesn't support alpha textures directly then we'll * fake them by setting the swizzle parameters */ if (internal_format == COGL_PIXEL_FORMAT_A_8 && - !_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_ALPHA_TEXTURES) && _cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_TEXTURE_SWIZZLE)) { static const GLint red_swizzle[] = { GL_ZERO, GL_ZERO, GL_ZERO, GL_RED }; @@ -377,10 +372,8 @@ _cogl_texture_driver_size_supported (CoglContext *ctx, if (gl_target == GL_TEXTURE_2D) proxy_target = GL_PROXY_TEXTURE_2D; -#ifdef HAVE_COGL_GL else if (gl_target == GL_TEXTURE_RECTANGLE_ARB) proxy_target = GL_PROXY_TEXTURE_RECTANGLE_ARB; -#endif else /* Unknown target, assume it's not supported */ return FALSE; @@ -434,7 +427,6 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx, case COGL_PIXEL_FORMAT_RGBA_4444_PRE: case COGL_PIXEL_FORMAT_RGBA_5551: case COGL_PIXEL_FORMAT_RGBA_5551_PRE: - return TRUE; case COGL_PIXEL_FORMAT_BGRX_FP_16161616: case COGL_PIXEL_FORMAT_BGRA_FP_16161616: case COGL_PIXEL_FORMAT_XRGB_FP_16161616: @@ -447,11 +439,7 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx, case COGL_PIXEL_FORMAT_RGBX_FP_16161616: case COGL_PIXEL_FORMAT_RGBA_FP_16161616: case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE: - if (_cogl_has_private_feature - (ctx, COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT)) - return TRUE; - else - return FALSE; + return TRUE; case COGL_PIXEL_FORMAT_G_16: case COGL_PIXEL_FORMAT_RG_1616: case COGL_PIXEL_FORMAT_DEPTH_16: