UWP with C++로 Battery 상태 얻어오기

갑자기 필요해서 UWP, 정확히는 내 윈폰에서 배터리 상태를 얻어올 필요가 생겨서 급히 찾아봤다. Windows::Devices::Power 네임스페이스의 API를 사용하면 된다는 정보는 금방 찾았지만 C++로 구현하는 자료는 어디에도 없다. 아무리 뒤져봐도 없다. C#이라면 이런 식으로 간단하게 구현할 수 있다. 이 스타일 그대로 C++로 바꿔서 코딩해보면 컴파일에 실패한다. Battery^ 객체를 직접 억세스하는건 불가능한것 같다. 그 다음 시도. 아래와같은 방법으로 … More UWP with C++로 Battery 상태 얻어오기

코드 가지고 철학하는 것들.

내가 코드 가지고 철학하는 놈들을 극혐하는 이유는 현재까지 그 예술짓거리를 하면서 빠르고, 메모리 적게 먹고, 버그없이 잘 돌아가는 코드를 잘 짜는 인간을 못봤기 때문이다. 나도 한때 운동하던 사람이고 그래서 전통무술에 대한 환상이 0이다. 온갖 똥폼을 다 잡는데 결국 붙어보면 많이 맞고 많이 때려본 놈이 강하다. 그 차이가 너무 압도적이다. 온갖 똥폼 잡고 나오지만 펀치 한방,로우킥 … More 코드 가지고 철학하는 것들.

복셀의 사각형당 2×2텍셀의 라이트맵 적용

각각의 복셀오브젝트에 할당된 라이트맵. 라이트 계산은 안했고 좌표가 제대로 부여됐는지 확인. 현재 텍셀당 25cm x 25cm이다. 오브젝트의 복셀 구성이 가변이라 애먹었다. 좌측으로부터 8x8x8 2개, 4x4x4 ,2x2x2 ,1x1x1 1개씩이다. 삼각형 매시같으면 인접한 텍셀과 부드럽게 보간하기 위해서 비슷한 평면상에 존재하는 삼각형들끼리 묶어서 패킹 해야했다.또한 필터링시 의도하지 않은 번짐을 최소화하기 위해 텍스쳐상에서 패킹된 그룹 간에 2픽셀씩 건너뛰고 모서리 … More 복셀의 사각형당 2×2텍셀의 라이트맵 적용

명시적 종료의 필요성 #2

네이티브 코드 체계에선 메모리(일반적인 메모리 , COM객체,Windows HANDLE 등등) 누수 탐지 기능이 반드시 필요하다. 컴파일 타임에서 논리적으로 아무리 완벽한 체계를 제공한다고 해도 말이다. 최근 MS는 COM을 사용하는 예제에서 CComPtr 사용을 적극 권장하고 있다. C++/CX에선 명시적으로 CComPtr을 사용할 필요없이 ^객체가 스마트포인터를 내장하고 있고 UWP프로젝트가 아닌 경우, 예를 들어 DX12샘플같은 경우 CComPtr을 사용하고 있다. CComPtr뿐 아니라 컴파일러 … More 명시적 종료의 필요성 #2

Voxel Horizon 개발 근황

이전에는 GPU에서 라이트 계산과 그림자처리를 했었는데 CPU에서 하는걸로 바꿨다. 복셀 오브젝트가 2만개가 넘어가니 컬링을 해도 복셀 데이터를 Shadow Map에 그리는 시간을 무시할 수 없다. 쉐도우맵 스타일의 그림자가 크게 어울리는것도 아니고 해서 CPU기반으로 바꿨다. KD-Tree traversal로 복셀 최소단위 50x50cm 한 면씩 라이트/그림자 처리를 수행한다. 멀티스레드로 처리하고 한방에 맵 전체를 처리하거나 중간중간 복셀 데이터의 변동분에 대해서 최대 … More Voxel Horizon 개발 근황

Game Dev – SW Occlusion Culling 성능

내가 작성한 SW Occlusion Culling코드는 256×256 float 버퍼에서 1730개 정도의 삼각형을 Z-Raster / Z-Test 하는데 15만클럭 정도가 소요된다. SSE 명령어셋을 사용하는데 FPU만 사용하는것보다 2배 정도는 빠르다. AVX로 8샘플씩 처리하는 코드도 만들어놨지만 SSE만 쓰는것보다 느리다. 처음엔 싱글스레드 코드였지만 현재는 멀티스레드 4스레드를 사용한다. 내 PC의 물리코어가 4개이고 이 머신에선 4스레드보다 많은 스레드를 투입해도 성능향상이 미비하다. 그래서 현재 … More Game Dev – SW Occlusion Culling 성능