ê³ í–¥ì´ëž€ ì˜ˆì „ì— ê·¸ê³³ì—서 ì‚´ì•˜ë˜ ì‚¬ëžŒë“¤ë¡œë¶€í„° 가장 ì‚¬ëž‘ì„ ë°›ëŠ” 듯. ―W.D.T.
2 머리글 #
- 현재 ë²„ì ¼ : 0.3
- Extensionì´ëž€ OpenGL 기본 í•¨ìˆ˜ì™¸ì— ê°€ì†ê¸° ì œìž‘íšŒì‚¬ë‚˜ intelê°™ì€ ê³³ì—서 ë‚˜ë¦„ëŒ€ë¡œì˜ ì•Œê³ ë¦¬ì¦˜ì„ ê°œë°œí•˜ì—¬ ê¸°ëŠ¥ì„ ì§€ì›í•˜ëŠ” í”ŒëŸ¬ê·¸ì¸ ê°™ì€ ê²ƒì„ ë§í•©ë‹ˆë‹¤. 그냥 코딩하면 ë¬¼ë¡ ì‚¬ìš©í• ìˆ˜ 없으므로 지금 설치ë˜ì–´ìžˆëŠ” 시스템 하드웨어(특히 그래픽 카드)ê°€ ì§€ì›í•˜ëŠ”ì§€ 여부를 알아내야 합니다. 다ìŒì€ OpenGL사ì´íЏì—서 찾아 ì˜ì—한 내용입니다. (ì œê°€ ì˜ì–´ì‹¤ë ¥ì´ íƒì›”하지 않다는 ê²ƒì„ ì—¼ë‘ì— ë‘시길...B) 몇몇 ë¬¸ìž¥ì€ ì œê°€ ìž„ì˜ë¡œ ì˜ì—했으므로 번ì—ê¸€ì— ëŒ€í•´ ë§˜ì— ì•ˆë“œì‹œë©´ ì´ë©œì£¼ì‹œë©´ ìˆ˜ì •í•˜ê² ìŠµë‹ˆë‹¤.)
- ì›ë¬¸ : http://oss.sgi.com/projects/ogl-sample/registry/doc/rules.html#using
3 Extensionì˜ ì‚¬ìš© #
- íŠ¹ì • OpenGL extensionë“¤ì„ ì‚¬ìš©í•˜ê³ ìží•˜ëŠ” í”„ë¡œê·¸ëž˜ë¨¸ë“¤ì€ ì»´íŒŒì¼ ì •ì˜ìš”소들 (extensionì„ ì§€ì›í•˜ëŠ” 회사ì—서 ì œê³µí•œ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ì§€ì›ë˜ëŠ”ì§€ 여부를 알아내기위해서)ê³¼ glGetString() í•¨ìˆ˜ì— ì˜í•´ 반환ë˜ëŠ” extension 문ìžì—´(ëžœë”ë§ì‹œ ì§€ì›ë˜ëŠ”ì§€ 여부를 알기위해서) ì–‘ìª½ì„ ê²€ì‚¬í•´ì•¼ë§Œ 합니다. 윈ë„ìš° ìƒì—서는 extensionì— ê´€ë ¨ëœ í•¨ìˆ˜ë“¤ì„ ì¼ë°˜ì 으로 ë§í¬ 실행시ì—는 ì •ì˜ë˜ì§€ ì•Šê³ , wglGetProcAddress()함수를 호출하여 확장 APIë“¤ì˜ í•¨ìˆ˜ í¬ì¸í„°ë“¤ì„ 얻는 ë°©ë²•ì„ ì·¨í•©ë‹ˆë‹¤.
- 예를 들ìžë©´, ë‹¤ìŒ ì½”ë“œëŠ” 현재 ì‹œìŠ¤í…œì˜ ëžœë”러가 "GL_EXT_new_extension"ì´ë¼ 불리는 OpenGL extensionì„ ì§€ì›í•˜ëŠ”ì§€ 여부를 검사하는 코드입니다.
static GLboolean CheckExtension(char *extName, const char *extString) { /* ** extensionë“¤ì´ ë‹´ê¸´ 문ìžì—´ë‚´ì—서 extNameì„ ì°¾ëŠ”ë‹¤. */ char *p = (char *)extString; char *end; int extNameLen; extNameLen = strlen(extName); end = p + strlen(p); while (p < end) { int n = strcspn(p, " "); if ((extNameLen == n) && (strncmp(extName, p, n) == 0)) { return GL_TRUE; } p += (n + 1); } return GL_FALSE; }const GLubyte *ext_string; int new_ext_supported = GL_FALSE; if (CheckExtension("GL_EXT_new_extension", glGetString(GL_EXTENSIONS))) new_ext_supported = GL_TRUE;
- ë§Œì¼ ëžœë”러가 주어진 extensionì„ ì§€ì›í•œë‹¤ë©´, 실행중 ê·¸ ê²ƒì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì€ ì•ˆì „í•©ë‹ˆë‹¤. 컴파ì¼ì´ 실행ë 때ì—는 ë§í¬í•˜ë ¤ëŠ” ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ extensionì— ê´€ë ¨ëœ í•¨ìˆ˜ë¥¼ ì‹ë³„ë„ë¡ ì •ì˜í•˜ëŠ” ê²ƒì´ í•„ìš”í•©ë‹ˆë‹¤. 예를 들면,
#ifdef GL_EXT_new_extension if (new_ext_supported) glNewExtensionEXT() #endif - 윈ë„우즈 OpenGLì—서는 extensionì€ ì¼ë°˜ì 으로 ì •ì 으로 ë§í¬ë˜ê¸°ë³´ë‹¤ëŠ” 디바ì´ìФ 드ë¼ì´ë²„로부터 ë™ì 으로 로딩ë©ë‹ˆë‹¤. extensionì—서 ì œê³µí•˜ëŠ”APIë“¤ì˜ í•¨ìˆ˜ í¬ì¸í„°ë“¤ì€ wglGetProcAddress()함수를 사용하여 ì–»ê³ , extensionì„ ì‚¬ìš©í•˜ê¸° 위해 ê·¸ í•¨ìˆ˜ë“¤ì„ ì‚¬ìš©í•˜ë©´ ë©ë‹ˆë‹¤. 예를 들면,
typedef void (WINAPI *PFNGLNEWEXTENSIONEXTPROC)(); PFNGLNEWEXTENSIONEXTPROC *glNewExtensionEXT = NULL;
/* 함수í¬ì¸í„°ë¥¼ ì„ ì–¸í•œ í›„ì— ì´ê²ƒì„ 한번 실행한다. */ #ifdef GL_EXT_new_extension if (new_ext_supported) glNewExtensionEXT = (PFNGLNEWEXTENSIONEXTPROC) wglGetProcAddress("glNewExtensionEXT"); #endif/* extensionì„ í˜¸ì¶œí• ë•ŒëŠ” ì´ê²ƒì„ 사용한다. */ #ifdef GL_EXT_new_extension if (new_ext_supported) glNewExtensionEXT(); #endif
4 마치며 #
- 번ì—ì´ ì¢€ ê·¸ë ‡ì£ ? ì–´ëŠì •ë„ ê±´ë„ˆë›´ ê²ƒë„ ìžˆêµ¬... 짬짬히 ê³ ì³ë†“ê² ìŠµë‹ˆë‹¤. ìš”ì ì •ë¦¬í•˜ìžë©´ glGetString()ê³¼ wglGetProcAddress()함수를 사용하여 함수í¬ì¸í„°ë¥¼ ì–»ê³ ì •ì˜í•´ì„œ 사용하면 ëœë‹¤ëŠ” 뜻입니다.
http://www.uni-karlsruhe.de/~uli2/ - ì—¬ê¸°ì— í˜„ìž¬ê¹Œì§€ 나온 extension ëª¨ë‘ í—¤ë”í™”ì¼ê³¼ libí™”ì¼ë¡œ 만들어 ë†“ì€ í™”ì¼ì´ 있습니다.
여기를 눌러 다운받으시면 ë©ë‹ˆë‹¤. 하지만, ê·¸ì € extensionì— ëŒ€í•œ ì„ ì–¸ë§Œ 있으니 해당 함수를 사용하는 ê²ƒì€ ê° extensionì„ ì°¸ê³ í•´ì•¼í•©ë‹ˆë‹¤.








