Re: [AD] bug in polygon3d() |
[ Thread Index |
Date Index
| More lists.liballeg.org/allegro-developers Archives
]
Sven Sandberg wrote :
>
> Hello,
>
> I sent a bug report some time ago about quad3d + POLYTYPE_PTEX_LIT
> crashing with Watcom. Nobody answered (not surprising, given the
> combination of strange platform and difficult function). Well, today I
> debugged it and I'm almost certain that the problem is in the macro
> DO_PTEX() in i386/iscan.s. I can't debug further because I don't know
> assembler well enough, but there's pretty good evidence that the problem
> is in DO_PTEX(): I tested all POLYTYPE_* in all color depths, and it
> crashed exactly on the types that use DO_PTEX() (namely POLYTYPE_PTEX,
> POLYTYPE_PTEX_LIT and POLYTYPE_PTEX_MASK in 8 bpp). And the crash goes
> away if I comment out the call to the scanline drawer from
> draw_polygon_segment() in poly3d.c.
>
> The crash is usually a bit strange: it hangs in the middle of writing
> the traceback for the crash, just after it has written "Shutting down
> Allegro". Maybe this suggests something wrong with the stack? I don't
> know. Also, this particular polygon has only one scanline and its width
> is 1. (At the time draw_polygon_segment() calls drawer(), dx=183 and
> y=111.)
>
> I'm using watcom 10.6, today's cvs, windows 95, on a Pentium 133. It
> would be good if an expert took a look at it, because I don't know what
> to do.
>
> The program that crashes is:
>
> ---- begin test.c ----
> #include <allegro.h>
> int main(int argc, char *argv[])
> {
> V3D vtx1, vtx2, vtx3, vtx4;
> BITMAP *bmp, *texture;
>
> allegro_init();
> set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0);
> bmp = create_bitmap(320, 200);
> texture = create_bitmap(32, 32);
>
> vtx1.x=11726240; vtx1.y=7579000; vtx1.z=61833760;
> vtx1.u=0; vtx1.v=0; vtx1.c=19;
> vtx2.x=12037280; vtx2.y=7223700; vtx2.z=63607072;
> vtx2.u=2097152; vtx2.v=0; vtx2.c=13;
> vtx3.x=11911200; vtx3.y=7372800; vtx3.z=67331232;
> vtx3.u=2097152; vtx3.v=2097152; vtx3.c=0;
> vtx4.x=11614400; vtx4.y=7711900; vtx4.z=65557920;
> vtx4.u=0; vtx4.v=2097152; vtx4.c=5;
>
> quad3d(bmp, POLYTYPE_PTEX, texture, &vtx1, &vtx2, &vtx3, &vtx4);
>
> return 0;
> }
> END_OF_MAIN()
> ---- end test.c ----
>
> (this is a special case of ex3d)
I have compiled and tested your example successfully on Linux, DOS and
Mingw. Unfortunately, the bug has not occured... However the 3 compilers
I have used are 3 different ports of the same compiler : gcc. May be
DO_PTEX uses some gcc specific stuff ? Does your compiler complain when
it compiles iscan.s ? Can you also verify that your compiler generates
the expected code ?
Bertrand.