라벨이 미들웨어일반인 게시물 표시

[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 처리를 했을때의...

[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/flatu...

Native C++ based GUI Middleware research for game dev

이미지
 유니티 에셋 번들 패치시스템 관련 포스팅 할 것 처럼 하다가 왠 GUI 미들웨어 리서치를 할까요? 제가 하는 일이 유니티3D 프로젝트만 있는게 아니고 게임브리오 기반 MMORPG도 해야해서인데요, 현재 UI가 구세대의 유물이긴 하지만 그래도 나름 쓸만한? DXUTGUI 기반으로 되어있는데 너무 정적이라 이쁘지가 않아 이걸 버리고 통으로 다른걸 갈수도 있다는 말씀에 쓸만한 GUI 미들웨어가 있는지 리서치를 하고 있습니다. 멀티 플랫폼. 즉, 유니티3D에서만 쓰이는 EZ GUI나 NGUI등은 제외. native 즉, C++ 베이스. Game용 GUI 즉, wxWidget이나 QT같은 Application용은 제외. 단, Game용이면서 Application에도 된다면 상관없다. 무료(오픈소스). 유료(상용)는 링크정도만. 무료라면 지속적인 업데이트가 되는 중인가?  이제부터 괜찮아 보이는 무료 GUI 미들웨어를 위와 같은 리서치 조건을 바탕으로 간단하게 종류와 영상정도로 정리해보겠습니다. 세부적인 Features는 링크들을 참고하세요. CEGUI  오픈소스 GUI로는 꽤나 역사가 깊은 미들웨어죠. 역사가 긴 만큼 덩치?도 크구요. 오우거에도 통합되어 있죠.  더 많은 영상을 보시려면 링크 를 클릭하세요. MyGUI  이름이 난감하죠. mygui 라는게 일반적?인 거라 엉뚱하게도 이놈 이외에 다른 것들이 검색될 때도 있더군요. 이미 오우거3D에서는 CEGUI와 함께 유명?한 GUI 미들웨어인 듯 합니다.  C#과 Managed C++을 지원해서 유니티3D와 통합도 가능합니다. NGUI나 EZ GUI마저도 부담스러우셨다면 이것도 괜찮은 대안인 듯 하네요. MyGUI가 적용된 게임 또는 어플리케이션 영상 보기 libRocket  PC뿐 아니라 iOS, Android 같은 모바일도 지원하네요. 역시나 오우거3D와도 궁합이 맞구요. ...

cocos2d-x에 쓸만한 JSON c++ lib 뭐가 있을까? rapidjson

이미지
 한참 cocos2d-x로 개발하다가 요즘은 서버 개발을 해야해서 node.js 를 보고 있는 상황이죠. node.js로 만든 웹서버에 cocos2d-x로 간단한 post 정도를 처리할 수 있는 수준 인데요, 잠시 넋두리 했던 것처럼 이제는 JSON이 필요한 시점이네요. 간단하게 JSON 정리부터 cocos2d-x가 c++ 기반이므로 JSON c++ lib 리서치 한 것등에 대한 내용을 정리합니다. JSON(JavaScript Object Notation) ?  아니 이건 뭐 아직 JavaScript도 모르는데 JSON(JavaScript Object Notation, 제이슨)을 먼저 알아보네요. 물론 예전에 들어보긴 했습니다만, 이게 JavaScript 관련된 것이었다니...  XML보다 더 인간 친화적?이고 더 가볍게 데이터를 교환해볼까?하는 목적으로 만든어진 데이터 형식? 포맷? 정도로 보면 될 듯합니다. 처음에는 인터넷 데이터 통신을 위해서 만들어진 듯 하지만, 지금은 일반 로컬에도 사용할 정도로 폭 넓게 사용중이죠.  개발은 자바스크립트에 관련되어 있다고 자바스크립트에서만 사용하는 것은 아닙니다. 프로그래밍 언어와 플랫폼에 독립적이므로 각 언어용 모듈이 있거나 각 SDK등에 있다면 가져다 사용하면 됩니다.  간단하게 { name : 값 } 형식으로 되어 있고 자세한 것을 위키백과 - JSON 를 참고하면 될 듯합니다. JSON C++ 리서치  cocoa나 cocoa touch에 오브젝트C로 된 JSON 모듈,  Android SDK또는 자바에 JSON 모듈 이 있을법도 하지만 이런것들을 사용하면 cocos2d-x에서 jni등을 거쳐 처리해야 하므로 단계가 늘어나게되죠. 어짜피 cocos2d-x 내부에서 c++로 libcurl과 pthread를 가지고 통신이 되므로 JSON도 C/C++로 된 것을 리서치 해봤습니다.   JSON 홈페이지 ...

간단한 XML 소개와 XML 파서 종류

데이터 구조가 잡히기 전 임시? 데이터 파일용으로 xml을 사용하려고 합니다. 뭐 만들어두면 간단한 설정파일등에 사용도 가능하구요. 기존에 잘 썼던 TinyXml을 쓸까 하다가 MSXml과 XmlLite등 다른 것들도 포착이 되네요. 세부적으로 프로그래밍 API까진 아니고 간단하게 리서치 한 내용을 포스팅 해봅니다. XML 파싱 방식 SAX(Simple API for XML)와 DOM(Document Object Model)이 있습니다. SAX(Simple API for XML) XML문서 구성요소를 읽어 들일때마다 이벤트로 처리해 주기 때문에 대용량 처리에 적합하고 빠르고, 대용량 문서나 많은 문서를 처리할 때 적절합니다. 단점으로는 읽어낸 데이터를 다시 이용할 수 없어 재활용하려면 자료구조를 따로 만들어줘야 합니다. DOM(Document Object Model) 각각의 구성요소를 객체로 모델링화해서 객체가 가진 속성과 메소드를 통해 문서의 구조와 데이터를 다룰 수 있도록 W3C가 국제표준으로 제안한 XML 프로그래밍 인터페이스입니다. XML 문서를 해석하여 DOMTree형태로 메모리에 올립니다. 해서 자료구조를 가지고 있어서 데이터를 바로 읽고 수정뿐 아니라 노드 추가등의 작업도 가능합니다. SAX보단 느립니다. XML 관련 모듈 TinyXml DOM 방식 UTF-8 파싱을 지원하지만 기본적으로 유니코드로 컴파일이 안된다. UTF-8로 된 파일에서 한글을 읽을 때 MultiByteToWideChar에 CP_UTF8옵션으로 읽을 것. UTF-16미지원 MSXML DOM 방식. COM. SAX도 지원하는듯. MSXML버젼 때문에 정상적으로 파싱 하지 못하는 경우가 발생할 수 있다. 별도 MSXML 배포버젼이 있지만 일반적으로 유저들은 IE를 설치할 때 같이 배포된 MSXML을 사용하기 때문에 사용자의  IE버젼과 OS버젼에 따라 이런 경우가 발생한다. 이걸로 개발하면 유저들도...