Archive for the ‘DirectX’ tag
XBOX360으로 개발하기
제목은 거창하지만 그냥 엑박에 Hello, World 찍기까지의 여정(?) 정도다.
지난 주에 XBOX360 개발 머신이 도착했다. 개발 머신이라고 특별히 외관상 특이한 점은 별로 없다. 단지 원래의 엑박이 있고 그 윗부분에 개발에 필요한 디버거 컨트롤러쯤 되는 박스가 부착되어 있는 형태다. 그것 때문엔지 어댑터가 기존 엑박보다 좀 더 크고 전력 소모량도 좀 더 많다.
그러나 첫 번째 장벽은 콘센트가 3구라는거. 유저용 엑박의 콘센트로 연결해볼까 했지만 아예 어댑터 연결 쪽도 3구로 되어 있었다. 콘센트의 한 쪽을 분질러 버리기에는 너무 단단한 스타일이라서 올인원 어댑터 주문해서 그 다음 날 드디어 연결할 수 있었다.
원래 XNA를 통한 개발은 장난 삼아 해본 경험이 있었는데, XDK에 의한 개발 방식도 비슷하다. 개발은 PC에서 VS 2005를 통해서 하고 디버깅 시, 연결된 개발 머신에 바이너리 및 리소스가 업로드 되어 실행된다. 즉, 일종의 원격 디버깅 형태이다. 물론 VS 2005의 모든 디버깅 기능은 사용 가능한 것으로 보인다. 다만, 몇 가지 차이점이 있다. 디스어셈블 뷰에서 보이는 어셈블러가 PowerPC/VMX128 이고, 엑박 프로젝트의 경우 VS 2005가 메모리 뷰에서 자동적으로 빅 엔디안으로 맞춰준다. 레지스트 이름도 역시나 PowerPC 걸로 보여준다.
디버깅에서 가장 애먹는건, 크래시가 났을 경우.. 황당하게도 엑박이 리부팅 되어 버린다. 문서 상에서는 복구할 수 없는 에러 종류에 한해서 그렇다는 이야기가 애매하게(…) 적혀 있는데, 실제로는 일반적인 힙에 생성한 메모리에 대해 access violation이면 100% 발생한다. 이 경우 엑박이 대충 20~30초 정도 뒤에 다시 디버깅 가능한 상태로 돌아오는데.. 솔직히 뷁한 상황인 듯..
사실 가장 궁금했던 건 기존 PC에서 개발하는 소스를 얼마나 그대로 쓸 수 있는가 하는 것이다. 특히 슬쩍 들었던 이야기가 엑박에서 고정 파이프라인을 사용하는 것이 제한적이라는 말이 있어서 확인을 해봤더니.. 제한은 개뿔.. 못 쓴다. Texture나 Lighting 관련된 RenderState가 아예 없다. 결국 Shader 기반으로 전부 개발을 해야 한다. 참고로 사라진 함수나 구조체, enum 값을 보면.. (이런거 공개해도 상관 없겠지?)
Methods
The following methods have been removed:
- IDirect3DDevice9::GetLight
- IDirect3DDevice9::GetLightEnable
- IDirect3DDevice9::GetMaterial
- IDirect3DDevice9::GetTextureStageState
- IDirect3DDevice9::GetTransform
- IDirect3DDevice9::LightEnable
- IDirect3DDevice9::MultiplyTransform
- IDirect3DDevice9::SetLight
- IDirect3DDevice9::SetMaterial
- IDirect3DDevice9::SetTextureStageState
- IDirect3DDevice9::SetTransform
Structures
The following structures have been removed:
- D3DLIGHT9
- D3DLIGHTTYPE
- D3DMATERIAL9
Enumerations
The following enumerations have been removed:
- D3DTEXTUREOP
- D3DTEXTURESTAGESTATETYPE
In addition, the following constants have been removed from the D3DRENDERSTATETYPE enumeration:
- D3DRS_AMBIENT
- D3DRS_AMBIENTMATERIALSOURCE
- D3DRS_COLORVERTEX
- D3DRS_DIFFUSEMATERIALSOURCE
- D3DRS_EMISSIVEMATERIALSOURCE
- D3DRS_FOGCOLOR
- D3DRS_FOGDENSITY
- D3DRS_FOGENABLE
- D3DRS_FOGEND
- D3DRS_FOGSTART
- D3DRS_FOGTABLEMODE
- D3DRS_FOGVERTEXMODE
- D3DRS_INDEXEDVERTEXBLENDENABLE
- D3DRS_LIGHTING
- D3DRS_LOCALVIEWER
- D3DRS_NORMALIZENORMALS
- D3DRS_POINTSCALE_A
- D3DRS_POINTSCALE_B
- D3DRS_POINTSCALE_C
- D3DRS_POINTSCALEENABLE
- D3DRS_POINTSPRITEENABLE
- D3DRS_RANGEFOGENABLE
- D3DRS_SPECULARENABLE
- D3DRS_SPECULARMATERIALSOURCE
- D3DRS_TEXTUREFACTOR
- D3DRS_TWEENFACTOR
- D3DRS_VERTEXBLEND
In addition, the constant D3DDECLUSAGE_POSITIONT has been removed from the D3DDECLUSAGE enumeration.
Constants
The following constants have been removed:
- D3DFVF_XYZRHW
- D3DTA_ALPHAREPLICATE
- D3DTA_COMPLEMENT
- D3DTA_CONSTANT
- D3DTA_CURRENT
- D3DTA_DIFFUSE
- D3DTA_MODIFIERMAX
- D3DTA_SELECTMASK
- D3DTA_SELECTMAX
- D3DTA_SPECULAR
- D3DTA_TEMP
- D3DTA_TEXTURE
- D3DTA_TFACTOR
- D3DTSS_TCI_CAMERASPACENORMAL
- D3DTSS_TCI_CAMERASPACEPOSITION
- D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR
- D3DTSS_TCI_PASSTHRU
- D3DTSS_TCI_SPHEREMAP
보는 바와 같이.. 훗.. 이거 삭제된 내용이다. 헷갈리면 안됨..
결론은 고정 파이프라인은 아디오스.. PC하고 같은 렌더러를 쓰려면 PC 버전도 Shader로 가야 하나?
샘플은 엄청 많다. 2007년 8월 XDK 기준 대략 150개 가량 된다. 이 중 Windows DirectX SDK의 DXUtil이라고 할만한 라이브러리도 존재한다. DXUtil하고 비교하기엔 좀 무리가 있긴 하다. 씬 매니저, 충돌 처리, 사운드, 라이브 로그인, 리소스 핸들링 등의 기능을 제공하는 심플한 3D 엔진 프레임웍이 있으며, 대부분의 샘플이 이 프레임웍을 기반으로 하여 제공된다. Windows로 포팅할까 고민 중이다.
추가적인 내용은 앞으로 계속 정리 예정이지만.. 과연? -0-
The article has
9 responses