개발
-
libgdx - Viewport개발/기술 2018. 6. 22. 21:49
Viewport 정의/종류 Renderer 클래스를 통해 화면에 그려진 결과물을 게임 스크린의 크기에 맞춰 비율을 조정할 수 있는 객체다. 여러 가지 종류가 있는데 이번 포스트에서는 대표적인 세개만 다루고자 한다. 1. StretchViewport 렌더링 결과물을 화면 크기에 맞춰 재조정 해주는 객체다. 주로 윈도우 그림 파일의 가로/세로 크기를 임의 조정할 때 볼 수 있는데 글로 설명하는 것보다는 그림을 보는게 훨씬 이해하기 쉬울 것 같다. 코드상에서는 화면 중앙에 동그란 원을 그렸는데 게임 스크린의 가로 길이가 세로보다 길어 화면 비율에 맞추다보니 원이 타원형으로 보여지고있다. 사각형도 정사각형을 그렸는데 실제로 보이는건 가로가 더 긴 직사각형이다. 2. FitViewport 화면 비율에 따른 재조정..
-
libgdx - Renderer개발/기술 2018. 6. 22. 21:12
ShapeRenderer 컴퓨터 그래픽 소프트웨어에서 '렌더링'은 이진화된 데이터를 컴퓨터 내에 영상을 만들어내는 과정을 뜻한다. 게임 엔진인 libgdx에서도 렌더링 개념을 사용하며 객체 지향적인 관점으로 활용하기 위해 ShapeRenderer라는 클래스를 만들었다. ShapeRenderer 는 화면을 그리기 위한 객체로 개발자가 만들어둔 데이터를 다양한 API를 이용해화면에 출력해주는데 사용된다. ShapeRenderer renderer; @Override public void create() { renderer = new ShapeRenderer(); 실제 클래스의 내부를 보면 public으로 선언된 함수가 많은데 이중 대부분이 화면에 그리기 위해 사용 할 수 있는 API 들이다. 목적에 따라서 함..
-
Libgdx - 소개 및 주요함수 정리개발/기술 2018. 6. 20. 20:52
Libgdx는 오픈소스로 운영되는 게임엔진이다. 주로 2D용 게임을 개발하는데 사용하며 Mac과 Windows에서만 사용할 수 있는 Unity와는 다르게 Ubuntu 환경에서도 사용할 수 있어 개발하기 편리하고 개발한 코드가 Android, IOS, Desktop 환경에서도 동시에 사용 할 수 있는 cross platform 툴이다. 다만 Unity처럼 강력한 GUI 기능을 제공하지는 않고 직접 코드를 이용해서 일일이 그리는 원시적인 방법을 채택해 초심자들에겐 어려울 수 있으나 반대로 생각하면 무거운 기능을 줄이고 가능한 가볍게 만들었기 때문에 성능이 좋고 새로운 기능을 자신의 입맛에 맞게 추가 할 수 있어 능숙한 개발자들에겐 높은 자유도를 주기도 한다. 공식 홈페이지에 올라온 libgdx 게임은 아래와..
-
tasklet 사용법개발/컴퓨터사이언스 2018. 6. 17. 09:48
tasklet을 사용하는 과정은 tasklet을 생성하는 작업과 스케줄하는 작업으로 구분된다. 1. tasklet 생성 include/linux/interrupt.h 라는 파일을 보면 tasklet_struct 라는 구조체가 존재한다. 구조체 내의 속성 값을 입력해서 tasklet이 수행할 작업을 설정 할 수 있는데 일일이 속성 값을 호출할 필요는 없이 tasklet_init 이라는 함수를 이용해서 간단히 선언 할 수 있다.// include/linux/interrupt.h struct tasklet_struct { struct tasklet_struct *next; unsigned long state; atomic_t count; void (*func)(unsigned long); unsigned lo..
-
tasklet과 workqueue의 차이점개발/컴퓨터사이언스 2018. 6. 15. 20:04
커널 내의 코드를 짜다보면은 특정 작업을 다른 CPU에서 처리해야 하기도하고 어떤 작업은 몇미리 후에 처리 할 필요가 있는데 이런 경우 리눅스 커널에서는 tasklet과 workqueue라는 API를 사용해서 간단히 해결 할 수 있다. booklet, piglet 단어처럼 기존보다 작은 단위를 표현 할 때 let을 쓴다는 점으로 추측해볼 때 tasklet은 작은 일을 처리할 때 사용하는것 같고 같은 논리로 workqueue는 접미사로 queue가 있다는 점에서 미루어보아 작업(work)을 queue에 넣어서 처리하는 API인 것 같다. tasklet과 workqueue 모두 특정 작업을 미룰 수 있다는 점에선 동일하나 동작하는 매커니즘은 다르다. 먼저 tasklet은 softirq를 이용해서 동작한다. ..
-
QEMU 성능 문제 - 개론개발/가상화 2018. 5. 30. 23:54
Host OS의 유저 앱으로 구동되는 Guest OS는 Hypervisor가 만들어 준 가상 장치로 동작하고 있기 때문에 실제 물리 장치를 이용하는 Host OS에 비해서 성능이 확연히 낮다. Hypervisor가 만들어준 가상장치도 결국에는 실제 하드웨어에서 동작하게 되는 것이니 이론상으론 시스템 하드웨어 성능이 높아지면 가상 장치로 동작하는 Guest OS도 좋은 성능을 가질 수는 있다. 그러나 아무리 좋은 하드웨어를 사용해도 Host OS처럼 직접 접근해서 사용하는 것과는 확연하게 차이가 난다. 배틀그라운드의 권장사양을 훨씬 뛰어넘는 그래픽카드와 CPU를 장착해도 Guest OS로 실행되는 윈도우에서는 배틀그라운드는 커녕 스타크래프트도 온전하게 플레이하기 어렵다. qemu를 이용해 스타크래프트를 하..
-
objdump 를 이용한 바이너리 깨보기개발/기술 2018. 5. 29. 23:02
개발하다보면 보안이나 라이센스의 이유로 코드는 없고 빌드된 바이너리만 가지고 있는 경우가 간혹 있다. 그런데 이 바이너리의 의사코드도(pseudo code)나 사용한 API 문서도 없고 바이너리를 만든 사람으로부터 어떠한 지원도 받을 수 없는 극한의 상황에서 반드시 바이너리에 포함된 API를 이용해서 무언가를 만들어야 한다면 개발자로선 참 난감한 상황일 것이다. 이런 개발자를 위해서(?) 컴파일러에서는 objdump라는 옵션이 있다. 바이너리에서 원래 코드를 볼 수 있는 환상적인 옵션은 아니고, 바이너리에 있는 기계어를 어셈블리 코드로 변환해주는 옵션이다. 어셈블리 코드는 컴퓨터를 처음 배웠을 때 다들 경험 했을 것이다. 프로그래밍 언어와 기계어 사이의 중간 언어이며, 바이너리를 수행하려는 아키텍처(x8..
-
리눅스 디스크, 폴더 용량 확인하기개발/삽질 기록 2018. 5. 26. 14:29
매번 구글창에 디스크/파일 용량을 확인하는 단축키를 찾기 번거로워서 이번 포스트로 정리하고 머릿속에 기억해두려고 한다. 1. 디스크 용량 확인, df 시스템상에서 FILE이 있는 곳의 파일시스템에 대한 정보를 보여준다. 즉 시스템에 마운트되어 있는 모든 것들에 대한 사용 정보를 출력한다는 뜻.그냥 df를 검색하면 아래처럼 나온다. 여기서 1K-blocks는 파일시스템의 전체 용량, Used는 사용중인 크기, Available은 사용가능한 메모리의 크기를 의미한다. 그런데 위 그림은 바이트 단위라서 보기가 어렵다. -h 옵션을 넣어서 human readable하게 변환하자. 훨씬 직관적으로 보인다. df --help 로 검색하면 다양한 옵션을 발견할 수 있으니 이것도 적극적으로 활용하자. 디스크 용량 검색..