Client 프로젝트
이제 각 프로젝트별로 namespace정의를 사용할것이기때문에 편하게 사용하기위해 매크로를 정의해서 사용
1.엔진 프로젝트에 Defines 폴더에 Engine_Macro 생성
2.Engine_Defines.h 에 매크로 include
#define BEGIN(NAME) namespace NAME {
#define END }
을 통해 이제 매크로를 사용해서 네임스페이스를 정의
엔진안에 정의한 의유 엔진에서도 사용할수있고 클라이언트에서도 사용할수있게 하기위함
라이브러리 업데이트를 하면 헤더가 레퍼런스 폴더로 복붙
클라이언트 프로젝트에 namespace를 BEGIN(Client)로 변경
Engine_Defines 에 using namespace Engine 추가
Engine_Typedef.h에 기본자료형들 재정의
d3d9 과 d3dx9의 차이점 : d3d9는 기본적인 인터페이스 요소들이 정의 x9는 확장된 추가정의들이 포함됨
d3dx9과 같은 경우에는 개발자의 편의를 위해 굉장히 다양할 기능들이 정의 되어있음(사용하지않을 기능들이 다수)프로젝트가 무거워짐 -> 프레임드랍의 원인이 될수있음
필요한 기능이있을때마다 그에 필요한 헤더를 추가해주는게 추세임
엔진의 링크에 입력 추가 종속성 d3d9.lib d3dx9.lib
c++ 일반 -> 추가포함 디렉터리 -> 프로그램파일즈 SDK inc
링커 일반 추가 라이브러리 디렉토리 c -> sdk -> lib 64비트 추가
64비트로 다 변경해주어야함
D3DXVECTOR3_DERIVED 를 만들어서 D3DXVECTOR3를 상속받아서 만들어주고 여러 편의용함수를 추가하는것도 좋음
하지만 다른함수의 인자로 넘길때 캐스팅해줘야되는등 불편한점이 생길수있음
매크로에서 MSFBOX 함수도 추가
9. Engine_Function.h 추가
Safe_Delete,Safe_Delete_Array 템플릿함수로 정의
삭제가아닌 레퍼런스 카운트를 참조해 삭제할경우의 함수도 정의
Safe_Release(T& pInstance)
Safe_AddRef(T& pInstance) 도 추가
링커 일반 라이브러리 다렉터리 SDK lib 64
11.Client_Defines폴더 추가
using namespcae Client
MainApp 클래스
HRESULT 네이티브컨스트럭트(기존의 레디함수의 역할) 함수 추가
Create 함수에서 동적할당후 네이티브 컨스트럭트함수호출
Client.cpp 에서 다 사용후 Release(MainApp)호출
그래픽디바이스 엔진에 추가
00.System 필터 추가
Graphic,input,sound 이동
Define_macro에 싱글톤 관련 함수 추가
싱글톤도 레퍼런스카운터 관리가 필요한가? 객체화가 한번될뿐 계속 참조수가 늘어나기때문에 필요하다.
엔진 일반에 public 참조 디렉토리 추가
1.그래픽 디바이스 가상함수 추가
2.엔진에서는 윈도우핸들 사용할수없음
MainApp.cpp
에서 NativeConstruct안에서 레디 그래픽디바이스 해줘도되지만 더편의성을 늘릴수있음
클라이언트 디파인에 g_hwnd 익스턴으로 추가
const wincx,wincy도 추가
레디 그래픽 디바이스 함수 호출해도 에러 발생 : 그래픽 디바이스가 라이브러리에 들어가지않았기떄문
그래픽 디바이스의 선언부의 ENGINE_DLL 추가
엔진 프로젝트에서
유틸리티 필터
GameInstance 클래스 추가 (이 클래스를 이제 대표해서 라이브러리화 할것임)
싱글톤으로 클래스 정의
멤버변수로 그래픽디바이스클래스의 포인터를 가짐
게임 인스턴스 안테 그래픽 디바이스를 레디하는 함수를 가짐
싱글톤으로 선언하는 순간 m_pInstance를 멤버변수로 가지고 이에 자기 자신의 주소를 저장함
게임인스턴스에서 그래픽 디바이스를 사용하므로 그래픽 디바이스의 레퍼런스 카운트를 증가 시켜줘야함
객체화된 클래스의 주소를 보관하고 있는 멤버변수가있다면 반드시 릴리즈가 일어나야 한다.
게임인스턴스 안 레디 그래픽 디바이스 구현
만약 그래픽 디바이스가 널포인터가 아니라면 멤버변수 m_pg에서 그래픽 디바이스 호출
MainApp에서 게임인스턴스 포함해주고
네이티브 컨스트럭트에서 가져온후 레디그래픽디바이스해줌
게임 인스턴스를 참조하면 필요한 엔진의 클래스들을 사용할수있게 만들어주는것이 목표
#pragma region 지역명
#pragma endregion
을 통해 지역을 나눠줌 그냥 표시해주는 용도