ì—사는 ë˜í’€ì´ëœë‹¤. ì´ëŠ” ì—사가 ìž˜ëª»ëœ ì´ìœ ì˜ í•˜ë‚˜. ―C.D.

- ì›ë¬¸ë§í¬ :
http://icps.u-strasbg.fr/~marchesin/sdl/glsdl.html
- ì›ë¬¸ê³¼ ê¸€ì´ ë˜‘ê°™ì§€ëŠ” 않다는 ì ì„ ë°íž™ë‹ˆë‹¤. ì 당히 ë°”ê¾¸ê³ ì¤„ì˜€ìŠµë‹ˆë‹¤.
1 개요 #
- 여기서 언급한 방법ë§ê³ ë„ ë‹¤ë¥¸ ë°©ë²•ì´ ì¡´ìž¬í• ìˆ˜ 있습니다.
- ì–´ì¨Œë“ ìž˜ëª» ì‚¬ìš©í• ê²½ìš° ì‹¤ì œ 소프트웨어 ëª¨ë“œë³´ë‹¤ë„ ëŠë ¤ì§ˆ 수 있다는 ì ì„ ì•Œì•„ë‘시기 ë°”ëžë‹ˆë‹¤.
- redpixelìƒê° : 현재 ë²„ì „ì˜ glSDLì€ ì†ŒìŠ¤ë¥¼ ë³´ë©´ ë‚´ë¶€ì 으로 "íƒìŠ¤ì³ ê³µê°„ 최ì í™”"를 하지 않습니다. 즉, ì •ì‚¬ê°í˜• íƒìФì³ê·¸ë¦¼ì•ˆì— ê°ê°ì˜ 스프ë¼ì´íŠ¸ë¥¼ 잘 ë°°ì¹˜í•˜ê³ ì´ë¥¼ 올린 후 sub í…스ì³ë¥¼ 만들어 쓰는 ë°©ë²•ì´ ë¹„ë””ì˜¤ 메모리를 사용하는 íš¨ìœ¨ìƒ ë” ìœ ë¦¬í•©ë‹ˆë‹¤. ì•„ë§ˆë„ glSDLì€ ê°„ë‹¨ížˆ ê°€ì†ì„±ëŠ¥ì„ í…ŒìŠ¤íŠ¸í•˜ê¸° 위한 ìš©ë„외ì—는 ì‹¤ì œ ì™„ì„±ëœ ê²Œìž„ì„ ë§Œë“¤ê¸°ì—는 무리가 ìžˆì„ ê±°ë¼ ìƒê°í•©ë‹ˆë‹¤.
2 glSDLì˜ ë‚´ë¶€ 구조 요약 #
- glSDLì€ SDLì˜ ë¹„ë””ì˜¤ 백엔드로서 OpenGLì„ ì‚¬ìš©í•©ë‹ˆë‹¤.
- 하드웨어 ê°€ì†ì— 따른 성능향ìƒì„ 얻기위해 ì„œí”¼ìŠ¤ë“¤ì€ ë¸”ë¦¬íŠ¸ë˜ê¸°ì „ì— ëª¨ë‘ GL í…스ì³ë¡œ 변환ë©ë‹ˆë‹¤. (그러므로 ìˆ˜ì •í•˜ê±°ë‚˜ ìƒì„±í•˜ëŠ”ë° ìžˆì–´ì„œ ìƒë‹¹ížˆ ë§Žì€ ì‹¤í–‰ë¹„ìš©ì´ ë“니다) -> 그러므로 서피스 ë‚´ìš©ì„ ê³ ì¹˜ëŠ” ê²ƒì€ ìžì£¼ 하지 않는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.
- 사용하는 서피스 í¬ë©§ ë˜í•œ 어플리케ì´ì…˜ ì†ë„ì— ì˜í–¥ì„ 준다는 ì ë„ ì•Œì•„ë‘시기 ë°”ëžë‹ˆë‹¤.
3 ì°¸ê³ ì‚¬í• #
- 소프트웨어 서피스 : ë‹¤ìŒ ì¡°ê±´ì´ trueì¸ ì„œí”¼ìŠ¤ë¥¼ ë§í•©ë‹ˆë‹¤.
(surface->flags & SDL_HWSURFACE) == SDL_SWSURFACE
- 하드웨어 서피스 : ë‹¤ìŒ ì¡°ê±´ì´ trueì¸ ì„œí”¼ìŠ¤ë¥¼ ë§í•©ë‹ˆë‹¤.
(surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE
- glSDLìƒì—서 screenì€ ë¬´ì¡°ê»€ 하드웨어 서피스입니다.
4 비디오 초기화 #
하드웨어 ê°€ì†ì„ í•˜ë ¤ë©´ 서피스를 ìƒì„±í• 때 가급ì 하드웨어 서피스로 만드는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ë”블버í¼ë§ì„ 쓰는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.(깜박임 현ìƒë•Œë¬¸) 다ìŒê³¼ ê°™ì´ ì´ˆê¸°í™”í•˜ëŠ” ê²ƒì´ ìµœì„ ì˜ ë°©ë²•ìž…ë‹ˆë‹¤. (bpp로 0ì´ì™¸ì— 8, 15, 16, 24, 32ê°€ 가능합니다)
SDL_SetVideoMode(640, 480, 0, SDL_DOUBLEBUF);
5 하드웨어 서피스 사용하기 #
다ìŒê³¼ ê°™ì´ SDL_HWSURFACEì˜µì…˜ì„ ë„£ì–´ì„œ ìƒì„±í•œë‹¤.
surface = SDL_CreateRGBSurface(SDL_HWSURFACE, width, height, bpp, rmask, gmask, bmask, amask);소프트웨어 서피스를 사용하면 ë§Žì´ ëŠë ¤ì§‘니다. ê·¸ë¦¬ê³ ê°€ì†ì•ˆë˜ëŠ” 비디오 메모리 ì‚¬ìš©ì€ ì•ˆì“°ë‹ˆë§Œ 못합니다(ì°¨ë¼ë¦¬ 하드디스í¬ì—서 ì½ì–´ì„œ 바로 ë„우는게 ë¹ ë¥¼ ì •ë„입니다)
6 서피스 픽셀í¬ë©§ #
다ìŒê³¼ ê°™ì´ í˜„ìž¬ 비디오 픽셀í¬ë©§ì— 맞게 ë³€ê²½í• ìˆ˜ 있습니다.
SDL_Surface * tmp; tmp = SDL_DisplayFormat(surface); SDL_FreeSurface(surface); surface = tmp;ë˜ëŠ”
SDL_Surface * tmp; tmp = SDL_DisplayFormatAlpha(surface); SDL_FreeSurface(surface); surface = tmp;스프ë¼ì´íЏ ê°™ì€ ê²ƒì„ êµ¬í˜„í•˜ë ¤ë©´ ì´ë ‡ê²Œ ëª¨ë“ ì„œí”¼ìŠ¤ì˜ í”½ì…€í¬ë©§ì„ 맞춰주는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. (ê·¸ë ‡ì§€ 않으면 매번 업로드마다 í¬ë©§ë³€í™˜ì„ 해야하므로 ì†ë„ê°ì†Œìš”소가 ë©ë‹ˆë‹¤)
7 서피스 ì†ì„± #
- glSDLì—서는 RLE ì†ì„±ì„ 사용하지 않습니다. (ì´ê²ƒì„ 사용하면 ì—„ì² ëŠë ¤ì§€ë‹ˆ 주ì˜!)
- 서피스 ì „ì²´ ì•ŒíŒŒê°’ì€ ì–¸ì œë“ ì§€ ìžìœ ë¡ê²Œ 사용가능합니다.
- 픽셀당 알파ì ìš©ì€ ê·¸ë¦¬ ë§Žì€ ì‹¤í–‰ë¶€í•˜ë¥¼ 주지 않습니다(메모리 대ì—íì— ê´€ë ¨ëœ ë¶€í•˜ì¼ ë¿ìž…니다. RGB보다는 RGBAê°€ 25%ë” ë§Žì´ ì‚¬ìš©í•˜ê²Œ ë˜ê² ì£ )
- glSDLì—서 컬러키(투명색)ê¸°ëŠ¥ì€ í”½ì…€ë‹¹ 알파ì ìš©ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì—¬ 구현ë©ë‹ˆë‹¤.
- 알파 서피스와 비알파 ì„œí”¼ìŠ¤ê°„ì˜ ì„±ëŠ¥ì°¨ëŠ” ê±°ì˜ ì—†ìŠµë‹ˆë‹¤.
8 ìž ê¸ˆ/í•´ì œ #
- 하드웨어 ì„œí”¼ìŠ¤ì˜ ìž ê¸ˆ/í•´ì œëŠ” 피하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 하드웨어 ì„œí”¼ìŠ¤ì˜ ìž ê¸ˆ í’€ê¸°ê¸°ëŠ¥ì€ ëª¨ë“ GL í…스ì³ë¥¼ 재ìƒì„±í•˜ê³ ì´ë¥¼ 비디오 메모리로 업로드하는 ë‚´ìš©ì„ ë‹´ê³ ìžˆìŠµë‹ˆë‹¤.
- 하드웨어 ì„œí”¼ìŠ¤ì˜ ë‚´ìš©ë³€ê²½ì€ í”¼í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 하드웨어 서피스를 ìˆ˜ì •í•˜ëŠ” ê²ƒì€ ìž ê¸ˆ/í•´ì œ ìž‘ì—…ì„ ìˆ˜ë°˜í•˜ì—¬ì•¼ 하기 때문입니다. ì´ë•Œ 소프트웨어 서피스를 사용하는 ê²ƒë„ ì¢‹ì€ ë°©ë²•ì´ ì•„ë‹™ë‹ˆë‹¤(ë§¤í”„ë ˆìž„ë•Œë§ˆë‹¤ 소프트웨어 서피스를 ìˆ˜ì •í•˜ê³ ì´ë¥¼ blit하는 것ì´ë‚˜ 하드웨어 서피스를 ìˆ˜ì •í•˜ê³ blit하는거나 ê±°ì˜ ë¹„ìŠ·í•©ë‹ˆë‹¤) 그러므로 그냥 ëª¨ë‘ í•˜ë“œì›¨ì–´ 서피스ë¼ë¦¬ 처리하는 ê²ƒì´ ìµœì„ ìž…ë‹ˆë‹¤.
- 하드웨어 ì„œí”¼ìŠ¤ì˜ ë‚´ìš©ì„ ì½ì§€ 않는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. 아주 ìž‘ì€ í¬ê¸°ë¥¼ ì½ì–´ë„ í˜„ì €í•œ 효과가 나타납니다. (ì´ëŸ° ì´ìœ 로 마우스 커서를 ì—†ì• ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì§ì ‘ 스프ë¼ì´íŠ¸ë¡œ 구현해주는 ê²ƒë„ ì¢‹ì€ ë°©ë²•ìž…ë‹ˆë‹¤)
9 블리팅(blitting) #
glSDLì€ ê²Œìœ¼ë¥¸(lazy) 업로드 ë°©ì‹ì„ íƒí•˜ê³ 있습니다(즉, í•„ìš”í• ë•Œë§Œ ì—…ë¡œë“œí•˜ê³ ê·¸ ì´í›„ì—는 하지 않습니다. ë§¨ì²˜ìŒ blitë§Œ ëŠë¦¬ê³ ê·¸ ì´í›„ì—는 ë¹ ë¦…ë‹ˆë‹¤.) 그러므로 ë‹¤ìŒ ì‚¬í•ì„ ì£¼ì˜í•˜ëŠ” ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.
- 하드웨어 -> 소프트웨어 blit는 피하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ìš°ì„ í•˜ë“œì›¨ì–´ 서피스와 ë™ì¼í•œ 소프트웨어 서피스를 ë§Œë“¤ê³ ì´ë¥¼ blit하므로 가장 ëŠë¦° 방법ì´ë¼ê³ í• ìˆ˜ 있습니다.
- 소프트웨어 -> 하드웨어 blit ì—시 피하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.
- 비디오 서피스 -> 비디오 서피스외 다른 ì„œí”¼ìŠ¤ë¡œì˜ blit는 피하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.
- 요약하면 가급ì 소프트웨어->소프트웨어, 하드웨어->하드웨어 blitê°€ 가장 효율ì 입니다.
10 기타 주ì˜ì‚¬í• #
- OpenGL 드ë¼ì´ë²„를 해당 ì¹´ë“œì— ë§žëŠ” ê°€ì† ë“œë¼ì´ë²„로 설치하여야 합니다. ê·¸ë ‡ì§€ 않으면 ì¼ë°˜ 소프트웨어 모드를 사용하는 것보다 ëŠë¦´ìˆ˜ 있습니다.
- 서피스 ìƒì„±/ì†Œë©¸ì€ ë§¤ìš° ëŠë¦½ë‹ˆë‹¤. 즉, 게임 시작과 ë부분과 ê°™ì€ ë‹¨ê³„ì—서 몰아서 처리하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.









