🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #869

Re: rysowanie w C#

#869
From: Marek Janaszewski USUNTO. z adre...
Date: Thu, 08 Apr 2004 23:43
57 lines
3562 bytes
Maciej Łuszczyński wrote:
> <ciach>
>> przygotowanie bitmapie i tylko wyświetlenie jej w metodzie Paint
>> nie. Użycie bitmapy ma jedną przewagę, nie musisz się zmieścić w
>> cyklach odświeżania ekranu. Jeśli zostaniesz złapany z nieskończonym
>> rysunkiem powstanie efekt migania albo płynięcia obrazu.
>
> Wcale nie :)
>
> Istnieje możliwość określenia swojej kontrolki jako używającej
> podwójnego buforowania. Dzięki temu efekt migotania nie występuje, i
> to nawet przy rysowaniu całkiem sporej liczby obiektów:
[...]

Witam!

Ale co oznacza podwójne buforowanie, przeciesz właśnie to tak działa tylko
jest realizowane automatycznie przez kontrolkę.

Cytat z pomocy MSDN:

If true, drawing is performed in a buffer, and after it completes, the
result is output to the screen. Double-buffering prevents flicker caused by
the redrawing of the control. To fully enable double-buffering, you must
also set the UserPaint and AllPaintingInWmPaint style bits to true.

Twócy gier mają możliwość przez DirectX albo OpenGL przygotować zawartość
rysunku części pamięci karty, która nie jest wyświetlana i albo kazać,
karcie to pokazać albo szybko dokonać transferu bloków. W przecież procesor,
karty graficznej nie będzie rysował w głównej pamięci.

Znalazłem na potwierdzenie tych słów artykuł na jakieś stronie z GDI+ FAQ:
http://www.bobpowell.net/doublebuffer.htm

Cytata:
When these are all set true, the draw process is modified so that instead of
your Paint handler being passed a Graphics for the screen, it is passed a
Graphics for an in-memory bitmap. When you draw to this Graphics object, you
are drawing on an invisible image. At the end of the draw cycle, this bitmap
is copied to the main window automatically and the actual pixels you see are
all changed in a fraction of a second instead of one at a time as the draw
cycle progresses.

Autor nazywa tą metodę "automatic double buffering", a to co ja
zaproponowałem "manual double buffering". Wymienia różnice między
podejściami i jak efektywnie stosować "double buffering".

P.S. Ciekawe skąd się wzięła nazwa "double buffering" czyli podwójne
buforowanie. Podobne ustawienie dotyczące dysku było w MS-DOS czy w Windows
9x w Msdos.sys. Jak dla mnie w tym przypadku wystarczyła by nazwa
"buforowanie". Chyba, że autorzy zawartość pamięci karty graficznej traktują
jak buffor, a bitmapę w pamięci jako drugi buffor.

-- 
Pozdrawiam,
Marek Janaszewski
[ j_m...@gazeta.pl ]
Technical Details
Message-ID: <c54ogb$olq$2@news.atman.pl>
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.wirehub.nl!newsfeed.tpinternet.pl!news.atman.pl!not-for-mail
References: <c51u2r$jep$1@news.onet.pl> <c53s4n$1q18$2@news.atman.pl> <1hiaf7qxzq4n4$.h509hx2jq8eb.dlg@40tude.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.wirehub.nl!newsfeed.tpinternet.pl!news.atman.pl!not-for-mail
From: "Marek Janaszewski \(USUN_TO. z adresu!\)" <USUN_TO...@gazeta.pl>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: rysowanie w C#
Date: Fri, 9 Apr 2004 01:43:49 +0200
Organization: ATMAN
Lines: 58
Message-ID: <c54ogb$olq$2@news.atman.pl>
References: <c51u2r$jep$1@news.onet.pl> <c53s4n$1q18$2@news.atman.pl> <1hiaf7qxzq4n4$.h509hx2jq8eb.dlg@40tude.net>
NNTP-Posting-Host: staticline702.toya.net.pl
Mime-Version: 1.0
X-Trace: news.atman.pl 1081468235 25274 217.113.228.127 (8 Apr 2004 23:50:35 GMT)
X-Complaints-To: use...@atman.pl
NNTP-Posting-Date: Thu, 8 Apr 2004 23:50:35 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit