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