Software Development/Tizen

[TIZEN]4. 타이젠 EFL이란?

huiyu 2015. 12. 21. 23:38

EFL은 Enlightment Foundation Libraries의 약자로 타이젠 핵심 코어 툴킷입니다.

타이젠은 내부적으로 EFL로 구현되어져 있어, Native App 개발 시 기본적인 개념을 알고 시작한다면 훨씬 쉽게 개발이 가능합니다.


EFL은 UI를 만들기 위한 라이브러리로 기존 툴킷들에 비해 더 빠르고, 더적은 리소스를 사용하여 UI를 구현할 수 있다는 특징을 갖고 있습니다.
EFL은 여러 유용한 라이브러리가 모여진 툴킷인데요, 아래와 같은 블록 다이어그램을 갖고 있습니다.

기본적으로 상위 라이브러리는 하위 라이브러리를 참조하는 구조를 갖고 있습니다.




1. Eina(에이나)

 -  자료구조 라이브러리
 -  C++의 STL과 같이 배열, 리스트, 해시, 트리 그리고 공유 문자열을 쉽게 구현될 수 있도록 제공


2. Eet(이이티)

 -  데이터 인코딩 및 디코딩
 -  임의의 자료구조, 이미지 데이터 등을 압축하여 파일저장 또는 네트워크 전송
 -  zip과 유사한 압축기법, 파일로부터 임의의 위치한 데이터에 빠르게 접근 가능


3. Evas(에바스)

 -  EFL의 핵심 라이브러리, Canvas or Rendering Engine
 -  사용자는 Evas를 통해 윈도우 내 이미지, 사각형, 선, 폴리곤, 텍스트 등을 표현하며, 출력물은 모두 객체화
 -  Evas_Object 타입으로 객체화하여 제공하며, 모든 그래픽 객체들은 Evas_Object인터페이스로 접근
 -  기본적으로 evas는 소프트웨어 렌더링 방식을 지원하지만, 플랫폼 환경에 따라 그래픽 H/W가속기능을 백엔드로 지원
 -  렌더링 방식은 리테인 모드(retain mode) 채택, 내부적으로 장면그래프(Scene-graph)를 통해 오브젝트를 관리하며 화면상에 보여할 객체들을 적절히 최적화하여 알아서 렌더링 -> 사용자는 복잡한 렌더링 메커니즘에서 자유로워져 로직에만 집중 가능
 -  차폐된 렌더링 객체를 걸러내고 클리핑 작업을 통해 최소 렌더링 영역 결정.


* 이미디어트 모드(Immediate Mode) : 렌더링 객체 선별 및 클리핑 작업이 모두 사용자가 구현, 이전 그래픽스 시스템은 대체로 이미디어트 모드.

* Evas는 메인루프 가동 중 화면이 그려지는 시점이 발생, 그러나 매번 화면을 렌더링 하지 않고 이전 루프에서 오브젝트의 변화가 없다면 다시 렌더링 하지 않음

* Scene-Graph : 그래프를 통해 캔버스 상에 변경된 오브젝트들을 추적하여 변경된 영역 계산. 변경된 객체만 Pixel을 계산하여 redraw 수행. 렌더링 부하 감소

* 아래의 경우는 렌더링 제외

  - 변화가 없는 경우
  - Canvas 영역에서 벗어난 경우
  - 가려진 경우
  - 크기가 없는 경우
  - hide 상태인 경우
  - alpha값이 0인 경우
  - 클리퍼에 의해 보이지 않는 경우

   -> 만약 이미디어트 모드라면, 사용자는 굳이 렌더링 필요가 없는 화면을 새로 갱신하는 비효율적인 작업을 하거나, 실제 갱신된 부분을 다시 계산하는 번거로운 작업을 수행하여야 한다.


4. Ecore(이코어)

 -  사용자 편의를 위해 제공되는 시스템 라이브러리
 -  Main loop, Timer, Event, Connection, IPC, Thread, Window System 등
 -  복잡한 설정 및 사용단계들을 내부적으로 처리하여 보다 쉽게 단순화


5. Edje(엣지)

 -  복잡한 GUI 구성을 위한 기능들을 제공
 -  EDC Script 언어 제공, 사용자는 EDC Script를 통해 코드로부터 GUI부분을 분리하여 프로그램 작성


6. Emotion(이모션)

 -  비디오/오디오 플레이백

7. Elementary(엘레멘트리)

 -  위젯 툴킷 라이브러리 (버튼, 리스트, 레이블, 슬라이더)
 -  GUI확장성 지원-> 다양한 스크린 해상도 지원, 테마지원, 디바이스 프로파일별 기능 제공


Tizen API는 보통 각라이브러리명으로 시작하고 있습니다.
예를 들면 에바스의 경우
evas_, 이코어의 경우 ecore_, 엘레멘트리의 경우 elm_의 형태를 이루고 있는데요,
각 라이브러리의 역할이 무엇인지 알아두고 있다면 원하는 기능을 찾을 때 훨씬 쉽게 찾을 수 있습니다.

 

 


[참고사이트]

http://blog.naver.com/hermet/163998959

728x90