7월, 2017의 게시물 표시

[Lua,GUITool] 루아로 게임 GUI와 툴 개발하기 위한 리서치

사내 프로젝트의 GUI는 정말 유지보수 하기 힘든 상태입니다. 하드코딩에 복잡하고 지저분하고 등등등 이루 말할 수 없죠. 그 와중에 잠깐 자체 스크립트(txt)로 구현된 신규 UI에 대한 분석 업무가 주어졌었고 분석 중에 이건 아니다 싶어서 기존 UI를 루아(Lua)로 바인드 시켜 개발을 하는 방향으로 가야겠다 생각했었습니다. 그때 당시 최종 결정난 것은 그냥 기존 UI 시스템 그대로 가자였고 지금은 엔진을 SDL2로 포팅중이기 때문에 지난 GUI 모듈 리서치 포스팅 에 있던 것 중 GWork 를 사용할 예정입니다. 루아를 사용하지는 않겠지만, 일단 리서치 했던 내용이 좀 아까워서 리서치 한지 1년이 다 되가는 내용 정리를 시작해봅니다. 일단 루아를 선택하게된 계기로 돌아가면, 신규 자체 UI 스크립트 시스템이라고 있었지만 스크립트라는 것 하나의 장점만 있었지 그 외에는 단점이 더 많았습니다. 단점 목록은 아래와 같은데요, txt 자체 스크립트의 활용 스크립트 자체 가독성과 파싱 처리가 별로 UI 컨트롤의 부족 기존 ui와 비슷한 단 2개의 컨트롤만 만들어진 상태 기존 ui와 호환성 없음. 다 다시 만들어야 함 안되겠다 싶어서 해당 안건에 대한 분석은 종료했었습니다. UI 작업은 저희처럼 툴도 없는 상황이고 시스템도 확장성이 고려된 상황이 아니면 노가다성이 심하죠. 그렇다고 현재 UI 시스템을 갈아엎고 다시 만드는건 너무 비용이 큰 것 같았습니다. 그래서 루아로 방향을 선회했던거죠. 차라리 현 GUI 구조도 별로지만 1차적으로 UI 생성과 관련된 컨트롤들을 루아로 바인딩 시켜 하드코딩이라도 좀 줄이고, 2차적으로 UI의 함수들의 기능까지 빼서 더 개선할 생각으로 말이죠. 루아는 현 모바일 게임 시대 이전 MMORPG 게임 분야에서 인기짱? 스크립트 언어였죠. 와우 덕분으로 알고 있는데, 사실 모바일에서도 Cocos2d-x나 다른 몇 엔진에서도 사용되고 있기는 합니다. 제가 생각하는 루아로 GUI 처리를 했을때의

[NSIS] Internal compiler error #12345: error mmapping datablock to

이미지
NSIS(nullsoft scriptable install system) 최신 버전인 3.01을 사용중에 아래와 같이 에러가 발생했습니다. Internal compiler error #12345: error mmapping datablock to 163167. Note: you may have one or two (large) stale temporary file(s) left in your temporary directory (Generally this only happens on Windows 9x). 공식적으로 NSIS는 2기가 이상 풀 패키징하는 것을 지원하지 않는다고 합니다. 해결책은  CAB 또는 7z 방식을 이용 하는 것도 있지만 간편하게 소스포지에 nsisbi라고 2기가 제한을 해제한 NSIS 바이너리 가 올라온 것을 사용하면 된다. http://netopensource.com/projects/nsisbi/

[SDL2] 게임용 멀티 플랫폼 GUI 모듈 리서치

이미지
기존 프로젝트를 SDL2로 포팅을 하면서 GUI를 SDL2로 한땀한땀 UI 로직은 놔두고 UI 렌더부분만 포팅을 해서 현재 게임의 로비딴은 처리가 된 상황입니다. 이렇게 남은 UI를 할 바에는 어짜피 기존 UI가 너무 복잡 + 하드코딩 + 허접이라, 이 기회에 새로운 GUI 모듈을 찾아 적용해 보려고 합니다. 비슷하게 2013년에 SDL에 사용할 건 아니고 그냥 c++을 지원하는 GUI 모듈을 리서치 해봤었습니다. 이번 포스팅은 SDL2를 지원하지만 SDL_Renderer를 지원하는 것과 지원하지 않고 SDL_GLContext를 사용해 좀더 OpenGL에 친화적인 녀석으로 나눠서 정리해보겠습니다. 이유는 바로 제일 처음 적용 시도한 CEGUI의 이슈 때문 입니다. 리서치 내용은 간단히 링크 정도로 마무리 합니다. 순번은 리서치하면서 괜찮아 보이는 것 순으로 정리했습니다. [SDL_Renderer 지원 GUI 모듈] GWork GWEN을 fork해서 만들어진 gui 블로그 KiWi Rose 공식 홈페이지 GUI 뿐 아니라 SDL2기반 게임 프레임워크 수준인 듯 kiss_sdl2 관련 게시판 SDL_gui [SDL_GLContext 즉 OpenGL 지원 GUI 모듈] nuklear 헤더파일 1개로 되어있는 gui 라이브러리 ㄷㄷ imgui CEGUI와 마찬가지로 SDL_Renderer + OnepGL context를 사용했을 때 CEGUI CEGUI GWEN Skin CEGUI GWEN Skin github MyGUI GWEN 유니티 에셋스토어에도 있네요. .net으로 포팅한듯 Garry's Mod(게리모드)에도 사용된 듯 nanogui-sdl nngui guisan neoGFX [SDL2를 지원하는 것 같지만 확인되지 않은 모듈] flatui - 무려 구글에서 만든 ui lib https://github.com/google/flatui http://

[SDL2,CEGUI] nvoglv32.dll 위치를 읽는 동안 액세스 위반이 발생했습니다

이미지
SDL2에서 간단하게 2D 렌더링을 지원하는 SDL_Renderer를 가지고 지금까지 포팅 작업을 진행하고 있었는데, 이번에 UI 시스템을 기존것을 버리고 다른것으로 가져다 쓰려고 CEGUI를 연동중에 아래와 같은 에러가 발생했네요. 예외 발생(0x62565446(nvoglv32.dll), Debug.exe): 0xC0000005: 0x2844B588 위치를 읽는 동안 액세스 위반이 발생했습니다.. nVIDIA의 opengl 드라이버 관련된 파일 같습니다. 위치는 C:\Windows\SysWOW64\nvoglv32.dll 에 있습니다. CEGUI SDL2 샘플과 포팅 프로젝트의 다른 부분을 찾아봤습니다. 기존에 SDL_Renderer를 가지고 기존 UI와 캐릭터 에셋을 SDL_Texture로 만들어서 포팅까지 해놓은 상태에서 CEGUI SDL2 샘플에 있는 Opengl을 직접 사용하는 SDL_GLContext와 둘이 충돌이 발생하는 듯 합니다. CEGUI의 SDL2 샘플 프로젝트의 경우 SDL_Renderer를 생성해서 SDL_RenderPresent 해주면 예외가 발생하지는 않지만 , 역시나 둘이 충돌해서 아래와 같이 화면이 깜빡꺼리면서 제대로 렌더링이 되지 않았습니다. 위에는 깜빡임만 있다고 했지만 그것은 SDL_Texture를 사용하지 않았을때고 CEGUI의 SDL2 샘플에도 SDL_Texture를 만들어 SDL_RenderPresent까지 해주면 같은 이슈가 발생하네요. SDL_Renderer과 OpenGL을 섞어 쓸수 있는 SDL_gpu 라는게 있다고는 하는데 확인해보지는 않았습니다. 포팅중인 프로젝트에 기존에 SDL_Renderer 생성 부분을 주석 처리해 SDL_GLContext만 사용하고 렌더링 부분도 SDL_RenderPresent를 사용하지 않고 SDL_GL_SwapWindow로 처리하면 CEGUI가 잘 작동하는 것을 볼 수 있었지만, 기존에 포팅해놓은 SDL_Renderer 기반에서 작동하던 UI나 캐릭터는

[CEGUI] error C2001: 상수에 줄 바꿈 문자가 있습니다.

이미지
CEGUI 샘플을 빌드 중 아래와 같은 에러가 발생했습니다. error C2001: 상수에 줄 바꿈 문자가 있습니다. error C2146: 구문 오류: ')'이(가) 'd_botBarLabel' 식별자 앞에 없습니다. error C2146: 구문 오류: '('이(가) 'd_botBarLabel' 식별자 앞에 없습니다. finalText += reinterpret_cast<const encoded_char*>("❚"); 이런식으로 특수문자가 들어간 3곳에서 발생했는데요, 처음에는 파일 고급 저장 옵션에서 기존에 유니코드(서명 없는 UTF-8)로 되어있던것을 유니코드(서명 있는 UTF-8)로 바꿔 컴파일 하니 빌드는 되지만 실행중에 저 특수문자가 ? 로 표시되더군요. 아무래도 iconv 같은 걸 사용해서 인코딩 처리를 해줘야 싶은 느낌입니다. //finalText += reinterpret_cast<const encoded_char*>("❚"); finalText += reinterpret_cast<const encoded_char*>("|"); 단순히 특수문자를 지우고 | 로 바꿔준 후 기존 파일 인코딩 형식에서도 에러 없이 빌드 후 실행에 성공했습니다. 아래 스샷과 같이 글자 마지막 부분에 추가되는 텍스트에 적용 된 것을 확인 가능합니다.