본문 바로가기

MS/DirectX

D3DFont 성능 D3DXFont를 사용 하다가 글자 수와 Call 횟수가 많아 질 수록 Performance가 확연히 느려지는 현상이 있어 이것저것 자료를 찾아보다가 비교적 좋은 정보가 있어서 공유 합니다. Directx SDK를 설치하면 기본적으로 Sample에 있다는 CD3DFont인데 제가 설치한 Directx SDK(June, 2010) 버전에는 존재 하지 않아서, 구글링 하여 소스를 받아 두었습니다. D3DXFont를 사용 하는 것 보다 10배정도 빨라진 것 같은데요. (물론 저의 환경은 2D 이미지 처리를 다채널로 하는 거라 경우에 따라 측정 결과가 틀릴 수 있습니다만..) 상당히 괜찮은 것 같습니다. DirectX에서 d3d9xcore.h에 있는 기능들은 D3D9를 Customizing 하여 만든 거라서 P.. 더보기
DX Sprite 사용법 ID3DXSprite(이하 스프라이트) Interface는 다이렉트 엑스에서 2D이미지를 그리기 편하게 해주는 인터페이스 입니다. 주로 UI를 그리거나 하는 평면 이미지를 그릴때 사용하는데, 3D상의 카메라에 2D이미지가 붙어 있다고 생각하시면 편합니다. 카메라를 움직이면 3D공간의 물체는 이동하지만 카메라에 붙은 2D이미지는 변함이 없는 것이지요. 여기서는 이 유용한 스프라이트 객체의 사용법에 대하여 알아보겠습니다. 1. 스프라이트 객체 생성과 해제 // 생성하기LPD3DXSPRITE pSprite; D3DXCreateSprite(pd3dDevice, &pSprite); 스프라이트를 생성할때는 D3DXCreateSprite함수를 사용합니다. 함수를 간단히 살펴보면 HRESULT WINAPI D3DXCr.. 더보기
D3DXFont::DrawText 완전 느림... 겁나 느리다.. 초당 380fps정도밖에 출력 되지 않는 것 같다.. 물론 Text 개수와도 충분히 연관이 있다. 그래서 구글링 네이버년한테 검색을 좀 해봤는데 참고1 : http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=4&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=1123 참고2 : http://www.gpgstudy.com/forum/viewtopic.php?t=1202 이런 내용들이.. 더 빠른 혹은 더 많은 기능을 가진 것을 원한다면 자체글꼴렌더러를 만들어도 됩니다만.... ID3DXFont자체는 그렇게 느리지 않습니다.... 우선....이걸 .. 더보기
DirectDraw - SetClipper (2) 사실 Direct Draw Clipper는 상당히 쉬운 개념이지만... 나름대로 처음에 개념잡기는 힘든 편입니다. 흠... 일반적인 DirectX 관련 서적에 보면, Clipper 에 대한 부분은 클리퍼를 생성하는 함수만 달랑 제시해 놓고, 이걸 불러다 쓰면 되는거야! 라고만 합니다. Clipper 생성에 대한 자세한 내용은 독학으로 하시는 분들은 솔직히 얻기가 힘들죠. 뭐... 그렇다고 해서 Clipper가 어렵다는 것은 절대로 아닙니다. 단지 조금 난해한 구조체의 구조와 rcBound라는 것에 대한 개념이 초보 프로그래머들을 혼란스럽게 만드는 것이 가장큰 난관이죠. 후후... 초반부터 너무 겁주기 전법으로 나가는 것 같네요. 근데... 사실 알고보면 정말 정말 쉬워요^^; 자, 오늘은 직접 클리퍼를 .. 더보기
DirectDraw - SetClipper (1) Clipper의 필요성에 대해선 조금 그림을 통한 부가 설명이 필요 할 것 같아서 제가 이미지를 하나 또 준비했습니다. 하하^^; 자, 위 그림을 한번 보세요. 만약 위처럼 블리팅을 시도했다면, 화면에는 두더지가 반밖에 그려지지 않았겠죠. 그러나 사실 알고보면 메모리상에는 나머지 반의 부분도 존재합니다. 두더지 이미지의 사이즈는 총 11KB입니다. 그런데 딱 절반밖에 보이질 않으므로, 나머지 5.5KB는... 보이지도 않는데 괜히 메모리만 낭비하고 있는 셈이 되겠군요. 문제는 그것뿐이 아닙니다. 자, 두더지의 이미지 크기를 계산하기 쉽게 100*100이라고 생각해 봅시다. 블리팅을 할때, 1 픽셀을 그려주는데 1초가 걸린다고 치면... 100*100의 이미지를 그려주는데는 무려 10000초가 걸리게 됩니.. 더보기