2013년 3월 19일 화요일

Android app 이 3D 화면을 출력하는 과정 (surface flinger 와 EGL, GRALLOC)

app 이 surface flinger 에게 그릴 공간을 달라고 한다.

surface flinger 가 gralloc 에게 메모리를 달라고 한다.

gralloc(제조사가 만든다. 대부분 코드 비공개)이 메모리를 할당한다.

surface flinger 는 받은 메모리를 surface 로 만든다.
(struct surface 에 정보를 채우고 메모리 연결)

app 은 surface 를 받아왔다고 EGL 에게 알린다.

EGL(제조사가 만든다. 대부분 코드 비공개) 은 OpenGL ES 가 surface 에 달린 메모리를 사용할 있도록 한다.

이 때 부터 app 은 정상적으로 OpenGL API 를 사용할 수 있다.

app 이 여러 OpenGL API 를 통해서 surface 에 그림을 그리고 EGL 에게 다그렸다고 알린다.
실제 그림 그린 메모리가 반영된다.

그리고 나면 surface flinger 가 메모리(surface)를 가져다가 다른 app 들의 surface 와 합쳐서
화면에 출력한다.



2013년 3월 6일 수요일

bash 에서 return 값 확인하기

bash shell script 를 사용할 때 여러 개의 script 를 연결하다가 보면

"특정 script가 실패했을 때" 라는 조건을 걸고 싶을 때가 있다.

일반적으로는 내가 만든 script 가 내부적으로 실행했던 script 가 실패하면,

내가 만든 scrpit 까지 동작이 멈춰버린다.

이 때 return 값을 check 하게 하니 내부적을 실행한 scrpit 가 실패해도

내 scrpit 가 계속 진행한다.
(예시: VAL=`test.sh; echo $?` 하면 test.sh 가 실패해도 계속 진행한다.)

bash 에서 return 값을 check 하는 방법은

$?

를 보면 된다.