개발 노트 Containers 2017/12/15 18:27 by cagetu

게임 개발에서의 STL에 대한 고민은 계속 된다....

이번에는 Container를 간단하게 만들어볼 생각이라 이리 저리 좀 관련 내용을 읽어보고 있다. 

결론적으로 보면 동적으로 메모리를 어떻게 관리하는 것이 효율적인가? 에 대한 것으로 볼 수 있을 것 이다.


당연히 좋은 라이브러리들도 많고 그것들 보다 성능이 더 나올지는 모르겠지만, 한번 만들어보면서 사용해보는 경험이 더 좋을 것 같아서 진행한다!! 그리고 더 중요한 것은 어디에서 어떻게 사용하는 것이 맞는지도 잘 파악해야 한다. 엔진 내부에서는 그냥 Fixed Array를 쓰는 편이 훨~~씬 나을 것이니... 이번에는 그런 것도 반영해서 내 생각이 들어도록 해볼까 한다.

글만 보고 있어도 재밌다!!!

하루 하루 읽고 싶은 & 읽은 책 목록 2017/12/12 17:37 by cagetu

서점에 가서 보고 싶은데 살까 말까 고민이 되면, 보고 싶은 책을 사진을 찍어서 목록을 만들어 놓는다. 그리고 회사나 도서관에서 빌릴 수 있는 책들은 빌려서 보고 나중에 소장하고 싶은 책은 알라딘 중고서적에서 발품 팔아서 구할 생각이다. 올 해는 출퇴근 길에 저 책들을 구해서 보는 걸로...

* 사일로 이펙트 (완료)
* 대통령의 글쓰기 (완료)
* 매치메이커스 (완료)
* 나미야 잡화점의 기적 (완료)
* 언어의 온도 (완료)
* 82년생 김지영(완료)
* 스키다마링크 (기욤뮈소)
* 파리의 아파트 (기욤뮈소)
---------------------------------------------
* Option B (읽는 중)
* 말의 품격
* 검은 꽃
* 늦어서 고마워
* 거짓말을 먹는 나무




개발 노트 프로젝트 빌드 및 구성 중... 2017/12/07 01:04 by cagetu

엔진 구성을 계속 해보고 있다. 처음에는 오픈소스를 받아서 거기에 있는 CMakeList.txt 파일 그대로 사용하면 되는 줄 알고 있었는데, 이를 프로젝트에 맞게 변경해서 적용해야 한다는 것을 알게 되어서, CMake 문법을 익혀 가면서 작성하고 빌드해보고 하면서 진행해보고 있다. 예를들어, EASTL만도 해도, EASTL과 EABase 라는 라이브러리 두 개가 나오도록 되어 있어서, 그냥 이것을 EASTL 하나로 나오게 수정했다.

또, ThridParty 라이브러리를 빌드하고 나면 게임에서는 inlcude와 lib를 어떻게 관리할 것인지도 고민 중이다.

ThridParty
+ [라이브러리]
+ include
+ lib

일단은 이런 같은 형태로 모든 라이브러리를 맞추는 식으로 관리해보려고 한다.
 

빌드 해보면서 EASTL은 코드 분량이 너무 많아서, tinystl 같은 볼륨이 작은 라이브러리를 사용할까? 라는 생각도 들었다. Array와 같은 Container는 이런 라이브러리와 별도로 틈틈히 만들어서, 엔진 내부에서 사용할 때 사용하는 것도 좋을 것 같다는 생각도 들었다.

1차적으로는 CMake로 Win64와 Android 빌드까지는 해볼 생각이다. 빌드 결과가 원하는데로 이쁘게 나와서 기분이 좋다. 코딩이라고 해야 하나? 이것도 생각보다 재밌다. ㅎㅎ

--------------------------------------------------------------------------------------------------------------------------------

CMake 로 SampleApp - Win64 까지 빌드는 성공했다. 이거 생각보다 재밌고 해두니까 엄청 편리하다. 작업 많이 해두고 안드로이드 빌드 붙여보려고 했더니 복잡하길래, 이번 기회에 사전에 안드로이드 빌드 세팅까지 해 놓고 살이 붙이는 것이 좋을 듯!!! (아이폰도 해놓을까 싶지만, Mac 이 없어서 아쉽...)

--------------------------------------------------------------------------------------------------------------------------------

EASTL은 사용하려고 하면 operator new 를 구현해줘야 한다. 즉, container에서 사용할 new operator를 내가 직접 작성해줘야 한다. 사실 새롭게 프로젝트 빌드하기 시작한 것도 EASTL 때문이기는 한데, vector 등은 std::vector와 크게 다르지 않을 수도 있다. 다른 동적 array를 봐도 결국 allocator 를 어떻게 적절하게 연결할 것인가? 를 이해해야 하는 것 아닌가? 라는 생각도 든다. 그래도 이것도 결국 만들어보면서 메모리 관리까지 보는 것이 더 전체 그림을 이해하는데 도움이 될 듯 하다. 

간편한 세상이라지만 따져보면 참 그 만큼 꼼꼼히 알아야 할 것도 많다.



개발 노트 놀고 있다~ 2017/11/30 11:31 by cagetu

요즘에는 집에서 하라는 코딩은 안하고, 맨날 이것 저것 하면서 놀고 있다. ㅎㅎ

#Skit 1
스위치용 마리오 오딧세이를 클리어했다. 사실 이게 클리어라는 개념이 있는 게임은 아니지만, 개인적으로 마리오는 정말 잘 만든 테마 파크 같은 느낌이고 젤다는 좀 더 자유로운 느낌이라 점수를 더 주고 싶다. 라고 하면서 마리오를 정말 재밌게 했다. ㅎㅎㅎ

엔진 코딩보다 요즘에는 엔진 디렉토리 구성하고, 라이브러리 관리하는 것 등등을 이리 저리 바꿔 가면서 CMake를 만져보면서 빌드 세팅을 하고 있다. CMake를 워낙 잘 못 써서 그런데 나름 해보니까, 프로젝트 만들어지는 것 보면서 재밌기도 하고, 만들어 놓으면 정말 편하겠구나! 라는 느낌이다. 또 디렉토리 구성을 변경하면서 개념도 좀 더 정리되는 것 같고, 크게 Editor나 Game과의 관계도 어떻게 모습을 가져가야 하는지도 생각해보게 되고, 은근 재미있다. 

VulkanAPI는 점점 까먹고 있는데, 텍스쳐 렌더링을 하기 위해서 텍스쳐 로딩을 먼저 봐야 하니... 겸사 겸사 이미지 로딩 및 세이브 관련 기능들을 정리하고 있다... 렌더러로 시작했지만, 하는 김에 조금 더 정성들여 정리해서 엔진 형태로 발전 시켜보려고 한다. 플래피 버드 정도는 만들어서 올릴 수 있는 형태로?! ㅎㅎ

잘 노는 것도 경쟁력이라고 생각하고 놀 때 즐기자.. ㅎㅎ

(회사 그만 둔 건 아니랍니다.. 후후후....)

#Skit 2
요즘은 출퇴근 시간에 책을 많이 본다. 운이 좋게도 회사에서 도서관을 운영하고 있고, 집 아파트 단지에서 운영하는 도서관에서도 책을 빌릴 수 있어서 그 동안 보려고 찍어놓은 책들을 하나씩 보고 있다. 책을 읽으면서 그래도 조금은 덜 심심하다고 해야 하나? 외롭지 않다고 해야 하나? 매일 회사와 집만 오가는 외로움이나 지침에서 약간 벗어나게 되는 것 같다. 누가 그랬던가? 책을 읽으려면 손에 들고 다녀야 한다고... 습관을 조금 더 붙여서 개발서적도 좀 다시 봐야겠다...

#Skit 3

Public
|- Foundation
- math.h
|- Renderer
- indexbuffer.h
Private
|- Foundation
- math.cpp
|- Renderer
- indexbuffer.cpp

VS

Foudation
|- Public
- math.h
|- Private
- math.cpp
Renderer
|- Public
- indexbuffer.h
|- Private
- indexbuffer.cpp

중에서 고민 중..... (위의 것으로 결정!!!! 진행해보자!!)

개발 노트 엔진 구성 2017/11/21 02:00 by cagetu

ThirdParty 라이브러리 관리하기...하면서 내가 많은 것을 안 해봤구나! 라는 생각을 해보게 되었다. 렌더링 코드만 만지작 거려봤지, 사실 엔진에 대해 전체적인 그림을 그리고, 구성을 해본 것은 경험이 많지는 않다. 

"Engine / Editor / Game 에 대한 폴더는 어떻게 구분해서 공통으로 셰어할 수 있도록 할 것인가? 프로젝트 관리를 편리하게 하기 위해서는 어떻게 할 것인가?" 등등... 집에서 혼자 할 때에는 사실 이런 것들은 대충 넘어가지 한번 파악해보려고 하지도 않았다. 이제는 다른 엔진들이 어떻게 했는지도 보고, 나도 한번 따라하면서 한번 다듬어보면서 전체 모습을 좀 잡아보기로 했다.

사실 Vulkan 공부를 하면서 해야할 것들이 아직 많이 남아 있지만, "내가 Vulkan을 왜 공부하는 것인가?" 라는 생각을 해보면서 그래!! 게임 엔진 같은 모습을 한번 다시 만들어보자! 라는 생각이 들었고, 작지만 모양새는 갖춰진 형태를 만들어볼 생각이다. 

그래서 라이브러리 관리하고, 프로젝트 생성 및 빌드 같은 것들도 많이 해보려고 한다. CMake로 출발해서 나중에 익숙하고 많이 알게되면 더 좋은 것들을 이용해보도록 할 생각이다. Bullet 과 같은 물리 라이브러리들도 다양하게 붙여보면서 시도해볼 생각이기 때문에, 이런 시스템이 만들어지면 부담 없이 테스트 해볼 수 있을 것 같다.

예전에 해 놓은 것들이 꽤 많은데, 막상 새로 할려니 참 새롭고 쉽지도 않다. 특히, "내가 이걸 굳이 해야 하나?" 라는 생각이 가장 큰 방해 요소인 것 같다. 

그래도 캐릭터를 띄우고 돌아다니게 하기만 하면, 정말 세상 다 가진 기분이 들 것 같다. ㅎㅎㅎ

=========================================================================
CMake 문법 (출처: http://jaeng9.tistory.com/9)

1) PROJECT(hello C)
프로젝트 명을 지정한다.
 
2) SET(BINDIR "/usr/bin")
필요한 변수를 지정한다. 향후 BINDIR을 쓰면 "/usr/bin"으로 인식한다.
 
3) ADD_DEFINITIONS(-DLOG_TAG="TAG_NAME")
이렇게 정의해두면 모든 하위 디렉토리에서, 즉 빌드되는 소스파일에서도 LOG_TAG라는 변수를 #define 한 것처럼 그대로 사용할 수 있다.
 
4) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
컴파일러가 찾을 include 파일(주로 헤더파일) 디렉토리를 지정한다.
 
5) ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
실행파일을 만든다. SRCS 위치에 사용되는 소스파일(*.c)을 지정해준다.
 
6) INSTALL(PROGRAM ${PROJECT_NAME} DESTINATION ${BINDIR})
만들어진 파일을 install 할 때 어디에 설치할 지 지정한다. 맨 앞 키워드에 따라 성격이 결정된다.
PROGRAM은 inatall 시에 실행파일 권한이 주어진다. LIBRARY라고 쓰면 읽기 권한만 주어진다. 
단순 파일은 FILES이고 폴더는 DIRECTORY 이다.
 
7) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/configure.sh.in ${CMAKE_SOURCE_DIR}/configure.sh)
파일명을 바꾸는 등 빌드 시점에 configuration할 내용을 적는다.
 
8) ADD_SUBDIRECTORY(src) 
지정 폴더(src)로 가서 cmake 파일이 있으면 추가로 수행한다.
 
9) ADD_LIBRARY(name SHARED ${SRCS}) 
SRCS 변수에 나열한 .c 파일들로 name이라는 라이브러리를 만든다.
 
10) TARGET_LINK_LIBRARIES(vconf)
해당 패키지명의 라이브러를 링크한다. add_library를 통해 실행파일을 생성한 뒤에 사용해야 한다.
 
11) ADD_DEPENDENCIES(target-name depend1 depend2)
타겟의 의존성 있는 패키지를 적는다. generation order를 맞추기 위해 주로 사용한다.
 
12) MESSAGE("message to display")
echo로 메시지 출력
 
13) pkg_check_modules(pkgs REQUIRED pkg1 pkg2 pkg3 .. )
system에 해당 패키지가 있는지 확인하고, REQUIRED 옵션을 통해 조건에 부합하지 않으면 cmake build를 중단시킨다.
획득한 정보는 pkgs_CFLAGS와 pkgs_LDFLAGS 변수에 저장된다.

=========================================================================
CMake에서 정적 라이브러리 하나로 합치기 (http://ospace.tistory.com/539)

=========================================================================


1 2 3 4 5 6 7 8 9 10 다음



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu