E D R , A S I H C RSS

Double Buffering

ํ™”ฉด˜ ด€˜ €ฒฝ‹œ— œž„„ —†• Š” ธฐฒ•
----

1.  •˜

  • ํ™”ฉด— ทธ„ ทธฆด•Œ ํžˆ ทธ„ ํ™”ฉด—‹ค ฐ–ดฒŒ ˜ฉด œฐ•ด „ˆฌด ‹ฌํ•ด„‹ค.
  • ทธž˜„œ ํ™”ฉด— ทธ„ ฐ–ด„ ˜—ญ ˜‘ฐ™€ ํฌธฐ˜ €ƒ˜ „ํ งŒ“ค–ด„œ ธฐ‹ค ‹ค ฐ€‹คŒ ํ•œฒˆ— ํ™”ฉดœกœ ˜ฎฒจŠ” ธฐฒ•ด‹ค.
  • ํ•ดณดฉด ต‰žฅํžˆ €“œŸฝ‹ค.

2.  •˜2

  1. ํ™”ฉด— ทธ ค‘ € €ฒฝ, ด™ ํ• •Œ(ณต˜ ›€งž„ ”ฐœ„) ธฐกด˜ ํ™”ฉด„ € €šฐณ  ƒˆกœšด ทธ„ ทธ ค• ํ•œ‹ค.
  2. งŒ•ฝ ƒˆกœ ทธ คงˆ ทธด ธฐกด˜ €›Œงˆ ํ™”ฉด— ทธ ค„‹คฉด, ํ™”ฉด„ ณดŠ” ‚ฌšฉžŠ” €›Œ„ ˆœ„„ ŠฒŒ œ‹ค.(ฐœ… ˜ˆ œ ฐธณ ) ดŸฐ ณต˜ ˆœ„„ —†• ธฐ œ„ํ•˜—ฌ ƒˆกœ ทธ คงˆ ทธ ฐฐฒฝ„ ™‹œ— ทธฆฌŠ” ธฐฒ•ด‹ค.

2.1. ฐœ… ˜ˆ œ

  1. ˜ˆ1) ”ธ”„ํง ‚ฌšฉ‹œ
    ~cpp 
    โ–ฃโ–ฃโ–ฃโ–ฃโ–ฃ
    
    ด „ ด€ €šด‹ค. (ฐฐฒฝงŒ ‚˜˜คŠ” ณต ˆœ„, œž„ œ ฐœ, ด ˆœ„„ —†• Š” ฒƒด ”ธ” „ํง ชฉ )
    ~cpp 
    
    €ฒฝœ œ„˜— ทธ„ ทธฆฐ‹ค.
    ~cpp 
         โ–ฃโ–ฃโ–ฃโ–ฃโ–ฃ
    
  2. ˜ˆ2) ”ธ”„ํง ‚ฌšฉ‹œ
    ~cpp 
    โ–ฃโ–ฃโ–ฃโ–ฃโ–ฃ
    
    ฐฐฒฝ ํ•จป˜ ทธ„ ทธฆฐ‹ค.
    ~cpp 
         โ–ฃโ–ฃโ–ฃโ–ฃโ–ฃ
    

3. ด €„ ‚จธฐฒŒ œ ดœ 

  • ["Lovelyboy^_^"]€ ป‘ํ•˜ฉด งœ… †ŒŠค ‚  ค„ฆฌŠ” œ„ํ—˜ํ•œ „˜ด„œ..--; ฌธ„œกœ ‚จฒจ†“œฉด
    ‚˜ค‘— ‹ค‹œ ํ• •Œ „›€ด ˜€ •Š„ŒŠ” ƒฐ--;

4. ˜ˆ œ

  •  œ€ ”ธ” „ํง„  œŒ€กœ ดํ•ดชปํ–ˆ—ˆ”ตฐš”. ˜ ˜คžœงŒ— ณด‹ˆŒ  œ€ ญ˜ จ…€„ ชจฅดฒ ‹คŠ” ..--; ‹ค‹œ ”‹ˆ‹ค. •Œ…ธด“œ€ —†–ด ธ„œ ทธƒฅ Œ€ถฉ งŒ“ค–ดดคŠต‹ˆ‹ค.

    ~cpp 
    class CArcanoidView : public CView
    {
    private:
    	CArcanoidDoc* pDoc;
    
    	CDC m_MemDC;                   // ฉ”ชจฆฌ DC
    	CBitmap m_MemBitmap;           // ฉ”ชจฆฌ „ํŠธงต
    
    	CDC m_BackgroundDC;            // ฐฐฒฝ DC
    	CBitmap m_BackgroundBitmap;    // ฐฐฒฝ „ํŠธงต
     
     	CDC m_ShuttleDC;               // „ํ–‰ธฐ DC
             CBitmap m_ShuttleBitmap;       // „ํ–‰ธฐ „ํŠธงต
    ....
    ....
    
    void CArcanoidView::OnInitialUpdate()
    {
    	CView::OnInitialUpdate();
    
    	// TODO: —ฌธฐ— ํŠˆ˜ํ™”œ ฝ”“œ ถ”€ ฐ/˜Š” ธฐณธ ํดž˜Šค ํ˜ธถœํ•ฉ‹ˆ‹ค.
    	pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    
    	CClientDC dc(this);
    	m_MemDC.CreateCompatibleDC(&dc);                      // ํ˜„žฌ DC™€ ํ˜ธํ™˜œ ฉ”ชจฆฌ DC
    	m_MemBitmap.CreateCompatibleBitmap(&dc, 1000, 700);   // ํ˜ธํ™˜˜Š” ฉ”ชจฆฌ „ํŠธงต
    	m_MemDC.SelectObject(&m_MemBitmap);
    
    	m_BackgroundBitmap.LoadBitmap(IDB_BACKGROUND);
    	m_BackgroundDC.CreateCompatibleDC(&dc);
    	m_BackgroundDC.SelectObject(&m_BackgroundBitmap);
    
    	m_ShuttleDC.CreateCompatibleDC(&dc);
    	m_ShuttleDC.SelectObject(m_ShuttleBitmap);
    }
      
  • ด ‡ฒŒ ž› ํ• ‹ ‹ค ํ•ดณ , ”ธ” „ํง„ ํ•˜ณ  ‹ถ‹คณ  ํ•œ‹คฉด.. ‹จ ฉ”ชจฆฌ DC— ํ•„š”ํ•œ‹ค ทธฆฐ ‹คŒ—, ํ™”ฉด DCกœ BitBlt ํ•ดŠ”ฒ‹ˆ‹ค. ดฒŒ ”ธ” „ํงธฐ..  €Š” ž˜ชป ดํ•ดํ•˜ณ  žˆ—ˆ“ š”. ฐœ…€ •Œ•˜€งŒ.. ฌดŠจ ดƒํ•œ ƒฐ„ กฐธˆ ” ํ•ด„ ค„œ.. €‚œฒˆ˜ ทธ ดƒํ•œ ฝ”“œ€ ‚˜˜คฒŒ ˜—ˆ˜ ฒ‹ˆ‹ค. ํ›—‚  ณธธ„ ชป •Œ•„ณดŠ”..--;

    ~cpp 
    // Timer€ ํ˜ธถœํ•˜Š” ํ•จˆ˜ ‚ด€
    m_MemDC.BitBlt(0,0,1000,700,&m_BackgroundDC,0,0,SRCCOPY);    // ฉ”ชจฆฌ DCกœ BitBlt
    m_MemDC.BitBlt(x,y,width,height,&m_ShuttleDC,0,0,SRCCOPY);
    
    Invalidate(FALSE);
      

  • ด ‡ฒŒ Timer‚ด€—„œŠ” ฉ”ชจฆฌ DC—‹ค ‹ค ทธ คณ , Invalidate(FALSE) ํ˜ธถœํ•ฉ‹ˆ‹ค. FALSE ดค‘š”ํ•ฉ‹ˆ‹ค.

    ~cpp 
    // OnDraw ํ•จˆ˜ ‚ด€
    pDC->BitBlt(0,0,1000,700,&m_MemDC,0,0,SRCCOPY);  // ฉ”ชจฆฌ DC— žˆŠ”ธ ํ™”ฉด DCกœ BitBlt
      

5. Thread

ฐธฐ: †ŒŠคฝ”“œŠ”  €Ÿฐ ‹œกœ ํ•˜ฉด ” ณดธฐ ข‹€ ฒƒ ฐ™•„„œ ณ ณดค–ด. ง˜— •ˆ“คฉด ‹ค‹œ Œ ค†“ธธ. ^^; ทธŸฐฐ ดฐ... ณตด žˆŠ” ˜—ญงŒ ”ธ”„ํง ํ•˜Š”•?

["Lovelyboy^_^"]]: •—. ฌดŠจ ทธŸฐ ง”€„..;;  €• ณ ณ ‹œฉด ข‹ ธ. ณตดž‘ ง‰Œ€ธฐ ฐฐฒฝ ฒ˜ฆฌ ‹ค ”ธ”„ํง ํ–ˆŠ”ฐ—ฌ.  ˜ˆ “คณ ..;

ฐธฐ: ‚œ ํ™”ฉด  „ฒด ํ•œฒˆ— žœ”งํ•œ ‹คŒ— „ํ ฐ”ฟ”Š” ฐฉ‹งŒ ณด•„™”ธฐ—... …ํŠํ•˜‹คณ  ƒฐํ•˜Š”ค‘. ›€งดŠ” ˜—ญด งŽ€ •Š‹คฉด ํšจ ธ ฐฉฒ•ธ“ํ•ด. ณต„ ทธ คŠ” ฃจํ‹ดด CBall — žˆŠ”ฒƒ„ …ํŠํ•˜ณ ...

1002 : ”ธ” „ํง„ ํ•˜Š” ดœ Š”, Main Memory <-> Main Memory „˜ ฉ”ชจฆฌณต‚ฌ(Bltํ•˜Š” ฒƒ) ด Main Memory -> Video Memory „˜ ฉ”ชจฆฌ ณต‚ฌณด‹ค  ฅดธฐ •Œฌธ— ํ•˜ฃ .

ํ™”ฉด  „ฒด ํ•œฒˆ—  Œ”ง ํ•œ ‹คŒ „ํ ฐ”ฟ”Š” ฐฉ‹„ ด•ธฐํ•˜Š” ฒƒ ณดฉด •„งˆ Page Fliping „ ด•ธฐํ•˜‹œŠ”“. ‹จ, ดฒƒ€ GDI กœŠ” ถˆ€Šฅํ•˜€ •Š„Œš”? ^^ DC ํ•ธ“ค„ šฐฆฌ€ ง ‘ กฐž‘ํ•  ˆ˜Š” —†Š” ฒƒดณ .. ง ทธŒ€กœ, „ํ ฐ”‹คŠ” ฒƒ€ ํ™”ฉด— ํ‘œ‹œํ•ด Š” ฉ”ชจฆฌ €ฆฌํ‚คŠ” ํฌธํ„˜ ฐ’„ ฐ”พธŠ” ‹ˆŒ. Page Fliping € DOS‚˜ DX—„œŠ” €Šฅํ• € ชฐ„ GDI —„œŠ” ถˆ€Šฅํ•œ ฐฉฒ•ฒƒดŠ” ฐœธ  ƒฐ. (DC— Select ˜–ดžˆŠ” Bitmap „ ‹ค‹œ …‹ํŒ…ํ•ดŠ” ฐฉฒ•€ –ด–จŒ. ํ•œฒˆ„ •ˆํ•ดดค€งŒ. --;)

ทธฆฌณ ,  „ฒด ทธฆฌธฐ € จ ฃจํ‹ด˜ ฒฝšฐŠ” • งคํ•œฐ, ™œƒํ•˜ฉด  € ‡ฒŒ object „กœ ทธฆฌธฐ ฃจํ‹ดด žˆŠ” ฒฝšฐ ‚ฌžŒ“ค ‹คˆ˜ํ•˜Š” ฒƒด.. ฐฐ˜ Draw— ”ธ”„ํงํ•˜ณ  ˜ ฉ”ธ ฃจํ‹ด€„— ”ธ”„ํง„ ค‘ณตํ•˜Š” ฒฝšฐ€ žˆ–ด„œฆฌ.. (ญ. š”ƒˆŠ” ํ•˜“œ›จ–ด€ „œ „ †„  €ํ•˜ —†ธด ํ•œฒƒ ฐ™€งŒ.) ฐœธ œกœŠ” ฐฐ˜ Draw€„—Š” ฐ˜ ธ Blt. ทธฆฌณ  Main €„— ”ธ”„ํง ํ•œฒˆด งž€ •Š„Œ ํ•˜Š”. ญ.. ทธƒฅ ƒฐ‚˜„œ  €ฆฌ €ฆฌ. --;

ฐธฐ : ใ…‹ใ…‹, ํ‘œํ˜„ด กฐธˆ ฌธ œ œํ‚ฌ„ •Œ•˜–ดš”. ํ™”ฉด  „ฒด ํ•จ€ ํดด–ธํŠธ ˜—ญ„ –˜ธฐํ•œ ฒƒดณ , „ํ ฐ”‹คŠ” –˜ธฐŠ” ํฌธํ„งŒ ฐ”‹คŠ”ฒŒ •„‹ˆ ””ฐ”ดŠค „ํ ‚ดšฉ„ ฐ”‹คŠ” –˜ธฐํ•œ˜ˆš”. ธˆ˜•, ‚ด • งคํ•œ ํ‘œํ˜„•œ— ํŽ˜ด€ ํ”Œฆฌํ•‘ดž‘ ํ—ทฐˆฆฌ€ ง–ด. ^^;

neocoin : ฒฐก € š”ฆ˜ ํ•˜“œ›จ–ด ด•? ธ•?

snowflower : Œ.. ‚˜˜ ฒฝšฐ—”.. ํ™”ฉด  „ฒด BufferDC— ทธ ค„œ ‚˜ค‘— ทธธ DCกœ ˜ฎŠ”ฐ... € ํ‹€ฆฐŒ?

ฐธฐ : ณดํ†ต˜ ฒฝšฐŠ” „ ํ˜ธ€ ํ•˜Š” ฐฉฒ•œกœ ํ•˜€.  Œ”ง˜Š”  •ด  „ํ˜€ •ˆ ณดด‹ˆŒ...

zennith : œฌธˆ—†Š” †Œฆฌดณ , ณ ฃจํ•œ ด•ธฐ ž…‹ˆ‹คงŒ, PCI ž€ ธฐˆ ด ฒ˜Œ †Œฐœ˜—ˆ„•Œ ฝค ž˜€ํ–ฅ ธ ธฐˆ กœ ฐด‘ฐ›•˜˜ ฒƒด PCI bus mastering ดž€ ธฐˆ ธฐ.. ฌด—‡ธณ  ํ•˜‹ˆ, pci „„กœ —ฐฒฐ˜–ดžˆŠ” ธฐธฐ“คฆฌ „œกœ˜ ฉ”ชจฆฌ— DMA ํ•  ˆ˜ žˆ—ˆ˜ ฒƒด—ˆฃ . Œ€ํ‘œ œกœ ด ธฐˆ ด ‚ฌšฉœ ˜ˆ(ธฐณด‹จ  œ€ •Œณ žˆŠ” ‹จ ํ•˜‚˜˜ ˜ˆ)Š” TVˆ˜‹ “œ—„œ ‚ฌšฉ˜Š” ฒƒด—ˆŠ”ฐš”. TV –ดํ”Œฆฌ€ด…˜—„œ TV € ํ‘œ‹œ  €„˜ region „  •ํ•ด†“œฉด TV ˆ˜‹ “œ—„œ ทธ€„— ํ•ด‹ํ•˜Š” „””˜ค“œ ฉ”ชจฆฌกœ ง ‘ ดŠ”.. ทธŸฐ ธฐˆ ด—ˆŠ”ฐ.. ”ธ”„ํง„ ณด‹ˆ ฐ‘žธฐ ทธ ƒฐด ‚˜Š”ตฐš”. Œ.. š”ฆˆŒ€ ‹ค“ค agp จ„œ..  € pci bus mastering ดž€ ธฐˆ ด •„ง„ ‚ด•„‚จ•„žˆŠ”€.. ž˜ ชจฅดฒ ตฐš”.
----
ํ™ˆํŽ˜ด€„ฅ˜
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:09
Processing time 0.0309 sec