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