Friday, April 10, 2015

Cg vs GLSL 비교

현재 GLSL이 나온 상태에서 Cg의 장점은 무엇인가?

장점
1)Cg자체가 OpenGL, Direct3D 멀티 플랫폼 API이다. Direct3D도 지원하기 때문에 Direct3D에서 HLSL대신에 Cg를 사용해도 된다.

2)Cg는 문법이 HLSL과 동일하므로 MS의 예제에서도 많은 것을 공유할 수 있으다. 특히 멀티 플랫폼(OpenGL, Direct3D)시에 코드를 공유할 수 있다. 게다가 Effect파일 포맷인 fx도 CgFX, HLSL Effect끼리 호환된다는 것은 엄청난 장점이다. 1)번 장점에서 연속 되는 장점이다.

3)Cg는 어셈블리 셰이더로 컴파일 해서 그 결과를 어셈블리로 떨어뜨려 주기 때문에 어셈블리 셰이더를 한번 더 최적화가 가능하다.

4)GLSL이 지원이 안되는 구형 VGA에서는 Cg만 지원이 되는 경우가 있다. 이는 Cg는 OpenGL 익스텐션에서 Cg를 지원해야 되는 것이 아니라 어셈블리 셰이더만 지원이 되면 Cg 라이브러리에서 하이레벨 언어를 처리하므로 가능한 일이다. 3)번 장점에서 연속되는 장점이다.
e.g.)GLSL이 지원되려면
GL_ARB_vertex_shader, GL_ARG_fragment_shader이 필요하다.

4)NVIDIA인 경우 OpenGL에서 NVIDIA 특화 익스텐션을 사용함으로서 NVIDIA 부가기능을 사용할 수 있다. Profile 선택시 NVIDIA의 최신 버전 익스텐션 프로파일을 선택하면 가능하다.
e.g.)NVIDIA 최신셰이더의 예
GL_NV_vertex_program*

5)GLSL은 CgFX(Effect 포맷)가 없다.

단점
1)현재는 GLSL이 OpenGL 표준이다.
두말할 필요없이 새로 배우는 사람들은, 특히 OpenGL only유저들은 GLSL을 배우고 있다.

2)GLSL은 부가 API가 필요가 없지만, Cg는 DLL을 가지고 다녀야 한다.(부가적인 라이브러리가 필요하다)
GLSL은 이미 표준이므로 OpenGL 익스텐션의 일부이므로 Cg Toolkit과 같은 부가적인 라이브러리가 필요가 없다.

3)OpenGL ES지원이 미약하다.
Cg를 임베디드 버전인 OpenGL ES에서 사용하려면 수고가 뒤따른다.

No comments:

Post a Comment