Hello,

First, many thanks for your kind support and for the quality of your library, which is quite impressive.

I tested the 1.4 version from SVN (revision 8614) on Ubuntu Karmic Koala with gcc version 4.4.1, arch is x86_64 (Core i7), having just run .../configure --prefix=YYY with an environment set so that the appropriate sdl-config is found.

There were only two small related issues:
- gui/window.c:92: error: 'NC_Result' undeclared, defined in .../net/client.h, I guess we accept gui to depend on net only if NETWORK is set? - gui/window.c:126: error: 'AG_Window' has no member named 'nc': with my setup, no NETWORK symbol was defined, so I guess AG_WindowNewRemote should mostly return an error and #define-out the actual function body

See the corresponding attached patch that fixes both.

A check for gettext tools should be added, as otherwise, if they are not installed, we have:

"""
xgettext --default-domain=agar --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=POTFILES --no-location --from-code=UTF-8 -o agar.pot
/bin/sh: xgettext: not found
xgettext returned non-zero status
msgfmt -o fr.mo fr.po
/bin/sh: msgfmt: not found
make[1]: *** [fr.mo] Erreur 127
make[1]: quittant le répertoire « XXX/Agar-svn/agar14/po »
"""

'apt-get install gettext' solved that issue for me, but afterwards an error was triggered:

"""
==> po
make[1]: entrant dans le répertoire « XXX/Agar-svn/agar14/po »
(cd .. && find . -name \*.c > POTFILES)
xgettext --default-domain=agar --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=POTFILES --no-location --from-code=UTF-8 -o agar.pot
[: 13: !=: unexpected operator
make[1]: quittant le répertoire « XXX/Agar-svn/agar14/po »
"""

Error presumably in mk/build.po.mk, I did not investigate and just disabled the build of po. Afterwards 'make' and 'make install' ran fine.

In the demos directory, it would be more convenient that, if a sub-configure fails, the overall configure make target stops, ex: if Agar is not found, all configures fail in a row. In that case, telling the user that agar-config is expected to be in the PATH would help.

In the generated configure script, if more than one version of Agar happens to be in the PATH (ex: 1.3.4/1.4), the latest one will be selected, so at first I was using the 1.4 test cases against a 1.3.4 library; probably the 'for' loop should be replaced by a 'while' one in the configure script, to stop on first, not on the last, agar-config found (presumably the expected one), in:

"""
for path in `echo $PATH | sed 's/:/ /g'`; do
if [ -x "${path}/agar-config" ]; then
AGAR_VERSION=`${path}/agar-config --version`
fi
done
"""

All tests could then be successfully configured and built.

I do not think it is a big issue, but test cases are not linked with rpath to the library they test (please see no reason to use the awful libtool), so when I executed them, they happened to be initially dynamically linked to the 1.3.4 library, due to LD_LIBRARY_PATH. However at least in my case it could be detected: "./fixedres: Symbol `agColors' has different size in shared object, consider re-linking".

After having updated accordingly LD_LIBRARY_PATH, now the execution of tests, in SDL mode:

- fixedres: worked fine, although we do not know really what to expect (maybe a text label could tell it to the user?)

- objsystem: can be reproducibly crashed when defining an animal and moving around the Untitled window (could not make it crash without defining an animal):
Starting program: YYY/Agar-svn/agar14/demos/objsystem/objsystem
[Thread debugging using libthread_db enabled]

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff79110e4 in AG_GetPixel ()
from XXX/agar-1.4/lib/libag_gui.so.1
(gdb) where
#0 0x00007ffff79110e4 in AG_GetPixel ()
from XXX/agar-1.4/lib/libag_gui.so.1
#1 0x00007ffff7913e55 in AG_BlendPixelRGBA ()
from XXX/agar-1.4/lib/libag_gui.so.1
#2 0x00007ffff793bf5f in RectBlendedFB ()
from XXX/agar-1.4/lib/libag_gui.so.1
#3 0x00007ffff792210a in TreeSubnodeIndicator ()
from XXX/agar-1.4/lib/libag_gui.so.1
#4 0x00007ffff7941cc4 in Draw () from XXX/agar-1.4/lib/libag_gui.so.1
#5 0x00007ffff7919447 in AG_WidgetDraw ()
from XXX/agar-1.4/lib/libag_gui.so.1
#6 0x00007ffff7919497 in AG_WidgetDraw ()
from XXX/agar-1.4/lib/libag_gui.so.1
#7 0x00007ffff7919497 in AG_WidgetDraw ()
from XXX/agar-1.4/lib/libag_gui.so.1
#8 0x00007ffff7919497 in AG_WidgetDraw ()
from XXX/agar-1.4/lib/libag_gui.so.1
#9 0x00007ffff7914cbc in AG_EventLoop_FixedFPS ()
from XXX/agar-1.4/lib/libag_gui.so.1
#10 0x00000000004014c0 in main ()
(can be crashed with the -g flag as well, but I guess it is ignored)

- focusing: seems to work great

- loader: seems to work great, but tells me it cannot find SDL_image library whereas I have one in my LD_LIBRARY_PATH (XXX/SDL_image-1.2.10/lib). This is probably due to configure not detecting it ("checking for SDL_image (http://libsdl.org/projects/SDL_image)...no"), short of finding the SDL_image header:
"""
checking for SDL_image (http://libsdl.org/projects/SDL_image).../usr/bin/cc -Wall -Werror -I/home/wondersye/Projects/LOAN I-0.6/LOANI-installations/SDL-1.2.14/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -o ./conftest conftest.c -lSDL_image
conftest.c:5:23: error: SDL_image.h: Aucun fichier ou dossier de ce type
cc1: warnings being treated as errors
conftest.c: In function ‘main’:
conftest.c:11: error: implicit declaration of function ‘IMG_Load’
conftest.c:11: error: assignment makes pointer from integer without a cast
"""
However I cannot see how to tell configure to use a prefixed SDL_image install? It is a bit of a problem for me, adding a --with-sdl-image option or alike to the configure would help a lot

- table: seems to work great, unless we close the three windows, then:
"""
> ./table
*** glibc detected *** ./table: double free or corruption (!prev): 0x000000000085d5b0 ***
======= Backtrace: =========
/lib/libc.so.6[0x7f0bda7aedd6]
/lib/libc.so.6(cfree+0x6c)[0x7f0bda7b374c]
XXX/SDL-1.2.14/lib/libSDL-1.2.so.0(SDL_FreeSurface+0xdd)[0x7f0bdb6a612d]
XXX/agar-1.4/lib/libag_gui.so.1(AG_WidgetReplaceSurface+0x92)[0x7f0bdbb5752c]
XXX/agar-1.4/lib/libag_gui.so.1(AG_TableFreeCell+0x3b)[0x7f0bdbbb82ba]
XXX/agar-1.4/lib/libag_gui.so.1[0x7f0bdbbbb8ec]
XXX/agar-1.4/lib/libag_core.so.1(AG_ObjectDestroy+0xad)[0x7f0bdb91aaf2]
XXX/agar-1.4/lib/libag_core.so.1(AG_ObjectFreeChildren+0x56)[0x7f0bdb91a528]
XXX/agar-1.4/lib/libag_core.so.1(AG_ObjectDestroy+0x31)[0x7f0bdb91aa76]
XXX/agar-1.4/lib/libag_gui.so.1[0x7f0bdbb5321d]
XXX/agar-1.4/lib/libag_gui.so.1(AG_ProcessEvent+0x303)[0x7f0bdbb551e7]
XXX/agar-1.4/lib/libag_gui.so.1(AG_EventLoop_FixedFPS+0x270)[0x7f0bdbb54e4f]
.../table[0x40167d]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f0bda757abd]
.../table[0x400ed9]
"""

- textbox: seems to work great; maybe I misunderstood the meaning of the buttons to force integer/float entries, but even if they are hit, I can still enter letters in the textbox; in a prior testing of the 1.3.x, I recall that the CPU consumption of this test was quite high compared to the others, I cannot tell whether it is still the case ('top' remains rather quiet, but this computer is a bit too powerful to determine whether load is unexpectedly high)

- widgets: works great, still as impressive as before; tells me I am using Agar 1.3.2 (Landscapes Turn To Ash) but luckily it does not seem true:
"""
> ldd ./widgets
linux-vdso.so.1 => (0x00007fff70f02000)
libag_dev.so.1 => XXX/agar-1.4/lib/libag_dev.so.1 (0x00007f0d355de000)
libag_gui.so.1 => XXX/agar-1.4/lib/libag_gui.so.1 (0x00007f0d35305000)
libag_core.so.1 => XXX/agar-1.4/lib/libag_core.so.1 (0x00007f0d350de000)
libSDL-1.2.so.0 => XXX/SDL-1.2.14/lib/libSDL-1.2.so.0 (0x00007f0d34e4a000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f0d34c2e000)
libfreetype.so.6 => XXX/freetype-2.3.11/lib/libfreetype.so.6 (0x00007f0d349a3000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f0d34722000)
libm.so.6 => /lib/libm.so.6 (0x00007f0d3449e000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x00007f0d34279000)
libc.so.6 => /lib/libc.so.6 (0x00007f0d33f0a000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f0d33cf3000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f0d33aef000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0d357f0000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f0d337b9000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f0d335a7000)
libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0x00007f0d333a1000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00007f0d3319f000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f0d32f99000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x00007f0d32d8e000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f0d32b72000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f0d3296f000)
librt.so.1 => /lib/librt.so.1 (0x00007f0d32767000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f0d32562000)
"""
(SDL vs OpenGL status apparently correctly detected)

- maximized: works great

- objprops: works great; but no new object can be created apparently

- unitconv: works great

- sockets: works great, but there is one horizontal line just on top of the socket area that is not refreshed (moving around the helmet adds brown pixels in it); when the new location of an item is not valid, the item appears immediately back to its original position, which is a bit confusing, as the user might not notice its returns; showing that item coming back quickly instead could help

- glview works great
- gunpowder works great
- cplusplus works great
- plotting works great
- scrollbar works great
- initvideosdl behaves like widgets

I then quickly tried the same test suite with the -g flag to use OpenGL instead of SDL, tests seem to behave the same.

One useful feature would be to always specify (with a label or the command-line) whether we are using SDL, or direct OpenGL, etc. (like in the widgets test).

In the demos/Makefile, maybe adding these two targets (and ensuring all tests try to switch to the correct back-end) could be useful:

"""
exec-sdl:
for D in ${SUBDIR}; do \
echo "==> executing $$D with SDL"; \
(cd $$D && ./$$D ); \
done

exec-gl:
for D in ${SUBDIR}; do \
echo "==> executing $$D with OpenGL"; \
(cd $$D && ./$$D -g ); \
done
""""

If it can help the debugging of tests, here are my graphic settings:

"""
* Hardware-accelerated rendering:
direct rendering: Yes
OpenGL vendor string: Mesa Project
OpenGL renderer string: Software Rasterizer
OpenGL version string: 2.1 Mesa 7.6
OpenGL shading language version string: 1.20

* Graphical controller:
02:00.0 VGA compatible controller: nVidia Corporation GT200 [GeForce GTX 260M] (rev a2)

* Installed GL libraries:
lrwxrwxrwx 1 root root 10 2010-01-09 12:17 /usr/lib/libGL.so -> libGL.so.1
lrwxrwxrwx 1 root root 12 2010-01-08 19:53 /usr/lib/libGL.so.1 -> libGL.so.1.2
-rw-r--r-- 1 root root 527256 2009-10-14 00:17 /usr/lib/libGL.so.1.2

* AIGLX status:
(==) AIGLX enabled
(II) AIGLX: Screen 0 is not DRI2 capable
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized /usr/lib/dri/swrast_dri.so
"""

A while ago I think I had noticed that the procedure to use Agar in an existing OpenGL application with a custom event loop and rendering step (http://wiki.libagar.org/wiki/Custom_Event_Loop / http://wiki.libagar.org/wiki/Integrating_Agar_in_an_existing_GL_application) had changed in the 1.4, would it be possible, if not done already, to document it in the wiki?

Later I will integrate Agar 1.4 into my little OpenGL C++ game-in-construction, as I use stricter compile flags I expect it to trigger some warnings, I will then do my best to submit patch(es), hopefully before the 1.4 is out.

Thanks again,
Best regards,

Olivier Boudeville.








Index: gui/window.c
===================================================================
--- gui/window.c	(révision 8614)
+++ gui/window.c	(copie de travail)
@@ -87,6 +87,9 @@
 AG_Window *
 AG_WindowNewRemote(Uint flags, const char *serverSpec)
 {
+
+#ifdef NETWORK
+
 	char spec[128], *s = &spec[0], *host, *port;
 	AG_Window *win;
 	NC_Result *r;
@@ -140,6 +143,13 @@
 	AG_ObjectDestroy(win);
 	if (r != NULL) { NC_FreeResult(r); }
 	return (NULL);
+
+#else /* NETWORK */
+
+	return (NULL);
+
+#endif /* NETWORK */
+
 }
 
 /* Create a named window */
@@ -1678,6 +1688,8 @@
 		va_end(ap);
 		Strlcpy(win->caption, s, sizeof(win->caption));
 	
+#ifdef NETWORK
+		
 		if (win->nc != NULL) {
 			NC_Result *r;
 
@@ -1692,6 +1704,9 @@
 				NC_FreeResult(r);
 			}
 		}
+
+#endif /* NETWORK */
+
 	}
 	AG_ObjectUnlock(win);
 }
_______________________________________________
Agar mailing list
[email protected]
http://libagar.org/lists.html

Reply via email to