diff --git a/clutter/cogl/cogl/cogl-debug-options.h b/clutter/cogl/cogl/cogl-debug-options.h index a73d7e1f6..1c0bd5bee 100644 --- a/clutter/cogl/cogl/cogl-debug-options.h +++ b/clutter/cogl/cogl/cogl-debug-options.h @@ -127,6 +127,12 @@ OPT (DISABLE_BLENDING, "disable-blending", "Disable blending", "Disable use of blending") +OPT (DISABLE_NPOT_TEXTURES, + "Root Cause", + "disable-npot-textures", + "Disable non-power-of-two textures", + "Makes Cogl think that the GL driver doesn't support NPOT textures " + "so that it will create sliced textures or textures with waste instead.") OPT (SHOW_SOURCE, "Cogl Tracing", "show-source", diff --git a/clutter/cogl/cogl/cogl-debug.c b/clutter/cogl/cogl/cogl-debug.c index 99049a6ee..94c276a91 100644 --- a/clutter/cogl/cogl/cogl-debug.c +++ b/clutter/cogl/cogl/cogl-debug.c @@ -69,7 +69,8 @@ static const GDebugKey cogl_behavioural_debug_keys[] = { { "disable-texturing", COGL_DEBUG_DISABLE_TEXTURING}, { "disable-arbfp", COGL_DEBUG_DISABLE_ARBFP}, { "disable-glsl", COGL_DEBUG_DISABLE_GLSL}, - { "disable-blending", COGL_DEBUG_DISABLE_BLENDING} + { "disable-blending", COGL_DEBUG_DISABLE_BLENDING}, + { "disable-npot-textures", COGL_DEBUG_DISABLE_NPOT_TEXTURES} }; static const int n_cogl_behavioural_debug_keys = G_N_ELEMENTS (cogl_behavioural_debug_keys); diff --git a/clutter/cogl/cogl/cogl-debug.h b/clutter/cogl/cogl/cogl-debug.h index e9029afb2..9a390b4a8 100644 --- a/clutter/cogl/cogl/cogl-debug.h +++ b/clutter/cogl/cogl/cogl-debug.h @@ -55,7 +55,8 @@ typedef enum { COGL_DEBUG_SHOW_SOURCE = 1 << 22, COGL_DEBUG_DISABLE_BLENDING = 1 << 23, COGL_DEBUG_TEXTURE_PIXMAP = 1 << 24, - COGL_DEBUG_BITMAP = 1 << 25 + COGL_DEBUG_BITMAP = 1 << 25, + COGL_DEBUG_DISABLE_NPOT_TEXTURES = 1 << 26 } CoglDebugFlags; #ifdef COGL_ENABLE_DEBUG diff --git a/clutter/cogl/cogl/cogl.c b/clutter/cogl/cogl/cogl.c index 9f35468a7..e21b088b0 100644 --- a/clutter/cogl/cogl/cogl.c +++ b/clutter/cogl/cogl/cogl.c @@ -444,6 +444,12 @@ cogl_get_features (void) if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_DISABLE_GLSL)) ctx->feature_flags &= ~COGL_FEATURE_SHADERS_GLSL; + if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_DISABLE_NPOT_TEXTURES)) + ctx->feature_flags &= ~(COGL_FEATURE_TEXTURE_NPOT | + COGL_FEATURE_TEXTURE_NPOT_BASIC | + COGL_FEATURE_TEXTURE_NPOT_MIPMAP | + COGL_FEATURE_TEXTURE_NPOT_REPEAT); + return ctx->feature_flags; } diff --git a/configure.ac b/configure.ac index e3470799f..ebd93a927 100644 --- a/configure.ac +++ b/configure.ac @@ -165,10 +165,6 @@ AC_ARG_WITH([gles], # backend specific pkg-config files BACKEND_PC_FILES="" -# This is only used to decide whether to build tests/tools/disable-npots.la -AC_CHECK_LIB(dl, [dlopen], [HAVE_LIBDL=yes], [HAVE_LIBDL=no]) -AM_CONDITIONAL(HAVE_LIBDL, [test "x$HAVE_LIBDL" = "xyes"]) - dnl === Clutter windowing system backend ====================================== AS_CASE([$CLUTTER_FLAVOUR], @@ -1110,7 +1106,6 @@ AC_CONFIG_FILES([ tests/interactive/Makefile tests/interactive/wrapper.sh tests/micro-bench/Makefile - tests/tools/Makefile doc/Makefile doc/reference/Makefile diff --git a/tests/Makefile.am b/tests/Makefile.am index 7e7728461..03df5c7d7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,10 +1,10 @@ -SUBDIRS = accessibility data interactive micro-bench tools +SUBDIRS = accessibility data interactive micro-bench if BUILD_TESTS SUBDIRS += conform endif -DIST_SUBDIRS = accessibility data conform interactive micro-bench tools +DIST_SUBDIRS = accessibility data conform interactive micro-bench EXTRA_DIST = README diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am index 229fa864b..c769b8daf 100644 --- a/tests/conform/Makefile.am +++ b/tests/conform/Makefile.am @@ -215,7 +215,7 @@ test-report perf-report full-report: ${TEST_PROGS} # two textures test-report-npot perf-report-npot full-report-npot: ${TEST_PROGS} @test -z "${TEST_PROGS}" || { \ - $(top_srcdir)/tests/tools/disable-npots.sh ; \ + export COGL_DEBUG="$COGL_DEBUG,disable-npot-textures"; \ export GTESTER_LOGDIR=`mktemp -d "$(srcdir)/.testlogs-XXXXXX"` ; \ if test -d "$(top_srcdir)/.git"; then \ export REVISION="`git describe`" ; \ diff --git a/tests/tools/Makefile.am b/tests/tools/Makefile.am deleted file mode 100644 index 658ee679f..000000000 --- a/tests/tools/Makefile.am +++ /dev/null @@ -1,43 +0,0 @@ -include $(top_srcdir)/build/autotools/Makefile.am.silent - -noinst_LTLIBRARIES = - -build_shared_libs = - -if HAVE_LIBDL - -noinst_LTLIBRARIES += libdisable-npots-static.la - -build_shared_libs += libdisable-npots.la - -endif - -libdisable_npots_static_la_SOURCES = disable-npots.c - -libdisable_npots_static_la_LIBADD = -ldl - -INCLUDES = \ - -I$(top_srcdir)/clutter \ - -I$(top_srcdir)/clutter/cogl \ - -I$(top_builddir)/clutter \ - -I$(top_builddir)/clutter/cogl \ - $(CLUTTER_CFLAGS) \ - -D_GNU_SOURCE - -all-local : disable-npots.sh $(build_shared_libs) - -clean-local : - $(QUIET_RM)rm -f disable-npots.sh libdisable-npots.la - -disable-npots.sh : $(top_builddir)/tests/tools/disable-npots.sh.in - $(QUIET_GEN) \ - sed 's|--builddir--|'`cd '$(top_builddir)' && pwd`'|' < $< > $@ \ - && chmod 755 disable-npots.sh - -# Also put the static library into a shared library. We need to do -# this without the automake magic because we don't want it to get -# installed -libdisable-npots.la : libdisable-npots-static.la - $(LINK) -ldl -rpath /nowhere libdisable-npots-static.la - -EXTRA_DIST = README disable-npots.sh.in diff --git a/tests/tools/README b/tests/tools/README deleted file mode 100644 index 455a8cdea..000000000 --- a/tests/tools/README +++ /dev/null @@ -1,2 +0,0 @@ -This is a place holder for tools such as gltrace like libraries - diff --git a/tests/tools/disable-npots.c b/tests/tools/disable-npots.c deleted file mode 100644 index beef08d18..000000000 --- a/tests/tools/disable-npots.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * This file can be build as a shared library and then used as an - * LD_PRELOAD to fake a system where NPOTs is not supported. It simply - * overrides glGetString and removes the extension strings. - */ - -/* This is just included to get the right GL header */ -#include - -#include -#include -#include -#include -#include -#include - -/* If RTLD_NEXT isn't available then try just using NULL */ -#ifdef RTLD_NEXT -#define LIB_HANDLE RTLD_NEXT -#else -#define LIB_HANDLE NULL -#endif - -typedef const GLubyte * (* GetStringFunc) (GLenum name); - -static const char * const bad_strings[] -= { "GL_ARB_texture_non_power_of_two", - "GL_ARB_texture_rectangle", - "GL_EXT_texture_rectangle", - NULL }; - -static gboolean -get_gl_version (const gchar *version_string, - int *major_out, int *minor_out) -{ - const char *major_end, *minor_end; - int major = 0, minor = 0; - - if (version_string == NULL) - return FALSE; - - /* Extract the major number */ - for (major_end = version_string; *major_end >= '0' - && *major_end <= '9'; major_end++) - major = (major * 10) + *major_end - '0'; - /* If there were no digits or the major number isn't followed by a - dot then it is invalid */ - if (major_end == version_string || *major_end != '.') - return FALSE; - - /* Extract the minor number */ - for (minor_end = major_end + 1; *minor_end >= '0' - && *minor_end <= '9'; minor_end++) - minor = (minor * 10) + *minor_end - '0'; - /* If there were no digits or there is an unexpected character then - it is invalid */ - if (minor_end == major_end + 1 - || (*minor_end && *minor_end != ' ' && *minor_end != '.')) - return FALSE; - - *major_out = major; - *minor_out = minor; - - return TRUE; -} - -const GLubyte * -glGetString (GLenum name) -{ - const gchar *ret = NULL; - static GetStringFunc func = NULL; - static gchar *extensions = NULL; - static gchar *version = NULL; - - if (func == NULL - && (func = (GetStringFunc) dlsym (LIB_HANDLE, "glGetString")) == NULL) - fprintf (stderr, "dlsym: %s\n", dlerror ()); - else if (func == glGetString) - fprintf (stderr, "dlsym returned the wrapper of glGetString\n"); - else - { - ret = (const gchar *) (* func) (name); - - if (name == GL_EXTENSIONS) - { - if (extensions == NULL) - { - if ((extensions = strdup ((char *) ret)) == NULL) - fprintf (stderr, "strdup: %s\n", strerror (errno)); - else - { - gchar *dst = extensions, *src = extensions; - - while (1) - { - const char * const *str = bad_strings; - gchar *end; - - while (isspace (*src)) - *(dst++) = *(src++); - - if (*src == 0) - break; - - for (end = src + 1; *end && !isspace (*end); end++); - - while (*str && strncmp ((char *) src, *str, end - src)) - str++; - - if (*str == NULL) - { - memcpy (dst, src, end - src); - dst += end - src; - } - - src = end; - } - - *dst = '\0'; - } - } - - ret = extensions; - } - else if (name == GL_VERSION) - { - int gl_major, gl_minor; - - /* If the GL version is >= 2.0 then Cogl will assume it - supports NPOT textures anyway so we need to tweak it */ - if (get_gl_version ((const gchar *) ret, - &gl_major, &gl_minor) && gl_major >= 2) - { - if (version == NULL) - { - const gchar *tail = strchr (ret, ' '); - if (tail) - { - version = malloc (3 + strlen (tail) + 1); - if (version) - { - strcpy (version + 3, tail); - memcpy (version, "1.9", 3); - } - } - else - version = strdup ("1.9"); - } - - ret = version; - } - } - } - - return (const GLubyte *) ret; -} diff --git a/tests/tools/disable-npots.sh.in b/tests/tools/disable-npots.sh.in deleted file mode 100644 index cde4912f0..000000000 --- a/tests/tools/disable-npots.sh.in +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -# This script sets up the LD_PRELOAD environment to use -# libdisable-npots.la - -# Read the .la file so we can get the library name -. "--builddir--/tests/tools/libdisable-npots.la" - -if test -n "$LD_PRELOAD"; then - LD_PRELOAD="${LD_PRELOAD}:"; -fi - -export LD_PRELOAD="${LD_PRELOAD}--builddir--/tests/tools/.libs/${dlname}" - -exec "$@"