summaryrefslogtreecommitdiff
path: root/src/mesa/main/extensions.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2010-04-22 11:41:41 -0400
committerKristian Høgsberg <krh@bitplanet.net>2010-04-22 12:42:23 -0400
commitade150d66724259119012420068fa930807311c2 (patch)
treeb74d89dfa00a924b85b3f2b33b13a18509fef435 /src/mesa/main/extensions.c
parent18f7e118a5c6dfc04502e6e91ae492bfa33d3cc9 (diff)
mesa: Compute extension string according to API
We can now stop special casing glGetString() and drop specials_es*.c.
Diffstat (limited to 'src/mesa/main/extensions.c')
-rw-r--r--src/mesa/main/extensions.c126
1 files changed, 111 insertions, 15 deletions
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 30a51abbe7..4c8d4ccfa2 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -727,9 +727,9 @@ compute_extensions( GLcontext *ctx )
}
static size_t
-append_extension(char **str, const char *ext)
+append_extension(GLubyte **str, const char *ext)
{
- char *s = *str;
+ GLubyte *s = *str;
size_t len = strlen(ext);
if (s) {
@@ -748,7 +748,104 @@ append_extension(char **str, const char *ext)
static size_t
-make_extension_string_es2(const GLcontext *ctx, char *str)
+make_extension_string_es1(const GLcontext *ctx, GLubyte *str)
+{
+ size_t len = 0;
+
+ /* Core additions */
+ len += append_extension(&str, "GL_OES_byte_coordinates");
+ len += append_extension(&str, "GL_OES_fixed_point");
+ len += append_extension(&str, "GL_OES_single_precision");
+ len += append_extension(&str, "GL_OES_matrix_get");
+
+ /* 1.1 required extensions */
+ len += append_extension(&str, "GL_OES_read_format");
+ len += append_extension(&str, "GL_OES_compressed_paletted_texture");
+ len += append_extension(&str, "GL_OES_point_size_array");
+ len += append_extension(&str, "GL_OES_point_sprite");
+
+ /* 1.1 deprecated extensions */
+ len += append_extension(&str, "GL_OES_query_matrix");
+
+#if FEATURE_OES_draw_texture
+ if (ctx->Extensions.OES_draw_texture)
+ len += append_extension(&str, "GL_OES_draw_texture");
+#endif
+
+ if (ctx->Extensions.EXT_blend_equation_separate)
+ len += append_extension(&str, "GL_OES_blend_equation_separate");
+ if (ctx->Extensions.EXT_blend_func_separate)
+ len += append_extension(&str, "GL_OES_blend_func_separate");
+ if (ctx->Extensions.EXT_blend_subtract)
+ len += append_extension(&str, "GL_OES_blend_subtract");
+
+ if (ctx->Extensions.EXT_stencil_wrap)
+ len += append_extension(&str, "GL_OES_stencil_wrap");
+
+ if (ctx->Extensions.ARB_texture_cube_map)
+ len += append_extension(&str, "GL_OES_texture_cube_map");
+ if (ctx->Extensions.ARB_texture_env_crossbar)
+ len += append_extension(&str, "GL_OES_texture_env_crossbar");
+ if (ctx->Extensions.ARB_texture_mirrored_repeat)
+ len += append_extension(&str, "GL_OES_texture_mirrored_repeat");
+
+ if (ctx->Extensions.ARB_framebuffer_object) {
+ len += append_extension(&str, "GL_OES_framebuffer_object");
+ len += append_extension(&str, "GL_OES_depth24");
+ len += append_extension(&str, "GL_OES_depth32");
+ len += append_extension(&str, "GL_OES_fbo_render_mipmap");
+ len += append_extension(&str, "GL_OES_rgb8_rgba8");
+ len += append_extension(&str, "GL_OES_stencil1");
+ len += append_extension(&str, "GL_OES_stencil4");
+ len += append_extension(&str, "GL_OES_stencil8");
+ }
+
+ if (ctx->Extensions.EXT_vertex_array)
+ len += append_extension(&str, "GL_OES_element_index_uint");
+ if (ctx->Extensions.ARB_vertex_buffer_object)
+ len += append_extension(&str, "GL_OES_mapbuffer");
+ if (ctx->Extensions.EXT_texture_filter_anisotropic)
+ len += append_extension(&str, "GL_EXT_texture_filter_anisotropic");
+
+ /* some applications check this for NPOT support */
+ if (ctx->Extensions.ARB_texture_non_power_of_two)
+ len += append_extension(&str, "GL_ARB_texture_non_power_of_two");
+
+ if (ctx->Extensions.EXT_texture_compression_s3tc)
+ len += append_extension(&str, "GL_EXT_texture_compression_dxt1");
+ if (ctx->Extensions.EXT_texture_lod_bias)
+ len += append_extension(&str, "GL_EXT_texture_lod_bias");
+ if (ctx->Extensions.EXT_blend_minmax)
+ len += append_extension(&str, "GL_EXT_blend_minmax");
+ if (ctx->Extensions.EXT_multi_draw_arrays)
+ len += append_extension(&str, "GL_EXT_multi_draw_arrays");
+
+#if FEATURE_OES_EGL_image
+ if (ctx->Extensions.OES_EGL_image)
+ len += append_extension(&str, "GL_OES_EGL_image");
+#endif
+
+ return len;
+}
+
+
+static GLubyte *
+compute_extensions_es1(const GLcontext *ctx)
+{
+ GLubyte *s;
+ unsigned int len;
+
+ len = make_extension_string_es1(ctx, NULL);
+ s = malloc(len + 1);
+ if (!s)
+ return NULL;
+ make_extension_string_es1(ctx, s);
+
+ return s;
+}
+
+static size_t
+make_extension_string_es2(const GLcontext *ctx, GLubyte *str)
{
size_t len = 0;
@@ -801,21 +898,19 @@ make_extension_string_es2(const GLcontext *ctx, char *str)
static GLubyte *
compute_extensions_es2(GLcontext *ctx)
{
- if (!ctx->Extensions.String) {
- char *s;
- unsigned int len;
-
- len = make_extension_string_es2(ctx, NULL);
- s = (char *) malloc(len + 1);
- if (!s)
- return NULL;
- make_extension_string_es2(ctx, s);
- ctx->Extensions.String = (const GLubyte *) s;
- }
+ GLubyte *s;
+ unsigned int len;
- return ctx->Extensions.String;
+ len = make_extension_string_es2(ctx, NULL);
+ s = malloc(len + 1);
+ if (!s)
+ return NULL;
+ make_extension_string_es2(ctx, s);
+
+ return s;
}
+
GLubyte *
_mesa_make_extension_string(GLcontext *ctx)
{
@@ -825,6 +920,7 @@ _mesa_make_extension_string(GLcontext *ctx)
case API_OPENGLES2:
return compute_extensions_es2(ctx);
case API_OPENGLES:
+ return compute_extensions_es1(ctx);
default:
assert(0);
return NULL;