G.I.S Developer, 개발자 김형준(Dip2K) -
   G.I.S Developer, 개발자 김형준(Dip2K)  
Front Page
Notice | E-Mail | Admin | Write Article   
 
2007/08/16 23:58 2007/08/16 23:58
OpenGL Shader - 7
GLSL을 위한 OpenGL 설정 - 프로그램 만들기
원문 : http://www.lighthouse3d.com/opengl/glsl/index.php?oglprogram

다음 그림은 쉐이더 프로그램을 준비하고 실행해가는데 필요한 함수 호출 단계이다.

첫번째 단계(glCreateProgram)는 프로그램(쉐이더에 대한) 컨테이너를 위한 객체를 생성이다. 이 함수는 컨테이너에 대한 핸들을 반환한다. OpenGL 2.0 문법은 아래와 같다.

GLuint glCreateProgram(void);

ARB 확장 형태의 문법은 아래와 같다.

GLhandleARB glCreateProgramObjectARB(void);

원하는 만큼의 프로그램 컨테이너를 생성할 수 있다. 렌더링 시에 원하는 쉐이더 프로그램으로 번갈아가며 교체할 수 있고, OpenGL에서 기본적으로 제공하는 고정기능(Fixed Functionality)으로 돌아갈 수도 있다. 예를들어서, 반사 쉐이더를 이용해 주전자를 그리고, 동시에 직육면체 큐브는 OpenGL의 원래 기능인, 고정기능으로 그릴 수 있다.

다음 단계는 이전 섹션에서 생성한 쉐이더를 프로그램 컨테이너에 붙이는 glAttachShader이다. 쉐이더는 이 시점에서 컴파일될 필요가 없고, 이 단계까지는 쉐이더 소스 코드를 가지지 않아도 된다. 쉐이더를 프로그램에 붙어기 위해 필요한 것은 오로지 쉐이더 컨테이너이다.

쉐이더를 프로그램에 붙이기 위한 OpenGL 2.0 함수의 형태는 다음과 같다.

void glAttachShader(GLuint program, GLuint shader);
Parameters:
  Program - 프로그램 컨테이너 핸들
  shader - 프로그램 컨테이너에 붙이고자 하는 쉐이더의 핸들

ARB 확장에 대한 함수 형태는 다음과 같다.

void glAttachObjectARB(GLhandleARB program, GLhandleARB shader);
Parameters:
  Program - 프로그램 컨테이너 핸들
  shader -  프로그램 컨테이너에 붙이고자 하는 쉐이더의 핸들

만약, 프로그램에 버텍스와 프레그먼트 쉐이더 두개를 동시에 붙이고자 할때가 있다. 같은 프로그램에 붙이고자 하는 같은 종류의 많은 쉐이더를 가질 수 있는데, 이것은 마치 C언어로 작성된 프로그램이 많음 모듈을 가질 수 있는 것과 같은 경우이다. C언에서와 마찬가지로 각각의 쉐이더에 대해서 딱 하나의 main 함수를 가질 수 있다.

하나의 쉐이더를 여러개의 프로그램에 붙일 수 있는데, 예를들어서 동일한 버텍스 쉐이더를 여러개의 프로그램에서 사용하는 것이다.

마지막 단계는 프로그램을 링크하는 것이다. 이 단계를 수행하기 위해서 세이더는 이전 섹션에서 설명했던 것처럼 반드시 컴파일 되어져 있어야 한다. 이렇게 컴파일 되어져 있는 쉐이더를 링크해주는 OpenGL 2.0 함수는 다음과 같다.

void glLinkProgram(GLuint program);
Parameters:
  program - 프로그램 컨테이너의 핸들

위의 함수를 ARB 확장 형태로 살펴보면 다음과 같다.

void glLinkProgramARB(GLhandleARB program);
Parameters:
  program - 프로그램 컨테이너의 핸들

링크가 된 후에, 쉐이더의 소스는 수정될 수 있고 프로그램에 영향을 미치지 않고 다시 컴파일 되어 진다.

위의 그림에서 처럼, 프로그램이 링크되어지면 이제 실제로 프로그램은 사용할 수 있게되는데, 이것은 ARB 확장함수인 glUseProgramObjectARB나 OpenGL 2.0인 glUseProgram을 이용한다. 각 프로그램은 핸들에 할당되어져 있고, 하드웨어가 허락하는 한, 우리가 사용하길 원하는 만큼 프로그램을 링크해 놓고 사용할 수 있다.

실제 컴파일되어진 쉐이더 프로그램을 사용하는 OpenGL 2.0 형태의 함수는 다음과 같다.

void glUseProgram(GLuint prog)
Parameters:
  prog - 사용하길 원하는 프로그램의 핸들이며 고정기능으로 복귀할 경우 0

ARB 확장의 형태는 다음과 같다.

void glUseProgramObjectARB(GLhandleARB prog);
Parameters:
  prog - 사용하길 원하는 프로그램의 핸들이며 고정기능으로 복귀할 경우 0

만약 프로그램이 사용중이고, 다시 링크되어진다면, 자동으로 수정된 내용이 사용되도록 설정되므로, 이 함수를 다시 호출할 필요가 없다. 그리고 OpenGL의 고정기능으로 복귀할 경우에 prog 인자에 0(Zero)을 넣고 호출하면 된다.
Tag : ,
Track this back : 이 글에는 트랙백을 보낼 수 없습니다
BLOG main image
GIS Developer, 김형준 / (주)지오서비스 서비스개발팀 팀장 / '모바일 3D 그래픽스' 번역 및 출판 / '모바일 GIS 프로그래밍' 집필 및 출판
 Notice
 Category
전체 (628)
GIS 개발 (199)
프로그래밍 (248)
스치는 생각들 (138)
번역 또는 집필 (4)
 TAGS
GIS Xr OpenGL Shader BlackPoint FingerEyes Algorithm Java DuraMap Map Engine Android WPF ActionScript ArcObjects ArcGIS 안드로이드 C++ C# DuraMap-Xr JavaScript Flex template OrangeMap WPF 3D Service Pattern HTML5 WebService .NET GIS Korea Design Graphic OpenGL ES GPS PSP OOD FingerEyes-Xr XML XGE Tool GeoService-Xr Oracle SolidCube 도로명 검색 TMS WKT 정규표현식 GeoService BaseMap-Xr
 Calendar
«   2014/04   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
 Recent Entries
안드로이드에서 CAD, PDF...
[GIS] 자바 기반의 오픈...
[GIS] 모바일 GIS엔진, B...
Oracle Spatial Geometry...
[GIS] 듀라맵(DuraMap) ... (6)
 Recent Comments
새로운 photography 비즈...
интернет продвижение - 04/19
새로운 photography 비즈...
интернет продвижение - 04/19
관리자만 볼 수 있는 댓...
비밀방문자 - 04/18
관리자만 볼 수 있는 댓...
비밀방문자 - 04/18
관리자만 볼 수 있는 댓...
비밀방문자 - 04/16
'다사랑약국 광주광역시 ...
김형준 - 04/14
답변 감사합니다. 3/4/5 ...
김대진 - 04/10
안녕하세요~ 콩나물은 말...
Dip2K - 04/04
안녕하세요~ 1. 전체 ...
Dip2K - 04/04
안녕하세요. 올려주신 도...
김대진 - 04/04
안녕하세요. 많은 정보 ...
srk - 04/03
CSV 파일이 다른 프로세...
김형준 - 04/03
안녕하세요. 먼저 이런 ...
lonby - 04/02
좋은 예제 감사합니다 ^^
마니아 - 03/09
아! 감사합니다.
student - 02/13
관리자만 볼 수 있는 댓...
비밀방문자 - 02/13
네, 변환이 잘되었다니 ...
Dip2K - 02/13
좋은 아이디어라고 생각...
Dip2K - 02/10
개발자님, 혹시 이것도 ...
LOY - 02/09
새주소에는 건물만 해당...
Dip2K - 02/06
 Archive
2014/04
2014/03
2014/02
 Link Site
GADM
GIS Application Cafe
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OnSpatial
OSGeo 한국 지부
Paul Bourke Site
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
대한측량협회
류광님의 블로그
비즈GIS
지오서비스(GeoService)
 Visitor Statistics
Total : 2771133
Today : 512
Yesterday : 3073
태터툴즈 배너
rss