입력모드
- 메저와 트리거
-
메저(Measure): 응용프로그램에게 전달되는 입력값
-
트리거(Trigger): 전달하라는 신호
-
예)
DIR <ENTER>
마우스 좌표와 클릭
선택된 메뉴 아이디와 클릭
- 메저 프로세스
- 운영체제 초기화시에 실행
- 항상 시스템 버퍼에 메저값이 저장되어 있음.
더보기
- 입력 장치와 응용 프로그램 사이에 어떤 방법으로 상호 작용이 일어나는지에 따라서 입력 모드(Input Modes)를 나눔.
- 메저(측정값, Measure) : 입력 장치가 응용 프로그램에 넘겨주는 값.
- 트리거(전달 신호, Trigger) : 메저를 가져가라는 신호로, 일종의 방아쇠 (Trigger)를 당기는 행위.
- 메저 프로세스 (Measure Process) : 메저를 인식하여 저장하는 과정으로서 일반적으로 장치를 초기화 (Initialization)할 때 실행되기 시작함.
이러한 메저 프로세스와 트리거와의 관계를 기준으로 입력 모드를 세 가지로 구분할 수 있음.
리퀘스트 모드
-
프로그램이 실행 중 메저를 요구
-
트리거가 일어날 때까지 대기상태
-
Request_Locator(Device_ID, &Measure);
-
Device_ID 필드에 의해 물리적 입력장비 제어
-
더보기
- 리퀘스트 모드(Request Mode)는 프로그램이 실행 중에 메저를 요구하는 방식임.
- 그림과 같이 프로그램이 메저 프로세스에 값을 요구함. 메저 프로세스는 자신이 인식한 메저 값을 프로그램에 전달함. 단, 이러한 전달은 트리거 신호가 프레세서로부터 자신에게 들어오는 순간에 이루어짐.
Request_Locator (Device_ID, &Measure);
- 리퀘스트 모드를 적용하기 위해서는 위 명령어를 사용함. 이 명령어는 리퀘스트 모드를 사용하여 논리적 입력 장치인 좌표 입력기(Locator)로부터 메저를 가져오라는 것임. 또 가져온 메저를 메저 변수에 저장하라는 것. Device_ID는 물리적 장치의 아이디를 말함. 이를 바꿈으로써 물리적 입력 장치를 자유롭게 변경 가능.
- 논리적 장치와 물리적 장치를 분리함으로써 주어진 논리적 입력 작업에 사용되는 물리적 장치를 쉽게 변경할 수 있음.
샘플 모드
- 샘플 모드 또는 직접 모드
- 사용자 트리거가 불필요
-
sample_Locator(Device_ID, &Measure);
-
이미 필요한 메저가 준비된 상태
-
물체선택 → 회전 메뉴 선택
-
cf. 회전 메뉴 선택 → 물체선택: 리퀘스트 모드
-
더보기
- 샘플 모드(Sample Mode) 또는 직접 모드(Immediate Mode)라고도 부르는 이 방식에서는 사용자 트리거가 불필요함.
- 그림과 같이 프로그램이 메저를 요구하면 메저 프로세서는 무조건 현재의 메저를 제공함. 따라서 사용자로서는 프로그램의 해당 함수가 실행되기 전에 이미 필요한 메저 데이터를 입력한 상태여야 함.
- 비유) 타동사가 먼저 나오고 목적어를 물어보는 것이 리퀘스트 모드, 목적어를 미리 지정하고 타동사를 불러내는 것이 샘플 모드
Sample_Locator (Device_ID, &Measure);
이벤트 모드
- 이벤트 모드
- 사용자가 입력 선택.
- cf. 리퀘스트 / 샘플 모드 : 프로그램이 주도권
- 이벤트 레코드 : 이벤트 타입, 장치 아이디, 메저
- 응용 프로그램은 주기적으로 이벤트 큐를 검사
- 드라이버에게 이벤트 리퀘스트.
- 드라이버가 큐 프런트 레코드를 전달
- 큐가 비어있으면 응용 프로그램은 다른 일을 수행
더보기
- 리퀘스트나 샘플 모드에서는 프로그램이 Device_ID로 지정한 물리적 장치 이외의 어떤 입력 장치로부터의 입력도 무시됨. 바꿔 말하면 사용자로서는 프로그램이 실행 중에 요구하는 장치에서만 입력을 행사할 수 있음.
- 이벤트 모드 (Event Mode)에서는 사용자가 선택한 입력 장치가 우선권을 쥠. 아무 때나 사용자가 임의로 선택한 입력 장치를 사용하여 입력 데이터를 프로그램에 전달할 수 있고, 프로그램은 이러한 요구에 맞추어 해당 작업을 수행해야 함. 이 경우 입력 장치가 트리거 되는 순간 하나의 이벤트 (사건, Event)가 발생한 것으로 봄.
- 이벤트가 발생하면 메저가 해당 입력 장치의 아이디와 함께 프로그램에 전달되어야 함. 그러나 입력 장치별로 여러 개의 이벤트가 발생하기 때문에 이를 이벤트가 발생한 순서대로 순차적으로 처리하기 위해서는 그림과 같은 이벤트 큐(Event Queue)를 사용해야 함.
- 이벤트 모드를 사용하는 시스템을 이벤트 구동 시스템 (Event-Driven System)이라 함. 그림의 마우스, 키보드, 트랙 볼에 각각 이벤트를 발생시키면 발생 순서대로 이벤트 레코드 (Event Record)가 이벤트 큐(Event Queue)에 삽입됨. 이벤트 레코드는 이벤트 타입, 이벤트를 발생시킨 장치의 아이디, 메저 등으로 구성됨.
- 응용 프로그램은 주기적으로 이벤트 큐를 검사함. 그림처럼 응용 프로그램이 드라이버 (Device Driver, Device Manager) 프로그램에게 이벤트 리퀘스트 (Event Request)를 보내는 형식으로 진행됨. 드라이버로서는 만약 큐가 비어 있지 않으면 큐 프런트 (Queue Front) 레코드를 응용 프로그램에 전달함. 만약 큐가 비어 있으면 응용 프로그램은 새로운 레코드가 들어올 때까지 기다리거나 다른 일을 수행함.
- 어떤 장치로부터 이벤트가 발생하여 해당 정보가 이벤트 큐에 놓이는 과정은 응용 프로그램과는 전혀 무관하게 돌아감. 즉, 응용 프로그램이 어떠한 작업을 수행 중이더라도 이와 완전히 동시에 외부 입력 장치로부터 발생한 이벤트 정보는 이벤트 큐에 쌓이게 됨.
콜백 함수
- 응용 프로그램 구조
Initialize Input Devices;
do
{ if (There Is an Event on the Event Queue)
switch (Event Type)
{
case Keyboard Event:
Get Event Record, Run Keyboard Callback
case Mouse Event:
Get Event Record, Run Mouse Callback
...
}
else Do Background Process
}
while (User Does Not Request Escape);
더보기
- 콜백 함수(Callback Function)는 응용 프로그램이 이벤트를 처리하는 방법을 말함. 이벤트 처리기 (Event Handler)라고도 불림. 이벤트 타입별로 프로그램이 수행해야 할 내용을 함수로 나타낸 것.
- glul 함수에서 해준다. 이벤트 타입에 따라 키보드 이벤트나 마우스 이벤트를 실행함.
- 각 이벤트가 왔을 때 수행해야 할 업무를 정의해놓은 게 call back 함수임.
- 처음 입력 장치를 초기화한 이후 모든 이벤트는 루프 문 (Loop Structure)에 의해 처리됨. 즉 사용자가 Escape 명령을 내리기 전까지는 이벤트 큐에 쌓인 레코드를 순차적으로 처리하는 과정이 반복됨. 만약 이벤트가 없다면 운영체제는 현재 실행되는 응용 프로그램이 아닌 여타의 백그라운드 작업을 실행하면서 새로운 이벤트가 큐에 들어왔는지를 주기적으로 검사함.
- 입력 장치 초기화, 이벤트 루프 시작, 이벤트 큐에 이벤트가 있는지 확인, 이벤트 타입을 확인하여 처리, 처리가 완료된 이벤트는 이벤트 큐에서 제거, 이벤트 처리가 끝나면 다시 이벤트 큐에 대해 확인, 백그라운드 프로세스 실행, 사용자가 종료를 요청할 때까지 루프 반복
'전공 > 컴퓨터 그래픽스' 카테고리의 다른 글
OpenGL 기본 틀 (4)_윈도우와 뷰포트 (0) | 2023.04.09 |
---|---|
OpenGL 기본 틀 (3)_OpenGL/GLUT 프로그램 (0) | 2023.04.09 |
OpenGL 기본 틀 (1)_그래픽 입력장치 (0) | 2023.04.09 |
OpenGL 소개 (0) | 2023.04.08 |
그래픽 컬러처리(3)_컬러 모드 (0) | 2023.04.07 |
댓글