프랭크루나의 책으로 하던중 6장 예제에서 오만가지 오류에 며칠동안 허덕임, 구DXSDK를 쓰는것과 안쓰는것 둘다 개삽질한 결과 안쓰는 방법으로 성공


참고한 링크

1.http://www.gpgstudy.com/gpgiki/Visual_Studio_2015%EC%97%90%EC%84%9C_%EC%98%88%EC%A0%9C_%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0#step_by_step

2.https://github.com/progsecu/DirectX11_Examples/

3.http://m.blog.daum.net/maru09/3034716

4.http://www.d3dcoder.net/Data/Book4/d3d11Win10.htm

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

※파일 안에 필요없는 코드가 있을 수도 있음

※※실행시 오류창이 뜸(효과파일을 실행시점에서 컴파일 않고 빌드 과정에서 컴파일하면 안뜸)

※※※하도 여기저기 뜯어고쳐서 어딜 어떻게 고쳤는지 기억 안나는 부분도 있으므로 설명을 보는것보단 파일받고 비교하는게 빠를 수도 있음

※※※※상자, 언덕, 도형, 해골 실행완료

boxDemo.cpp

color.fx

d3dApp.cpp

d3dApp.h

d3dUtil.cpp

d3dUtil.h

d3dx11effect.h

DDSTextureLoader.cpp

DDSTextureLoader.h

GameTimer.cpp

GameTimer.h

MathHelper.cpp

mathhelper.h

dxerr.cpp

dxerr.h

위에 DDSTextirtLoader 가 들어가는데 이는 d3dx11.h의 D3DX11CreateShaderResourceViewFromFile을 대체하기 위해서이며

d3dutil.cpp에 CreateDDSTextureFromFile가 들어간다


모든 변경파일은 위에 링크해둔 깃허브에 들어가셔서 받아도 됩니다


1.프로젝트 -> 구성속성 -> 링커 -> 입력 -> 추가 종속성 Effects11d.lib; 추가(디렉터리는 구DXSDK를 안쓰기에 안건들임)


2.D3DUtil.h 의 HR 정의 부분에 들어가서 수정.(링크 참고)

https://alexjadczak.wordpress.com/2014/05/18/updating-directx-11-to-windows-8-0-sdk/

(확인해본결과 링크처럼 길게안하고 __FILE__ 을 __FILEW__로 바꿔줘도 실행잘됨)

#if defined(DEBUG) | defined(_DEBUG)

#ifndef HR

#define HR(x)                                              \

{                                                          \

HRESULT hr = (x);                                      \

if(FAILED(hr))                                         \

{                                                      \

DXTrace(__FILEW__, (DWORD)__LINE__, hr, L#x, true); \

}                                                      \

}

#endif


#else

#ifndef HR

#define HR(x) (x)

#endif

#endif



#include <d3dx11.h>, #include <xnamath.h> 삭제

#include <dxerr.h> -> #include "dxerr.h" 수정


#include <d3d11.h>

#include <dxgi.h>

#include <DirectXmath.h>

#include <DirectXPackedVector.h>

#include "DDSTextureLoader.h"

5개 추가


3.boxDemo.cpp 에서 XMFLOAT4추가

Vertex vertices[] =

{

{ XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT4((const float*)&Colors::White) },

{ XMFLOAT3(-1.0f, +1.0f, -1.0f), XMFLOAT4((const float*)&Colors::Black) },

{ XMFLOAT3(+1.0f, +1.0f, -1.0f), XMFLOAT4((const float*)&Colors::Red) },

{ XMFLOAT3(+1.0f, -1.0f, -1.0f), XMFLOAT4((const float*)&Colors::Green) },

{ XMFLOAT3(-1.0f, -1.0f, +1.0f), XMFLOAT4((const float*)&Colors::Blue) },

{ XMFLOAT3(-1.0f, +1.0f, +1.0f), XMFLOAT4((const float*)&Colors::Yellow) },

{ XMFLOAT3(+1.0f, +1.0f, +1.0f), XMFLOAT4((const float*)&Colors::Cyan) },

{ XMFLOAT3(+1.0f, -1.0f, +1.0f), XMFLOAT4((const float*)&Colors::Magenta) }

};

4.color.fx파일 설정 

효과파일 -> 속성 -> 구성속성 -> 일반 -> 항목형식 -> HLSL 컴파일러

구성속성 -> HLSL 컴파일러 -> 셰이더 형식 -> 효과

구성속성 -> HLSL 컴파일러 -> 셰이더 모델 ->Shader Model 5.0


fx파일을 빌드과정에서 컴파일 해서 사용할려면,

예를들어 다음과 같은코드라면



효과파일 -> 속성 -> HLSL컴파일러 -> 출력파일 -> 개체 파일 이름 -> $(RelariveDir)%(Filename).fxo

여기까지 해주면 실행이 잘 되고

/Od /Zi /Fc는 각각 HLSL컴파일러 -> 일반에서 최적화 사용안함(Od), 디버깅 정보 사용(Zi),

HLSL컴파일러 -> 출력파일에서 어셈블리 출력(Fc)설정 해주면 된다

여기서 그냥 컴파일 하면 Missing required argument <AssemblerOutputFile> for property <AssemblerOutput> which is set to AssemblyCode.

이라는 오류가 뜨는데

<어셈블리 출력> 밑에 <어셈블리 출력 파일>에 원하는 파일 이름을 넣어주면 된다 

책에 나온 '설명' 부분과 과 명령줄 fxc 는 따로 하지 않는다

효과파일을 쓰기 위해서는 Effects11.lib, Effects11d.lib가 필요하다 이게 윈도우SDK 어딘가에 숨겨져서 기본적으로 포함을 안하는건지 아예 존재안하는 지는 몰르겠지만 Directx SDK나 Common파일에서 가져오면 된다


5.프로젝트 -> 구성속성 -> 일반 -> 문자집합 -> 유니코드 문자 집합 사용


6.boxDemo에서 #include <d3dcompiler.h> 추가 

D3DX11CompileFromFile 대신 D3DCompileFromFile사용


HRESULT hr = D3DX11CompileFromFile(L"FX/color.fx", 0, 0, 0, "fx_5_0", shaderFlags, 0, 0, &compiledShader, &compilationMsgs);

HRESULT hr = D3DCompileFromFile(L"color.fx",0, 0, 0, "fx_5_0", shaderFlags, 0, &compiledShader, &compilationMsgs);


__FILE__ 대신 __FILEW__ 사용


if (FAILED(hr))

{

DXTrace(__FILE__, (DWORD)__LINE__, hr, L"D3DX11CompileFromFile", true);

}                                        

if (FAILED(hr))

{

DXTrace(__FILEW__, (DWORD)__LINE__, hr, L"D3DX11CompileFromFile", true);

}