SW Rasterize 기법에 따른 효용성 요약

SW Occlusion Culling만들면서 CPU로 삼각형 찍는 방법으로 별 짓을 다 써봤다. SW Occlusion Culling을 수행하기 위해선 프레임버퍼에 삼각형의 depth를 출력해야한다. depth값이 아닌 color값이나 texture를 출력하는 경우도 기본 원리는 똑같다. 성분의 종류만 다르고 1/w로 보간하는것까지 똑같다. 즉 CPU로 삼각형 찍는 SW Rasterizer를 만드는 작업이다. 여러가지 기법들을 사용해봤는데 결론을 요약해본다. 1. Multi-Thread 사용 화면 구역을 나눠서 여러스레드가 … More SW Rasterize 기법에 따른 효용성 요약

pragma pack()실수 찾기 – pragma pack(show)

오늘의 개삽질. VOXEL HORIZON프로젝트의 UWP버전을 빌드하던중 다음의 에러를 마주쳤다. error C3621: ‘Windows::Foundation::EventHandler<Windows::ApplicationModel::Core::UnhandledErrorDetectedEventArgs ^>::__abi_IDelegate’: only the default packing value (16) is allowed for WinRT types 에러 내용을 액면 그대로 해석하자면 WinRT타입 개체들(ref class)는 기본 팩킹 사이즈가 16bytes만 허용된다고. 처음엔 되게 황당했다. 이게 뭔 소리여? struct align이라고 표시해줬으면 좀더 빨리 눈치챘을텐데. 하여간 WinRT타입 개체들은 struct align이 x64일 … More pragma pack()실수 찾기 – pragma pack(show)

D = A()->B()->C(); 이게 뭔 ㅈ ㄹ 이고?

변수명이야 종교와 문화라고 생각하면 넘어갈 수 있다. 아래처럼 함수의 리턴값을 막바로 caller로 사용하는건 이해할 수 없다. A) width = pObjManager->GetInstance()->CalcRect()->GetWidth();   난 무조건 다음과 같이 짜는데 이유가 디버깅 때문이다. B) pInstance = pObjManager->GetInstance(); pRect = pInstnace->CalcRect(); width = pRect->GetWidth();   A) 처럼 짜면 짤때야 편하겠지. 타이핑을 몇 자라도 줄일테니까. 근데 디버깅할때, 특히 코드 분석하려고 디버거로 … More D = A()->B()->C(); 이게 뭔 ㅈ ㄹ 이고?

GPU를 이용한 PVS계산

[데모 설명] 카메라가 위치한 방에서 버튼을 눌러서 PvS를 계산한다. 이후 이 방으로부터 볼 수 있는 공간들은 노란색 와이어프레임으로 표시된다. 1. 월드 공간을 KD-Tree로 분할. 2. 삼각형과 교차하지 않는 공간이 leaf가 된다. 또는 특정 사이즈 이하로 공간이 작아지면 leaf가 된다. 3. leaf가 삼각형과 교차하는 경우 서브 트리로 분할. 서브트리에서 다시 삼각형과 교차하지 않는 leaf의 AABB만 수집 … More GPU를 이용한 PVS계산

Surface Pro X benchmark from the programmer’s point of view.

Windows on ARM I love Windows. Of course, I don’t have much attachment to Windows 3.1 and 95, but I really love Windows after the NT kernel. I also like Windows programming. Windows programming with Visual Studio is fun. So I was very excited when I heard about NT kernel-based Windows running on a CPU … More Surface Pro X benchmark from the programmer’s point of view.