Glad: 헀더 파일 μ „μš© 라이브러리 생성 지원

에 λ§Œλ“  2016λ…„ 06μ›” 01일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: Dav1dde/glad

GLAD에 λŒ€ν•œ 헀더 파일 μ „μš© 생성에 λŒ€ν•œ 지원을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚΄ 말은, stb 라이브러리 와 μœ μ‚¬ν•©λ‹ˆλ‹€.

단지 glad.hλ₯Ό ν”„λ‘œμ νŠΈμ— λ“œλ‘­ν•˜κ³  νŒŒμ΄ν”„λΌμΈ μˆ˜μ •μ„ ν”Όν•˜λŠ” 것이 맀우 μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

μ—¬κΈ° μ œκ°€ μž‘μ—… 쀑인 μƒ˜ν”Œμ΄ μžˆμŠ΅λ‹ˆλ‹€. GLAD 헀더 파일 μ „μš©μ„ 직접 μˆ˜λ™μœΌλ‘œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

enhancement glad2

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

참고둜, glad2 λΈŒλžœμΉ˜λŠ” 이제 헀더 μ „μš© μ˜΅μ…˜μ„ μ§€μ›ν•©λ‹ˆλ‹€!

python -m glad --out-path=build --api="gl:core=" --extensions= c --header-only

λͺ¨λ“  15 λŒ“κΈ€

쒋은 아이디어라고 μƒκ°ν•©λ‹ˆλ‹€. λ‚΄ μ½”λ“œμ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„κ³Ό ν•¨κ»˜ 기쁜 νŒŒμΌμ„ λ„£κ³  μ‹Άμ§€λŠ” μ•Šμ§€λ§Œ ν˜„μž¬λ‘œμ„œλŠ” λŒ€μ•ˆμ΄ λ„ˆλ¬΄ λ³΅μž‘ν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ‹¨μˆœν•¨μ΄ (GLEW와 같이) κ·Έ 이상을 μ„œκ²Œ λ§Œλ“œλŠ” 기쁨의 ν•œ 가지 νŠΉμ§•μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. κ°€μ Έμ˜¬ 헀더 파일만 있으면 훨씬 더 κ°„λ‹¨ν•˜κ³  더 쒋을 κ²ƒμž…λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ @raysan5 κ°€ λ§Œλ“  전체 νŒŒμΌμ„ μ»΄νŒŒμΌν•˜λŠ” 데 μ‹œκ°„μ΄ κ±Έλ¦°λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 특히 μ—¬λŸ¬ νŒŒμΌμ— ν¬ν•¨λ˜μ–΄ μžˆλŠ” 경우 λ”μš± κ·Έλ ‡μŠ΅λ‹ˆλ‹€. κ½€ 자주 λ‚΄ 헀더 νŒŒμΌμ— λŒ€ν•΄ μ„ μ–Έλœ GLuint와 같은 것을 μ›ν•©λ‹ˆλ‹€. μ•„λ§ˆλ„ 무료 glad_types.h κ°€ 쒋을 κ²ƒμž…λ‹ˆλ‹€. 개인적으둜 λ§Žμ€ 파일이 μ•„λ‹ˆλΌ .c νŒŒμΌμ— λŒ€ν•΄ κ±±μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@Shimmen μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” OpenGL 3.3 μ½”μ–΄ ν”„λ‘œν•„ 기쁜 버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ›λž˜ glad.h λŠ” 이미 ~14K LoC이고 glad.c λŠ” ~7.6K LoCμ˜€μŠ΅λ‹ˆλ‹€. 일단 ν†΅ν•©λ˜λ©΄ glad.h λŠ” ~22K LoC이고 GCC 4.7.2λ₯Ό μ‚¬μš©ν•œ 컴파일 μ‹œκ°„μ€ λ‚΄ 개발 μ›Œν¬μŠ€ν…Œμ΄μ…˜ μ—μ„œ μ•½ 2-3μ΄ˆκ°€ κ±Έλ¦½λ‹ˆλ‹€.

ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό ν•  μƒκ°μž…λ‹ˆλ‹€. 헀더 파일만 μžˆλŠ” μ˜΅μ…˜μ΄ 되길 μ›ν•˜κ³  기본값이어야 ν•©λ‹ˆκΉŒ?

이봐, ꡉμž₯ν•΄!

이전에 헀더 파일이 정말 μ»€μ„œ 컴파일 ν”„λ‘œμ„ΈμŠ€κ°€ μƒλ‹Ήνžˆ 느렀질 것이라고 μ§€μ ν–ˆλ“―μ΄ ν•΄λ‹Ή μ˜΅μ…˜μ΄ μ˜λ―Έκ°€ μžˆλŠ”μ§€ μ—¬μ „νžˆ μƒκ°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 헀더λ₯Ό μ—¬λŸ¬ 헀더 파일둜 λΆ„ν• ν•˜λŠ” 것이 쒋은 생각인지도 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

그런 λ‹€μŒ λ‹€μ‹œ μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λŠ” 것이 λ¬Έμ œκ°€ λ˜μ§€λŠ” μ•Šκ² μ§€λ§Œ 헀더 μ „μš© μ˜΅μ…˜μ€ 기본값이 μ•„λ‹™λ‹ˆλ‹€.

μ›Ή 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„μš”ν•œ ν™•μž₯(κΈ°λ³Έ OpenGL 3.3 Core)을 μ„ νƒν•œ λ‹€μŒ 헀더 μ „μš© νŒŒμΌμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ•½ 5K LoCμ˜€κ³  λ°€λ¦¬μ΄ˆ 내에 μ»΄νŒŒμΌλ©λ‹ˆλ‹€(지연을 감지할 수 μ—†μŒ).

참고둜, glad2 λΈŒλžœμΉ˜λŠ” 이제 헀더 μ „μš© μ˜΅μ…˜μ„ μ§€μ›ν•©λ‹ˆλ‹€!

python -m glad --out-path=build --api="gl:core=" --extensions= c --header-only

μ΅œμ‹  μ „μ²˜λ¦¬κΈ°λŠ” 맀우 λΉ λ₯΄λ―€λ‘œ GLAD_IMPLEMENTATION κ°€ μ •μ˜λ˜μ§€ μ•ŠμœΌλ©΄ μ„±λŠ₯에 거의 영ν–₯이 μ—†μŠ΅λ‹ˆλ‹€.

ν›Œλ₯­ν•œ μΆ”κ°€ @Dav1dde! μ—…λ°μ΄νŠΈ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€! :)

이 κΈ°λŠ₯이 μ›Ήμ‚¬μ΄νŠΈμ— μ–Έμ œ μΆœμ‹œλ  것인지 λ˜λŠ” 버전 2κ°€ κ³΅μ‹μ μœΌλ‘œ μΆœμ‹œλ  것인지에 λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

도착 μ˜ˆμ • μ‹œκ°„μ΄ μ—†μŠ΅λ‹ˆλ‹€.

가지고 놀고 μ‹Άλ‹€λ©΄ glad2 λΈŒλžœμΉ˜κ°€ μž‘λ™ν•˜λŠ” C-Codeλ₯Ό 생성해야 ν•©λ‹ˆλ‹€. APIκ°€ μ•½κ°„ 변경됨: gladLoadGL λŠ” GL μ»¨ν…μŠ€νŠΈλ₯Ό λ‘œλ“œν•˜λŠ” μœ μΌν•œ 방법이며 항상 λ‘œλ” ν•¨μˆ˜λ₯Ό 전달해야 ν•©λ‹ˆλ‹€.

이것이 μ›Ήμ‚¬μ΄νŠΈμ— μ–Έμ œ 올라올 수 μžˆλŠ”μ§€μ— λŒ€ν•œ μƒνƒœ μ—…λ°μ΄νŠΈλ₯Ό 받을 수 있기λ₯Ό λ°”λžμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό μ’‹μ•„ν•œλ‹€! λ‚˜λŠ” 그것이 ν›Œλ₯­ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€! ν—€λ”λ§Œ μ§€μ›ν•˜λ©΄ μ™„λ²½ν•©λ‹ˆλ‹€. 감사 ν•΄μš”!

http://glad2.dav1d.deλŠ” ν˜„μž¬ glad2 브랜치λ₯Ό ν˜ΈμŠ€νŒ…ν•˜λ©° μž‘λ™ν•˜μ§€λ§Œ κ³ μ • APIκ°€ μ—†μŠ΅λ‹ˆλ‹€. Glad2λŠ” ν—€λ”λ§Œ μ§€μ›ν•©λ‹ˆλ‹€. 버그λ₯Ό 찾으면 기꺼이 μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것과 κ΄€λ ¨ν•˜μ—¬ λͺ‡ 가지 문제λ₯Ό λ°œκ²¬ν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  1. 헀더 κ°€λ“œ __glad_gl_h_ λŠ” glad.h 뢀뢄이 μ•„λ‹ˆλΌ 파일 λμ—μ„œ λ‹«μ•„μ•Ό ν•©λ‹ˆλ‹€.
  2. λͺ¨λ“  ν•¨μˆ˜λ₯Ό inline 둜 μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ ODR을 κΉ¨λŠ” κ²ƒμž…λ‹ˆλ‹€. 즉, 두 번 이상 포함할 수 μ—†μŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€. ν—€λ”λŠ” μ—¬μ „νžˆ μ•½κ°„μ˜ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

@elmindreda λŠ” μ €λ₯Ό κ°€λ¦¬μΌ°μŠ΅λ‹ˆλ‹€(μžŠμ§€ μ•ŠκΈ° μœ„ν•΄): https://github.com/nothings/stb/blob/master/docs/stb_howto.txt#L9

Glad2μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰