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-
Comments
9 Comments on XBOX360으로 개발하기
-
eslife on
Tue, 23rd Oct 2007 7:46 AM
-
오스카 on
Tue, 23rd Oct 2007 9:37 PM
-
nagne on
Wed, 24th Oct 2007 12:22 AM
-
오스카 on
Wed, 24th Oct 2007 4:27 AM
-
김민수 on
Wed, 24th Oct 2007 4:40 AM
-
오스카 on
Wed, 24th Oct 2007 6:13 AM
-
오스카 on
Wed, 24th Oct 2007 6:41 AM
-
epiphany on
Tue, 6th Nov 2007 8:59 AM
-
오스카 on
Tue, 6th Nov 2007 7:16 PM
PC 와는 다른 이기종에서 프로그램하는것은 쉬운일이 아니겠죠. 94년인가, 처음 요 업계에 일할때는 일본 OS 에 일본에서 만든 하드웨어를 다루는 일을 했더랬습니다. 참 난감하고 힘든때였던든듯.. 자료도 없고 해서 한참 고생했거든요..
XBOX 는 그나마 2005로 개발도 가능하니 다행이다 싶은데, 글을 보니 고생길이 훤하네요..
그래도 참 재미있는 일을 하시는 것 같아 부럽습니다 ^^;
새로운 플랫폼에서 개발한다는게 뭐.. 어쩔 수 없죠.
그래도 PS3에 비해서는 훨씬 편하다는데 위안을;;;
사실 뭐, 개발 환경만 놓고 봤을 때는 이 정도면 훌륭하다고 생각하고 잇습니다. ^^
무슨 일을 하시는 분인지 궁금하네요..^^
엑박 개발머신을 혹시 일반인도 구매할 수 있나요?
저도 콘솔 게임기 기반으로 프로그래밍을 해보고 싶군요..^^
엑박 개발머신은 개인이 구매할 순 없을겁니다. MS가 나름 까다롭게 자신의 타이틀을 내놓을 수 있을것인가 하는 걸 평가하는데(물론 메이저의 경우 MS가 만들어주세요 하기도 하죠) 꽤 이것저것 보는거 같더군요. 게다가 이 개발머신이 해킹을 막을려고 별 제한을 다 걸어놨는데, 그렇다 해도 이쪽에 관심있는 해커에게 이런거 던져 주면 결과가 볼만하겠죠. -0-
게다가 개발머신의 가격은 (EA처럼 수백대를 한 번에 구매하지 않는 이상은) 에누리 없이 1000달러입니다. 개인이 취미로 구매하기에는 비싸죠. 다만, 엑박의 경우 XNA라는 개발 플랫폼이 따로 또 있습니다. C# 기반으로 개발을 할 수 있습니다. http://www.xna.com 을 참고하시면 됩니다. XDK와는 다르게 짧은 기간이지만 공개된 자료도 상당히 많습니다.
블로그 방문해주셔서 감사합니다. ^^
STL은 러시아 출신의 SGI 소속 프로그래머였던 Alexander Stepanov 의 연구결과물입니다. STLport 니 하는것도 SGI의 STL을 Potable 하게 만든 것이고요
가격을 잘못 썼네요. 원화로 적을까 하다가 달러로 표기한다는게 1000달러라고.. -0- 1만 달러입니다. 현재는 910만원 정도겠죠. 추가로 관세는 따로 내야 합니다.
SGI IRIX 가지고 놀면서 처음 STL을 알았었는데.. SGI의 STL에 이런 비하인드 스토리가 있었군요. 처음 알았습니다. -0- 전 그냥 SGI의 개발 그룹에서 STL을 만들고 이게 STLPort로 발전(?) 되었다고 알고 있었거든요. dinkumware의 STL 구현물은 또 다른 이야기이지만~ (최근에 보니 TR1을 100% 구현한 라이브러리를 판매 중이더군요)
어쨌든 generic style 컨셉의 발전 역사에 대해서 새롭게 알았습니다. 방문 감사드려요~
가장 아쉬운 점은 상용 게임 실행이 안된다는 거..
게임 하지말고 개발이나 하라는걸까요…llotz
테스트킷에, 리테일킷에 수십대의 삼돌이 콘솔이 스튜디오에 나뒹굴…..
그러게요. 뭐, 크래킹 때문에 그랬겠지만… 아쉽.
조만간 테스트 킷들도 도착할거 같네요. ^^
