View Single Post
Old 13 February 2016, 20:02   #11
mark_k
Registered User
 
Join Date: Aug 2004
Location:
Posts: 2,476
Maybe I was a bit pessimistic in saying it won't work then.
I'll take a look at those demos.

With Interlaced line mode set to Single, lines from both odd and even fields appear in the same position. So you lose vertical resolution, but that may be preferable if the alternative is fringing artifacts. And there may be some flicker since each output line is from different (adjacent) lines of the interlaced image on alternate frames.

Have you tried the "Double, fields+" line mode? Make sure to enable vsync if you try it, but the effect is very similar to a real 15kHz CRT monitor (i.e. with interlace flicker). The up-side is, no fringing artifacts and no loss of vertical resolution.



I've replaced the patched version of ShowANIM 4.20 attached above with a better one. In the first attempt I only removed the instruction where it set the LACE bit in gb_system_bplcon0, not the one where it clears that bit before exiting.

ShowANIM 4.30 is in gfx/conv/anim.lha on Aminet. That archive contains source and binary for a program called DisplayANIM which is a cut-down version of PlayANIM. At least, there's this comment in the source:
Code:
 *      Main program for animation file playing program
 *         Derived from ShowANIM code as a working example of
 *         ANIM playback.
 *
 *      Gary Bonham
 *      SPARTA, Inc.
 *      Laguna Hills, Ca
DisplayANIM has the same forcing of global interlace problem. An extract from its source:
Code:
   GfxBase->system_bplcon0 |= INTERLACE;

            delay = 0;
            loops = 1;
            ii = 1;
            if (continuousplay) {
               if (EndFlag) {
                  puts(" *** -c changed to -l ***\n");
                  loopplay = continuousplay;
                  continuousplay = 0;
               }
               else ii = continuousplay;
            }
            if (loopplay)       loops = loopplay;
            DBOpenGraphics(2,IFFfileList->firstframe->bmhd->pageWidth
                            ,IFFfileList->firstframe->bmhd->pageHeight
                            ,IFFfileList->firstframe->bmhd->nPlanes);
               for (loop=0;loop<loops;loop++) {
                  i = ii + 1;
                  while ((i = PlayAnim(IFFfileList,i,delay))) {}
               }
            DBCloseGraphics();
      GfxBase->system_bplcon0 &= ~INTERLACE;
Apart from the probably-not-wanted forcing of interlace mode, the way it restores system_bplcon0 before exiting isn't sufficient, so interlace mode may remain enabled after the program exits. (It should call RemakeDisplay() or RethinkDisplay() to Intuition picks up the change.) I found a newsgroup post from 1987 complaining about that.

Last edited by mark_k; 13 February 2016 at 22:36.
mark_k is offline  
 
Page generated in 0.06682 seconds with 9 queries