CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 8 of 8
  1. #1
    Guest

    Animation using GDI

    Is it possible to do decent flicker free animation using the win32 gdi functions ?



  2. #2
    Join Date
    Apr 1999
    Posts
    12

    Re: Animation using GDI

    Of course....

    Use offscreen bitmaps and then use BitBlt synchronized to the retrace (blanking pulse). To do this you need to use DirectX BUT DON'T PANIC, you are not going to use all of it. You don't have to use page-flipping, you don't have to set a display mode. All you need is to get an IDirectDraw object, nothing more. This is just like you are not using DirectDraw at all.

    In an IDirectDraw object you will find three functions:

    GetVerticalBlankStatus
    WaitForVerticalBlank
    GetCurrentScanline

    If you do the "wait" and then blit to the screen you will not see any flickering.



  3. #3
    Guest

    Re: Animation using GDI


    You can get it pretty smooth using GDI and memory dc's. Check out this site for an example:
    http://members.xoom.com/zbonham/source.htm


  4. #4
    Guest

    Re: Animation using GDI

    I checked the example but it still flickers. On his example, it looks like it doesn't flicker
    but that's because the images are very small and they are in black and white.
    The problem is with the vertical retrace. You have to be in sync with it.


  5. #5
    Guest

    Re: Animation using GDI

    hmm...

    Is it possible that the "flickering" is due to the choppyness of the frames? I have a 133 and a 400 that I have run this on and I don't notice the "tearing" (at least in regards to what I would see under DOS). If the frames had a smoother transition from one frame to the next, I believe it wouldn't "flicker". I don't have enough images (or a way to generate them) at the office to check.

    FYI, the images are 256 color bitmaps.

    I would agree, that it probably could be smoother (more frames would help accomplish this), and syncing with the retrace would be a good start. Your right in the only way I know how to do that is under DirectX.

    Thanks for taking a look at it!




  6. #6
    Guest

    Re: Animation using GDI

    Try it with bigger images and colors. Although you are using 256 color images, they don't have any colors.
    I tried it with other images and it flickers. I just modified it to wait for vertical retrace and it doesn't flicker anymore.

    Any examples on using transparency to blit images ? (without directx)



  7. #7
    Guest

    Re: Animation using GDI

    >>Although you are using 256 color images, they don't have any colors.
    >>I tried it with other images and it flickers

    I hadn't tried that, thanks for the input!

    I don't have any source for a transparent blt, sorry. I have seen references on the net, but don't really remember where at the moment. If you are programming for win98 or nt 5.0, I think there is a new blt function called TransparentBlt that is available, but I haven't tried it.

    Thanks!


  8. #8
    Join Date
    Jun 1999
    Posts
    31

    Re: Animation using GDI

    Hi,

    Why don't you just wait for a vertical retrace? Billy G. say's you can't read/write the hardware directly under Windows 9x, until you try it!!!

    void WaitVR()
    _asm {
    mov dx, 03DAh
    L10:
    in al, dx
    test al, 8
    jnz L10
    L20:
    in al, dx
    test al, 8
    jz L20
    }
    }

    Just stick this one into your code and call it before you're swapping you backbuffer. Just to things about this: It doesn't run under NT and the higher you're screen resolution is the longer it takes before a vertical retrace occurs



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured