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
전체 (654)
GIS 개발 (200)
프로그래밍 (254)
스치는 생각들 (140)
번역 또는 집필 (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 BlackPoint-Xr GIS Korea Design Graphic OpenGL ES GPS PSP OOD XML XGE FingerEyes-Xr GeoService-Xr Oracle SolidCube 도로명 검색 TMS WKT 정규표현식 GeoService BaseMap-Xr
 Calendar
«   2014/09   »
  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
[FingerEyes-Xr for HTML...
[JavaScript] UTF-8 코드...
[JavaScript] String을 X...
추천 모바일 게임, Slay
[BlackPoint-Xr] 다양한 ...
 Recent Comments
9월 2일까지 서비스를 잠...
김형준 - 08/29
안녕하세요. 도로명을 좌...
jw - 08/29
답변 감사합니다~
glenn - 08/12
현재 제공되고 있는 주소...
김형준 - 08/11
안녕하세요. 이용 중에 ...
glenn - 08/10
헐. 이렇게 간단한 방법...
wow - 08/03
생성된 txt 파일에 attri...
Dip2K - 07/29
api를 사용하는 웹사이트...
Dip2K - 07/29
좋은 포스팅 감사합니다....
김김김 - 07/29
개발자님, 유용한 자료 ...
이오용 - 07/29
폴리곤 사이에 빈틈이 생...
함형건 - 07/26
제 생각으로는 폴리곤을 ...
김형준 - 07/26
올려주신 시군구 행정경...
함형건 - 07/25
저도 avira를 사용하는데...
DevP - 07/21
이 페이지를 열었더니 키...
virus - 07/20
안산시를 추출하기 위해 ...
Dip2K - 07/16
안행부에서 제공되는 데...
Dip2K - 07/11
혹시 법정동 말고 행정동...
함형건 - 07/11
혹시 법정동 말고 행정동...
함형건 - 07/11
정보 감사합니다. 질문 ...
까마귀 - 07/10
 Archive
2014/08
2014/07
2014/06
 Link Site
GADM
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OnSpatial
OSGeo 한국 지부
Paul Bourke Site
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
대한측량협회
류광님의 블로그
비즈GIS
지오서비스(GeoService)
 Visitor Statistics
Total : 3121373
Today : 548
Yesterday : 3385
태터툴즈 배너
rss