Èñâ¸ÞÀΠ

 

 

½ºÅ©¸³ÅͶõ?

directXÀÇ ¼Ò°³

 

 

direct»ý¼º,ÇÁ·Î¼¼¼­µ¶Á¡,¸ðµå¼ÂÆÃ

´ÙÀÌ·ºÆ®¹öÆÛ»ý¼º Àü¹Ý¿¡ ´ëÇØ

 

 

¸éÀÇ »ý¼º°ú Çø®ÇÎ,ºñÆ®¸Êº¹»ç

´ÙÀÌ·ºÆ® ÆÄ·¿Æ® °ü¸®

 

 

Lock,unlock,Blt,BltFast

Direct Sound

 

 

 

 

 

  

    º¸Åë µµ½º¿ë °ÔÀÓÀ» Á¦ÀÛÇÒ¶§´Â Çϵå¿þ¾îÀûÀÎ °ÍÀ» °³¹ßÇØ¾ß ÇÏ
    °Å³ª (¼Óµµ ¹®Á¦·Î...) »ó¾÷ÀûÀÎ ¶óÀ̺귯¸®¸¦ »ç¼­ Á¦ÀÛÇÏ´Â
    °æ¿ì°¡ ´Ù¼ö¿´À» °Ì´Ï´Ù.
    ±×¸®°í, ¸ÖƼ Å×½ºÅ·À» Çϱâ À§ÇÑ ÀÚ±¸Ã¥À» ³»³õ±âµµ ÇÏ¿´ÁÒ~
    ´ç¿¬ À̰ÍÀ» ¾å»ðÇÑ ÇÁ·Î±×·¥¹æ½ÄÀ̶ó°íµé ÀϺο¡¼­´Â Ç¥ÇöÇϸé
    ¼­ »ç¿ëÀ» ÇßÁÒ~

    À©µµ¿ìÁî´Â ¾î¶³±î¿ä? »ç½Ç ¸ÖƼÅ×½ºÅ·, ³×Æ®¿öÅ©»óÀÇ Ç÷¹ÀÌ,
    »ç¿îµåÀÇ ´Ù¾çÇÑ Á¦¾î, °Å±â´Ù 3Â÷¿ø ¹æ¹ý±îÁö ½±°Ô ½Å°æ¾²Áö
    ¾Ê°í Ç¥ÇöÇÒ¼ö ÀÖ´Â ½Ã´ëÀÎ°Í °°½À´Ï´Ù.

    À×? ÀÚ²Ù »ïõÆ÷·Î ºüÁö´Â ±º¿ä~

    1. ÇÁ·Î¼¼¼­¸¦ µ¶Á¡Çϱâ
        ÀÏ´Ü °ÔÀÓÀ» À§Çؼ­´Â ÇÁ·Î¼¼¼­¸¦ µ¶Á¡ÇÒ Çʿ伺ÀÌ ÀÖ°Ú´Ù
        °í »ý°¢ÇϽÃÁÒ? ´ç¿¬ ´ÙÀÌ·ºÆ®·Î À̰ÍÀ» »ç¿ëÀÚ°¡ ¸¸µé±â
        ¹Ù¶óÁö ¾Ê°í ÀÚü ¿¡¼­ Áö¿øÇÕ´Ï´Ù. ¹Ù·Î
        SetCooperativeLevel()À̶ó´Â ´ëÇ¥ÀûÀÎ ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.

    ¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
    HRESULT SetCooperativeLevel(LPDIRECTDRAW lpDD, HWND hWnd,
                                DWORD dwFlags)
    ¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
        lpDD´Â ¾Õ¿¡¼­ »ý¼ºµÈ DirectDraw °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦
        ¶æÇÕ´Ï´Ù. µÎ¹øÂ°°ÍÀº ´ç¿¬ À©µµ¿ìÁî Çڵ鷯°ÚÁÒ?
        º¸Åë ÀÌÇîµé·¯´Â ÀÛ¾÷Àüȯ(ALT+TAB)¿¡ °üÇÑ ¸Þ¼¼Áö¸¦ º¸³¾
        ¶§ »ç¿ëµÇ¾î Áý´Ï´Ù.

        ¸¶Áö¸· dwFlags¿¡ °üÇÑ°Ç ´ÙÀ½ÀÇ ³»¿ëÀ» º¸½Ã¸é ¼³¸íº¸´Ù
        ½±°Ô ÀÌÇØ°¡...

--------------------------------------------------------------      
DDSCL_ALLOWMODEX   ModeX¸¦ Áö¿øÇÑ´Ù. DirectDraw´Â ÀúÇØ»óµµÀÎ
                   320x200, 3200x400ÀÇ X¸ðµå¸¦ Áö¿øÇÕ´Ï´Ù.

DDSCL_ALLOWREBOOT  Àüü È­¸éÀ» »ç¿ëÇÒ¶§ Ctrl+Alt+DelÀ» °¡´ÉÇÏ
                   ÇÕ´Ï´Ù.

DDSCL_EXCLUSIVE    Çػ󵵸¦ ¹Ù²Ù°Å³ª Çø®ÇÎ ÀÛ¾÷À» À§Çؼ­
                   exclusive level »óÅ·ΠÇÑ´Ù.

DDSCL_FULLSCREEN   GDI¸¦ »ç¿ëÇÏÁö ¾Ê´Â Àüüȭ¸é ¸ðµå¸¦ »ç¿ë
                   °¡´ÉÇÏ°Ô ÇÑ´Ù.

DDSCL_NORMAL       ÀϹÝÀûÀÎ À©µµ¿ìÁî â¿¡¼­ ÇÁ·Î±×·¥À» °¡´É
                   ÇÏ°Ô ÇÕ´Ï´Ù.

DDSCL_NOWINDOWCHANGES Ȱ¼ºÈ­ »óÅ¿¡ ÀÖ´Â ÇÁ·Î±×·¥À» minimize
                      ÇÒ¼ö ¾ø°Ô ÇÕ´Ï´Ù.
--------------------------------------------------------------
        ¿Í¿ì ¹«½¼ ¿É¼ÇÀÌ ÀÌ·¸°Ô ¸¹Àº°¡? º¸Åë ÇÁ·Î±×·¥¿¡¼­´Â
        À§ÀÇ Äڵ带 Á¶ÇÕÇØ¼­ »ç¿ëÇÕ´Ï´Ù. ¿©±â¼­ Á¶ÇÕÀ̶õ°ÍÀº
        OR, AND¸¦ ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù.

        °£´ÜÇÑ ¿¹¸¦ º¸ÁÒ~

    ddrval=lpDD->SetCooperativeLevel(hwnd,
                             DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);

        ¾ÆÁÖ °£´ÜÇØ º¸À̽ÃÁÒ?


    2. ºñµð¿À ¸ðµå ¼³Á¤
        ¾Õ¼­ ¹è¿î °ÍÀº ´ÜÁö ÇÁ·Î¼¼¼­(CPU)ÀÚ¿øÀÇ µ¶Á¡ÇÏ´Â °ÍÀ»
        ¹è¿ö º¸¾Ò½À´Ï´Ù.
        À̹ø¿¡´Â ºñµð¿À ¸ðµå¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¾½Ã´Ù.
        ¹°·Ð °ü·ÃÃ¥ÀÚ¸¦ º¸½Ã¸é ÀÚ¼¼È÷ ¾Ë¼ö ÀÖÁö¸¸, ±×·¡µµ...
        È¤½Ã³ª... Ã¥ÀÌ ¾øÀÌ À̱۷Π¹è¿òÀ» ½ÃÀÛÇÏ´Â ºÐÀ» À§ÇØ

        ´ÙÀÌ·ºÆ®´Â 320x200, 320x400 640x480ÀÇ ÇØ»óµµ¸¦ Áö¿øÇÕ
        ´Ï´Ù. 256Ä®¶ó¸¦ ±âº»À¸·Î ÇÏÁö¸¸ Åõ·çÄ®¶ó±îÁö Áö¿øÀÌ
        µË´Ï´Ù. º¸Åë 640x480x256¿¡¼­ °¡Àå È¿À²ÀûÀÎ ±â´ÉÀ»
        Á¦°øÇÑ´Ù°í ¸Þ´º¾ó¿¡ ³ª¿Í ÀÖ´õ±º¿ä!
    

    ¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
    HRESULT SetDisplayMode(LPDIRECTDRAW lpDD,
                                DWORD dwWidth, DWORD dwHeight,
                                DWORD dwBpp)
    ¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
        ¿ª½Ã ù¹øÂ° ÀÎÀÚ´Â DirectDraw¸¦ ¶æÇÏ´Â °ÍÀ̰ÚÁÒ~
        dwWidth¿Í dwHeight´Â °¡·Î ¼¼·Î ÇØ»óµµ¸¦ ¶æÇÏ´Â °ÍÀ̱¸¿ä
        ¸¶Áö¸· dwBpp´Â Ä÷¯¼ö¸¦ ¶æÇÕ´Ï´Ù.
        ±×·³ ¿¹Á¦¸¦ º¸ÁÒ~

        ddrval=lpDD->SetDisplayMode(640, 480, 8);

        À§ÀÇ ¿¹Á¦´Â ¹Ù·Î 640*480*256À» ¶æÇÕ´Ï´Ù.

        ¾ÆÁÖ ½±ÁÒ~ ^^;

        ÀÚ~ ¿©±â±îÁö Á¤¸®ÇØ º¸ÁÒ~ ù¹øÂ° µÎ¹øÂ° ±ÛÀ» ÀÐ¾î º¸¼Åµµ
        ¾ÆÁ÷ ÀÌÇØ°¡ µÇÁö ¾ÊÁÒ~ ´ç¿¬È÷ ¾ÆÁ÷Àº ±×¸® Áß¿äÇÏÁö´Â
        ¾ÊÀº ³»¿ëÀεíÇÕ´Ï´Ù. (´ç¿¬ÇÑ ³»¿ëÀ̹ǷÎ...^^;)
    
        //¿ì¼± »ç¿ëµÉ ´ÙÀÌ·ºÆ® º¯¼öµéÀ» ¼±¾ðÇØ¾ß °ÚÁÒ~

        LPDIRECTDRAW        lpDD;
        LPDIRECTDRAWSURFACE lpDDSPrimary;
        LPDIRECTDRAWSURFACE lpDDSBack;
        DDSCAPS             ddscaps;
        DDSURFACEDESC       ddsd;
        HRESULT             hr;

        //±×´ÙÀ½¿¡ ´ÙÀÌ·ºÆ® µå·Î¿ì¿¡ °üÇÑ »ý¼ºÀÚ¸¦ »ý¼ºÇßÁÒ~
        hr = DirectDrawCreate(NULL, &lpDD, NULL);
        if(hr != DD_OK)
        {
            // ¿¡·¯ °ü·Ã 󸮸¦ ÇØ¾ß °ÚÁÒ?
            // º¸Åë ¿¡·¯¶ó°í Ç¥½Ã¸¦ ÇÏ°í ºüÁ® ³ª°©´Ï´Ù.
        }

// ÀÚ~ ±×·³ À̹ø¿¡´Â ÇÁ·Î¼¼¼­¸¦ µ¶Á¡ÇØ¾ß °ÚÁÒ~
        hr = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE |
                            DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX);
        if(hr != DD_OK)
        {
            // µ¿ÀÏÇÑ ¿¡·¯ 󸮸¦ ÇÏ¸é µÇ°ÚÁÒ~
        }
        
        // ¿©±â¼­ ÇØ»óµµ¸¦ ¼³Á¤ÇØ¾ß °ÚÁÒ!
        hr = lpDD->SetDisplayMode(640, 480, 8);
        if( hr != DD_OK)
        {
            // ´ç¿¬ ¿¡·¯ 󸮰ÚÁÒ~
        }

        // ¿©±â±îÁö....