나오기만 하면 살건데 이 게임 왜 안나와?

게임, 특히 온라인 게임, HTTP 리퀘스트 날려서 점수 세이브 하는 게임 말고, 소켓 통신하는 고전적인 의미의 온라인 게임, 그중에서도 수백 수천명 이상이 한 게임 공간에 접속하는 온라인 게임-mmorpg의 개발은 어렵다. 어렵다 내가 다녔던 모 회사의 경우 1년 반만에 게임을 찍어낸 경우도 있었지만 이미 만들어진 네트워크 라이브러리,게임엔진,서버와 클라이언트의 통신체계,맵툴,DB구조 다 있었고 그저 스킨과 숫자를 바꿨을 뿐이었다. … More 나오기만 하면 살건데 이 게임 왜 안나와?

Using Surface Dial in Desktop Application with using C++.

Using Surface Dial in my apps. It’s easy in UWP environment. But it’s not easy in Desktop environment. WRL technology is required to use Surface Dial in desktop applications (e.g : Games) developed in C/C++. But WRL became a legendary technology. MS dislike old technology like WRL. I spent a all day for getting ‘ABI::Windows::Storage::Streams::IRandomAccessStreamReference’ … More Using Surface Dial in Desktop Application with using C++.

C++/CX 와 C++/WinRT 같은 프로젝트에서 사용하기

C++/WinRT에 꽤 흥미를 느껴서 점진적으로 C++/CX로 작성한 UWP앱 프로젝트들을 C++/WinRT로 바꿔가기로 마음 먹었다. 그 전에 한가지 해결하고 가야하는데 C++/WinRT프로젝트에서 XAML Designer를 사용할 방법을 찾는것. C++/CX프로젝트(/ZW스위치 on)에서는 Visual Studio의 XAML Designer에서 XAML코드를 생성하면 정적으로 바인딩할 수 있는 추가의 코드를 생성해준다. 물론 C++/WinRT과는 전혀 호환이 되지 않는다. 단독으로 C++/WinRT만 사용할 경우 XAML Designer는 전혀 사용할 수 없다. … More C++/CX 와 C++/WinRT 같은 프로젝트에서 사용하기

WinRT, C++/CX , WRL

먼저 WinRT에 대해서 얘기해보자. Windows 8시절부터 Store App을 개발하던 프로그래머가 아니라면 좀 생소할 수도 있는데 Windows Runtime의 약자이고 Store App을 위한 새로운 Windows API이다. 공식적으로 소비자 대상으론 WinRT란 표현은 거의 쓰지 않는다. 하지만 API이름이 Windows Runtime이고 실제 개발을 하다보면 WinRT란 이름이 엄청나게 많이 나온다. Windows 8.x가 망한 탓에 Windows 10에선 WinRT란 표현을 쓰고 싶어하지 않는것 … More WinRT, C++/CX , WRL

UWP + C++/CX 로 OneDrive앱 개발하기

그저 내가 개발중인 게임과 툴에서 OneDrive에 억세스 하고 싶었다. C++에서 C#코드를 부를 생각은 없었다. 네이티브 C++로 하고 싶었다. 예전에 Casablanca(C++ Rest SDK)를 사용해서 OneDrivePlayerW81이란 앱을 만든 적이 있다. 그때 Casablanca 쓰면서 엄청 짜증났던 기억이 있다. 그래서 이번엔 Casablanca를 쓰지 않고 UWP API와 C++/CX로 구현할 생각이다. 일단 UWP 앱이지만 데스크탑앱에서도 UWP의 HttpClient를 사용할 수 있으므로 추후 … More UWP + C++/CX 로 OneDrive앱 개발하기

Debugging – App의 명시적 종료의 필요성

적어도 디버그 빌드에 한해서라도 어플리케이션은 반드시 명시적 종료가 있어야한다. 명시적 종료 상황에서 힙을 비롯한 모든 리소스가 완전하게 해제되었는지 체크할 수 있어야 한다. 무엇보다 heap이 손상되었는지를 체크할 수 있어야한다. 명시적 종료할때 이걸 체크하지 않으면 눈에 띄지 않는 버그가 계속 쌓임. 시한폭탄임. 실제로 내가 만들던 게임 서버에서 그런 사건이 있었다. 사내 테스트 하루 전날 팀 내 플레이 … More Debugging – App의 명시적 종료의 필요성

오래된 디버깅 얘기 한 토막

2003년인가 2004년에 Visual Studio .NET 따위엔 아무도(적어도 게임업계에선) 관심 없었고 Visual C++ 6.0으로 개발하던 시절에 스택 프레임의 리턴 어드레스가 정상인지 판별하기 위해서 컴파일러가 해줄 수 있는게 없었다. 내가 다니던 회사의 C모 온라인 서버가 동접 1000만 넘어가면 죽어나갔는데 아무도 원인을 몰랐음. 디버거로 보면 IP(Instruction Pointer)가 엉뚱한 어드레스로 튀어있으니 리턴 어드레스에 잘못된 값이 들어간걸로 보이는데 대체 그게 … More 오래된 디버깅 얘기 한 토막

SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling

요 근래에 Voxel 오브젝트 컬링을 위해 SW Occlusion Culling을 사용한다고 포스팅 했었다. SW Occlusion Culling이라봐야 별거 없다. 잠깐 그 내용을 상기해보면… CPU측에서 사용할 수 있는 Z-Buffer(그냥 32bits float타입의 메모리 버퍼)를 잡는다. Voxel오브젝트의 Min박스의 z값을 그린다. z값이 기존 값보다 작거나 같을 경우만 덮어쓴다. 이후에 테스트할 다른 Voxel오브젝트의 Max 박스의 z값을 z-buffer의 값과 비교한다. 기존값보다 z값이 작으면 … More SSE를 이용한 4샘플 무분기 치환 for SW Occlusion Culling