Citation:
bon ben ya un truc incompréhensible lié à cygwin.
Euréka. J'ai compris. En fait le truc à savoir c'est que windows refuse de voir le fichier alleg40.dll récupéré par "hg" comme une vraie DLL. Il bloque son ouverture. D'où l'erreur 0xC0000022 au lancement. Par contre si on la copie depuis l'explorateur, windows peut enfin l'ouvrir. Ca sent une histoire de protection anti-virus ce truc: on ne charge pas une DLL dont on ne sait pas d'où elle sort.
Quoi qu'il en soit, une fois une copie d'alleg40 sur lui même effectuée, TEOW.exe se lance depuis la console cygwin ou l'explorateur sans aucun problème.
Edit 16h: bon ca y est. J'ai une version 1.8.2 qui tourne sur le windows8 et qui mange moins de temps CPU tout en ayant un mode entrelacé bien plus joli. Voici le diff
Code:
$ hg diff
diff -r f33dcfed49dd src/alleg/atruecol.c
--- a/src/alleg/atruecol.c Fri Dec 28 16:39:31 2012 +0100
+++ b/src/alleg/atruecol.c Sun Feb 10 16:05:06 2013 +0100
@@ -92,7 +92,7 @@
static const struct SCREEN_PARAMS *tcol;
static int *dirty_cell;
static int border_color;
-static BITMAP *gpl_buffer, *screen_buffer;
+static BITMAP *gpl_buffer, *screen_buffer, *interlace_buffer;
static int palette[TO8_NCOLORS+1];
static int pixel_size;
@@ -390,7 +390,6 @@
{
register int i,j;
int cell_start, *dirty_cell_row = dirty_cell;
- static int odd = 1;
if (!graphic_mode)
return;
@@ -399,9 +398,32 @@
if (teo.setting.interlaced_video)
{
- odd ^= 1;
- for(j=odd; j<tcol->screen_h; j+=2)
- blit(screen_buffer, screen, 0, j, 0, j, tcol->screen_w, 1);
+ int blend_done = 0;
+ /* on groupe les dirty rectangles ligne par ligne */
+ for (j=0; j<tcol->screen_ch; j++)
+ {
+ for (i=0; i<tcol->screen_cw; i++)
+ if (dirty_cell_row[i])
+ {
+ cell_start=i;
+ if(!blend_done) {
+ blend_done = 1;
+ draw_trans_sprite(interlace_buffer, screen_buffer, 0, 0);
+ vsync(); // plus fluide ainsi?
+ }
+
+ while ((i<tcol->screen_cw) && dirty_cell_row[i])
+ dirty_cell_row[i++]<<=2;
+
+ blit(interlace_buffer, screen,
+ cell_start*TO8_CHAR_SIZE*2, j*TO8_CHAR_SIZE*2,
+ cell_start*TO8_CHAR_SIZE*2, j*TO8_CHAR_SIZE*2,
+ (i-cell_start)*TO8_CHAR_SIZE*2, TO8_CHAR_SIZE*2);
+ }
+
+ /* ligne suivante */
+ dirty_cell_row += tcol->screen_cw;
+ }
}
else
{
@@ -515,6 +537,10 @@
pixel_size = (depth+1)/8;
+ interlace_buffer = create_bitmap(tcol->screen_w, tcol->screen_h);
+ clear_bitmap(interlace_buffer);
+ set_trans_blender(0,0,0,depth>=24?256/3:128); // entrelacement: utiliser 32 au lieu de 256/3 pour un effet encore plus marqu▒
+
/* objets touch▒s par l'interruption souris (djgpp) */
LOCK_VARIABLE(screen_buffer);
LOCK_DATA(screen_buffer, sizeof(BITMAP));
diff -r f33dcfed49dd src/file/png.c
--- a/src/file/png.c Fri Dec 28 16:39:31 2012 +0100
+++ b/src/file/png.c Sun Feb 10 16:05:06 2013 +0100
@@ -46,6 +46,7 @@
#include <stdlib.h>
#ifndef DJGPP
#include <png.h>
+ #include <zlib.h>
#endif
#endif
Pour voir ce que ca donne sans passer par les problèmes de compilation, ca se passe
ici.