태그 : DirectX

PPT in Direct3D Test

일단 PPT 파일은 그럭 저럭 올라가는 것 같음

조금더 다양한 테스트 필요

using PowerPoint Automation, DirectX

by 일찍자라 | 2007/08/31 01:45 | Recently working | 트랙백(20) | 덧글(1)

다시 Direct3D

조금은 가물가물 하지만 :D

by 일찍자라 | 2007/08/08 13:00 | Recently working | 트랙백(11) | 덧글(2)

[DirectX]멀티 스레드를 이용한 리소스 로딩

게임을 하다보면 랙이라 불리는 게임의 메인루틴이 멈추는 순간이 있는데 이는 파일입출력, 버퍼 생성, d3d Surface 락, 생성등의 작업 수행시 일어나는 불가피한  게임 메인루틴의 지연순간을 말하는 것이다.

일단 리소스의 정의는 파일에서 읽어들이는 데이터라고 한정을 하고 게임내 리소스 객체들의 로딩및 생성시에,  로딩루틴과 메인루틴을 분리하여, 메인루틴의 지연현상을 없애는 방법 2가지를 알아 보자.

1. 맵단위나 존단위로 리소스를 분류한뒤, 맵에 들어갈 시나, 존 이동시에
 전에 들고있던 리소스들을 릴리즈 시키고, 새 맵의 데이터를 로딩하는 방법.

2.  맵을 일정크기로 나누고(sector,block) 실시간으로 일정범위안에 들어
있는 리소스들을 로딩하고, 일정범위를 벗어난 객체들을 릴리즈시크는 방법.

1번의 방법의 경우, 처음 시작시에 리소스들을 다 로딩하므로 실제 게임시 맵의 교체가 없다면 로딩에 의한 지연 현상이 없지만 이 방법은 맵의 규모와  맵안에 존재하는 리소스의 양에 비례해서 로딩시간이 길어지고, 모든 리소스들을 들고 있어야 하므로 메모리를 많이 차지하여 클라이언트가 무거워지고, 고가상메모리까지 사용함으로써 하드디스크 스와핑까지 일어나 전체적속도가 급격히 떨어지는등.. 일정규모 이상의 맵이나 리소스를 가지는 게임의 경우 사용하기 부적합한 방법이라 할 수 있다.

2번의 방법은 실시간 리소스 처리를 함으로 메모리 사용량이 적고 맵에 처음 들어 갈 시에 리소스 로딩 타임이 없다라는 장점이 있지만, 리소스 객체의 생성 및 로딩타임이 소요되므로, 섹터나 일정단위를 넘어갈 때마다 지연현상이 발생되게 된다.보통 D3D 리소스들의 처리에 관련된 부분인데 D3dD Device를 일반적으로 생성시에 멀티스레드 안정성 보장이 되지 않는데 Texture를 예로 들면, Process Thread에서 Texture Surface를 생성시 그 순간에 Device가 놀고있어서 생성되면 다행이지만  만일 Draw Call 이나 다른작업을 수행하고 있었다면 Surface 생성 실패가 된다고 한다. 

따라서 D3D Device 생성시에 D3DCREATE_MULTITHREADED라는 옵션을 줘서 Device Locking 작업시에 전역 크리티컬 섹션을 걸수 있게 되어있기는 하지만 이 옵션으로 객체 생성시에 퍼포먼스 저하의 우려가 있고 거기다 D3D Buffer Pool 이나 등등의 엔진내 모든 부분에서 멀티스레드 작업을 염두해 둔다는 것은 여간 번거롭고 여러명이서 코딩을 해나가는 팀작업에서는 위험한 일이라고 한다.

..라고는 하지만 D3DCREATE_MULTITHREADED를 줘서 간단하게 해결을 했다. 대형 게임을 제작한다면 모를까 지금 내가 하고 있는 작업은 이정도로도 충분할 것 같네~^^  동영상 랙 문제는 이걸로 해결~~

//출처 : http://blog.naver.com/wizardbug/10026916

by 일찍자라 | 2006/08/05 01:11 | Knowledge-Warehouse | 트랙백(11) | 덧글(3)

◀ 이전 페이지          다음 페이지 ▶