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.0269 sec