[DX11 입문 서문] 예제에 관해서 질문입니다.

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

비회원

예제에 관해서 질문입니다.

Post by 비회원 »

이제 막 다이렉트x 공부를 시작했습니다.
책을 보면서 따라하다가 서문에서 directx에 관한 설정을 한 후 에 box예제를 실행하는 곳이 있습니다.
책 내용대로 box예제를 사용했는데 오류가 이렇게 자꾸 뜹니다. "error X3501: 'main': entrypoint not found"

visual pro 2013을 사용하고 있고요 제대로 win32프로젝트로 만들고 실행했습니다.
윈도우만 띄우는 예제는 잘 실행이 됩니다.

셰이더에 문제가 있는거 같은데 셰이더 모델도 레벨 5로 설정해봤습니다.

답변 부탁드립니다.
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

셰이더 형식을 효과(/FX)로 설정하셨는지요? (서문 p.xxxi 역주 참고).

역주에 언급된 새 Effect11 라이브러리에 관해서는 viewtopic.php?p=127634#127634 도 참고하시고요...
비회원

Post by 비회원 »

color.fx를 올리고 셰이더 모델 5(/5_0)로 설정했으며
Effect11 라이브러리도 새로 빌드해서 넣었습니다만

계속 같은 문제가 발생하네요.
visual 2010으로 가야하나요?
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

사실 서문의 예제는 fxc를 사용하지 않고 실행 시점에서 fx 파일을 직접 컴파일하니 color.fx 파일을 빌드 대상에서 아예 빼도 됩니다면 근본적인 해결책은 아니겠고요.

일단... 프로젝트 탐색기에서 color.fx를 오른쪽 클릭해서 직접 컴파일해 보시고요. 셰이더 컴파일 명령이 아래와 부합하지 않으면 사용자 지정 빌드 설정을 적절히 수정해 보세요.

(예제 코드 모음의 Notes.txt에서 발췌)

FXC Call
--------
a) Debug mode: fxc /Fc /Od /Zi /T fx_5_0 /Fo "%(RelativeDir)\%(Filename).fxo" "%(FullPath)"
b) Release mode: fxc /T fx_5_0 /Fo "%(RelativeDir)\%(Filename).fxo" "%(FullPath)"

a) Debug Description: fxc compile for debug: %(FullPath)
b) Release Description: fxc compile for release: %(FullPath)

Outputs: %(RelativeDir)\%(Filename).fxo



저는 VS 2013 Express로 여러 예제들을 성공적으로 빌드, 실행할 수 있었습니다. Express로 되는 것이 Pro로 안 될 것 같지는 않으니 차근차근 다시 시도해 보시길~ (DX SDK와 Effect11 라이브러리, Widows SDK 관련 설정들도 다시 살펴보시고요.)
비회원

Post by 비회원 »

류광 wrote:사실 서문의 예제는 fxc를 사용하지 않고 실행 시점에서 fx 파일을 직접 컴파일하니 color.fx 파일을 빌드 대상에서 아예 빼도 됩니다면 근본적인 해결책은 아니겠고요.

일단... 프로젝트 탐색기에서 color.fx를 오른쪽 클릭해서 직접 컴파일해 보시고요. 셰이더 컴파일 명령이 아래와 부합하지 않으면 사용자 지정 빌드 설정을 적절히 수정해 보세요.

(예제 코드 모음의 Notes.txt에서 발췌)

FXC Call
--------
a) Debug mode: fxc /Fc /Od /Zi /T fx_5_0 /Fo "%(RelativeDir)\%(Filename).fxo" "%(FullPath)"
b) Release mode: fxc /T fx_5_0 /Fo "%(RelativeDir)\%(Filename).fxo" "%(FullPath)"

a) Debug Description: fxc compile for debug: %(FullPath)
b) Release Description: fxc compile for release: %(FullPath)

Outputs: %(RelativeDir)\%(Filename).fxo



저는 VS 2013 Express로 여러 예제들을 성공적으로 빌드, 실행할 수 있었습니다. Express로 되는 것이 Pro로 안 될 것 같지는 않으니 차근차근 다시 시도해 보시길~ (DX SDK와 Effect11 라이브러리, Widows SDK 관련 설정들도 다시 살펴보시고요.)
fx파일을 빌드대상에서 빼면 외부기호를 참조 할 수 없다고 합니다.
오류 169 error LNK2019: _D3DX11CreateEffectFromMemory@20 외부 기호(참조 위치: "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ) 함수)에서 확인하지 못했습니다.

fx파일을 직접 컴파일 해보면 역시 처음 문제와 같이 main 진입점을 찾을 수 가 없다고 합니다.
우선 내일까지 다이렉트 SDK와 effect11.lib를 다시 다운받고 설정하는 것까지 해보겠습니다
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

6장 BoxDemo.cpp 보면 이런 부분이 있습니다.

Code: Select all

	HRESULT hr = D3DX11CompileFromFile(L"FX/color.fx", 0, 0, 0, "fx_5_0", shaderFlags, 
		0, 0, &compiledShader, &compilationMsgs, 0);
fxc는 fxo 파일을 만들기 위한 것인데, 위의 코드에서 보듯이 Box 예제는 실행 시점에서 color.fx를 직접 컴파일하므로(그리고 그 예제에서 셰이더는 color.fx 뿐이므로) fxc와는 무관합니다.

반면 예를 들어 제8장의 TexturedHillsAndWaves 예제는

Code: Select all

BasicFX = new BasicEffect(device, L"FX/Basic.fxo");
처럼 fxo 파일을 사용하므로 fxc 과정이 꼭 필요합니다. 솔루션 탐색기의 color.fx 오른쪽 클릭 - 속성 - 사용자 지정 빌드 도구 - 일반 - 명령줄에 있는 fxc 옵션들을 잘 조정해 보세요.

_D3DX11CreateEffectFromMemory 링크 오류는 fxc와는 무관하고, 단지 이전에는 fxc 컴파일을 넘기지 못했는데 이번에는 링크 과정까지 도달해서 링크 오류가 난 것이 아닌가 합니다. 아마도 Effect11 라이브러리가 제대로 링크되지 않았거나 Effect11의 빌드 자체에 문제가 있었을 가능성이 크니 잘 살펴보세요. 참고로 디버그 모드에서 참조하는 라이브러리 파일의 이름은 Effects11d.lib입니다.
비회원

Post by 비회원 »

미치겠네요

directx sdk를 다시 설치하고 effect11.lib와 effect11d.lib를 다시 빌드한 후에 common폴더와 directx sdk lib 폴더에 넣고
color.fx의 속성에서 사용자 설정 빌드로 설정한 후
사용자 설정 빌드에서 (현재 디버그 모드를 사용하므로) 명령줄에는 fxc /Fc /Od /Zi /T fx_5_0 /Fo "%(RelativeDir)\%(Filename).fxo" "%(FullPath)" 를 넣고
설명에는 fxc compile for debug: %(FullPath) 를 넣고
출력에는 %(RelativeDir)\%(Filename).fxo 를 넣었습니다.

그런데

1> fxc compile for debug: C:\Users\User\documents\visual studio 2013\Projects\dxExample\FX\color.fx
1> Microsoft (R) Direct3D Shader Compiler 9.29.952.3111
1> Copyright (C) Microsoft Corporation 2002-2009. All rights reserved.
1>
1> compilation succeeded; see color.cod
1> compilation succeeded; see C:\Users\User\documents\visual studio 2013\Projects\dxExample\FX\color.fxo
1>BoxDemo.obj : error LNK2019: _D3DX11CreateEffectFromMemory@20 외부 기호(참조 위치: "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ) 함수)에서 확인하지 못했습니다.
1>C:\Users\User\documents\visual studio 2013\Projects\dxExample\Debug\dxExample.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.

자꾸 BoxDemo.obj 가 문제를 일으킵니다.

ㅠㅠ
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

이상하네요. 한 가지 의심해 볼만한 것은 ...

Effects11은 CodePlex에 있는 갱신된 버전을 빌드하신거죠? 책 예제의 D3DX11CreateEffectFromMemory는 인수가 총 5개인데 CodePlex에 있는 갱신된 Effects11의 D3DX11CreateEffectFromMemory는 인수가 6개입니다( https://fx11.codeplex.com/wikipage?titl ... fects%2011 ). 마지막 인수가 기본 인수라서 컴파일은 문제가 없지만, 링크 시에는 C++ 이름 맹글링 때문에 링커가 뭔가 오해를 한 것일 수도 있습니다.

BoxApp::BuildFX()의

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX));

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX, nullptr));
로 바꾸면 뭔가 달라질 수도 있습니다. (그러나 VC++의 링커가 그렇게 어설플 것 같지는 않고요...)

어쨌든 실행 시점 효과 컴파일 및 적용에 관련된 오류는 Effects11 라이브러리의 문제일 가능성이 크니
https://fx11.codeplex.com/wikipage?title=Effects%2011 를 참고해서 여러 가지로 시도해 보시고, 결과도 꼭 공유해 주세요~
비회원

Post by 비회원 »

아예 안되네요
Effects11 최신버전을 다시 다운받고 lib파일들을 visual lib폴더 directx sdk lib폴더 common폴더에 다 넣어봐도 createeffectmemory가 계속 외부기호를 참조할 수 없다고 나타납니다.

이제 최후의 수단으로 visual 2010을 까는 수 밖에요...
또한 대학교 교수님에게도 도움을 구해야 할 거 같습니다.
비회원

Post by 비회원 »

류광 wrote:이상하네요. 한 가지 의심해 볼만한 것은 ...

Effects11은 CodePlex에 있는 갱신된 버전을 빌드하신거죠? 책 예제의 D3DX11CreateEffectFromMemory는 인수가 총 5개인데 CodePlex에 있는 갱신된 Effects11의 D3DX11CreateEffectFromMemory는 인수가 6개입니다( https://fx11.codeplex.com/wikipage?titl ... fects%2011 ). 마지막 인수가 기본 인수라서 컴파일은 문제가 없지만, 링크 시에는 C++ 이름 맹글링 때문에 링커가 뭔가 오해를 한 것일 수도 있습니다.

BoxApp::BuildFX()의

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX));

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX, nullptr));
로 바꾸면 뭔가 달라질 수도 있습니다. (그러나 VC++의 링커가 그렇게 어설플 것 같지는 않고요...)

어쨌든 실행 시점 효과 컴파일 및 적용에 관련된 오류는 Effects11 라이브러리의 문제일 가능성이 크니
https://fx11.codeplex.com/wikipage?title=Effects%2011 를 참고해서 여러 가지로 시도해 보시고, 결과도 꼭 공유해 주세요~
그리고 인수를 6개로 하면 HR이 인수가 너무 많다면서 받질 않고 무시하고 컴파일하면 createeffectfrommemory의 인수가 많다고 합니다
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

비회원 wrote:
류광 wrote:이상하네요. 한 가지 의심해 볼만한 것은 ...

Effects11은 CodePlex에 있는 갱신된 버전을 빌드하신거죠? 책 예제의 D3DX11CreateEffectFromMemory는 인수가 총 5개인데 CodePlex에 있는 갱신된 Effects11의 D3DX11CreateEffectFromMemory는 인수가 6개입니다( https://fx11.codeplex.com/wikipage?titl ... fects%2011 ). 마지막 인수가 기본 인수라서 컴파일은 문제가 없지만, 링크 시에는 C++ 이름 맹글링 때문에 링커가 뭔가 오해를 한 것일 수도 있습니다.

BoxApp::BuildFX()의

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX));

Code: Select all

	HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
		0, md3dDevice, &mFX, nullptr));
로 바꾸면 뭔가 달라질 수도 있습니다. (그러나 VC++의 링커가 그렇게 어설플 것 같지는 않고요...)

어쨌든 실행 시점 효과 컴파일 및 적용에 관련된 오류는 Effects11 라이브러리의 문제일 가능성이 크니
https://fx11.codeplex.com/wikipage?title=Effects%2011 를 참고해서 여러 가지로 시도해 보시고, 결과도 꼭 공유해 주세요~
그리고 인수를 6개로 하면 HR이 인수가 너무 많다면서 받질 않고 무시하고 컴파일하면 createeffectfrommemory의 인수가 많다고 합니다
lib 파일들만 갱신하고 헤더 파일들은 갱신 안 하셨나 보네요. 새 Effects11 프로젝트의 inc 디렉터리에 있는 .h 파일들을 예제 Common 디렉터리에 복사해야 합니다.
비회원

Post by 비회원 »

뭐죠 오히려 오류가 더 생겨버렸는데요 ㅠㅠ

-------------------------------------------------------------------------------------------------------------------------------------------
오류 29 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 30 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 31 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 60 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 61 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 62 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 91 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 92 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 93 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 122 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 123 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 124 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 153 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 154 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 155 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample

-------------------------------------------------------------------------------------------------------------------------------------------
이게 뭐죠
헤더파일을 갱신했더니 이런일이 발생했습니다
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

비회원 wrote:뭐죠 오히려 오류가 더 생겨버렸는데요 ㅠㅠ

-------------------------------------------------------------------------------------------------------------------------------------------
오류 29 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 30 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 31 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 60 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 61 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 62 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 91 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 92 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 93 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 122 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 123 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 124 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 153 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 154 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 155 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample

-------------------------------------------------------------------------------------------------------------------------------------------
이게 뭐죠
헤더파일을 갱신했더니 이런일이 발생했습니다
viewtopic.php?p=127636#127636 의 2번 문제일 수 있으니 경로 순서를 조정해 보세요.
비회원

Post by 비회원 »

계속 만져대도 안 되네요
effect를 빌드 할 때 vc디렉토리설정에서 포함디렉토리를 다이렉트 sdk include폴더를 라이브러리 디렉토리를 다이렉트 sdk lib x86폴더를 실행가능 디렉토리를 다이렉트 sdk 유틸리티 폴더를 지정해놓고 빌드 한 후 라이브러리들을 Common폴더에 넣고 예제를 빌드했더니 그대로 이거나 오류가 더 생겨버립니다.

지금 지쳐서 하루 쉬고 처음부터 다시 더 해본다음 vs2010으로 가야겠습니다.
비회원

Post by 비회원 »

비회원 wrote:뭐죠 오히려 오류가 더 생겨버렸는데요 ㅠㅠ

-------------------------------------------------------------------------------------------------------------------------------------------
오류 29 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 30 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 31 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 60 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 61 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 62 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 91 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 92 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 93 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 122 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 123 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 124 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample
오류 153 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 154 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다. c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1271 1 dxExample
오류 155 error C2061: 구문 오류 : 식별자 'DXGI_RGBA' c:\program files (x86)\windows kits\8.1\include\shared\dxgi1_2.h 1275 1 dxExample

-------------------------------------------------------------------------------------------------------------------------------------------
이게 뭐죠
헤더파일을 갱신했더니 이런일이 발생했습니다
다시 처음부터 해봤습니다.
win32 프로젝트를 만들고 예제파일들을 다 추가한 후에 VC디렉토리와 링커\입력\추가종속성을 설정한 다음
Effect11를 빌드할 때 포함디렉토리와 라이브러리 디렉토리에 다이렉트 SDK의 include와 lib\x86폴더를 설정한 후에 빌드한 다음
(지금은 디버그모드로만 할 테니)Effects11d.lib를 common폴더에 넣었고
effect11폴더의 inc폴더에 있는 d3dx11effect.h 와 d3dxGlobal.h를 common폴더에 넣었습니다.

류광 wrote: BoxApp::BuildFX()의
코드:
HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(),
0, md3dDevice, &mFX));



코드:
HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(),
0, md3dDevice, &mFX, nullptr));
위 코드대로 nullptr을 추가했으나 빌드가 안 됩니다.

오류 29 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 30 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 31 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'
오류 60 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 61 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 62 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'
오류 91 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 92 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 93 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'
오류 122 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 123 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 124 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'
오류 153 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 154 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 155 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'
오류 184 error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
오류 185 error C2143: 구문 오류 : ','이(가) '*' 앞에 없습니다.
오류 186 error C2061: 구문 오류 : 식별자 'DXGI_RGBA'

위 오류가 저번부터 계속 나타나는데요 dxgi1_2.h에 해당되는 오류들입니다.[/b]
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

여전히 Windows Kits의 DX 헤더가 참조되고 있는 것 같은데요. 2010년 6월자 DX SDK의 include에 있는 헤더들이 아니라요. 혹시 Effects11 프로젝트만 포함 디렉터리 순서를 조정하고 현재 예제 프로젝트의 것은 조정하지 않은 게 아닌지요?

예제 프로젝트의 것도 조정했는데 같은 문제가 반복된다면....

우선 일반론부터 말하면, 예를 들어 결과에 영향을 미치는 스위치가 세 개라고 할 때 접근방식은 크게 두 가지입니다. 하나는 2x2x2=8가지 조합을 차례로 모두 시험해 보는 것이고, 또 하나는 각 스위치의 의미를 확실하게 이해한 후 최적의 조합을 시험하는 것입니다. 대부분은 두 접근방식을 조합해서 사용하게 될 것입니다.

그 점을 염두에 두시고... 문제를 정리하자면 이렇습니다.

1. http://d3dcoder.net/d3d11.htm 에서 내려 받는 예제 코드(이하 웹 부록)는 VS 2010과 2010년 6월자 DX SDK(이하 '구 SDK')를 기준으로 만들어져 있습니다.

2. VS 2013는 기본적으로 Windows SDK에 포함된 DX SDK('신 SDK')를 사용하도록 되어 있으나, 구 SDK를 이용해서 DX 응용 프로그램을 만드는 것도 기본적으로는 가능합니다.

3. 그러나 VS 버전 간 호환성 문제 때문에, 웹 부록에 포함된 effects11d.lib(그리고 effect11.lib)를 VS 2013에서 그대로 사용할 수는 없습니다. 그대로 사용하면 링크 시 "error LNK2038: '_MSC_VER'에 대해 불일치가 검색되었습니다. '1600' 값이 '1800'(BoxDemo.obj에 위치) 값과 일치하지 않습니다."라는 오류가 발생합니다.

4. effects11.lib는 구 SDK의 예제(Sample)들 중 하나로, 신 SDK에는 없습니다.

결론적으로 error LNK2038를 해결하면 일단은 문제가 해결됩니다. 방법은 크게 두 가지인데, 하나는 웹 부록의 effects11.lib를 그대로 사용하되 다른 어떤 수단(링크 설정 등등)을 이용해서 error LNK2038를 없애는 것이고, 또 하나는 effects11.lib를 VS 2013에서 새로 빌드해서 사용하는 것입니다. 전자는 시도해 보지 않았습니다.

effect11s.lib를 VS 2013에서 새로 빌드하는 것도 두 가지로 나뉩니다. 하나는 CodePlex에 있는 새 Effects11 프로젝트( https://fx11.codeplex.com/ )를 사용하는 것이고, 또 하나는 구 SDK의 Effects11 예제를 잘 고쳐서 사용하는 것입니다.

책의 서문과 이 포럼의 이전 글들에서 제시한 해결책은 전자, 즉 CodePlex의 것을 사용하는 것이고요. 그런데 CodePlex의 새 Effects11이 이 책의 예제만을 위한 것은 아닙니다. 새 Effects11의 목표는 '구 SDK'에 대한 의존성을 완전히 제거하는 것인데, 웹 부록의 예제들을 빌드하려면 여전히 구 SDK가 필요합니다. 다른 글들에서 언급된 매크로 재정의 경고는 아마 이런 차이 때문일 수도 있습니다.

이상이 전반적인 상황입니다. 그 외에 fxc 오류나 실행시점에서 FX의 파일을 못 찾는 오류 등은 비교적 사소한 문제이고요.

마지막으로 제안을 하자면... effects11.lib 문제를 해결하는 것은 나중에 생각하고, 일단 앞의 3번 상황, 즉 컴파일까지는 잘 되고 링크 과정에서 error LNK2038: '_MSC_VER... 오류가 나는 상황까지라도 도달해 보세요. 필요하다면 관련 예제 디렉터리를 다 삭제한 후 다시 복사하고, 2010년 6월자 DX SDK도 다시 깔고 등등...
Last edited by 류광 on 2015-12-13 22:09, edited 1 time in total.
비회원

Post by 비회원 »

VS 버전 간 호환성 문제 때문에, 웹 부록에 포함된 effects11d.lib(그리고 effect11.lib)를 VS 2013에서 그대로 사용할 수는 없습니다. 그대로 사용하면 링크 시 "error LNK2038: '_MSC_VER'에 대해 불일치가 검색되었습니다. '1600' 값이 '1800'(BoxDemo.obj에 위치) 값과 일치하지 않습니다."라는 오류가 발생합니다.

effects11.lib 문제를 해결하는 것은 나중에 생각하고, 일단 앞의 3번 상황, 즉 컴파일까지는 잘 되고 링크 과정에서 error LNK2038: '_MSC_VER... 오류가 나는 상황까지라도 도달해 보세요
이 부분은 effect11 라이브러리를 최신 버전을 받아서 빌드 한 후 Common폴더에 갱신(덮어씌우기)하기 전에 확인했었습니다.
음... 여기까지 되면 일단 directx가 잘 된다는 것인가요?
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

그 후에 이것 저것 건드리다 뭔가가 더 꼬였을 수도 있으니 깨끗한(?) 상태에서 다시 시작하는 게 낫지 않겠나 하는 것이었고요.

어쨌든 제 개인 경험에 의하면 error LNK2038: '_MSC_VER .. 상태에서 새 effects11의 두 lib 파일과 두 h 파일을 Common에 넣은 후 예제 솔루션을 다시 빌드했더니 빌드가 잘 되었습니다.

만일 _D3DX11CreateEffectFromMemory 관련 링크 오류가 난다면 lib 파일들만 Common에 넣고 h 파일은 빼먹었을 가능성이 있고요.

이 이상은 저도 도움을 드리기 힘들겠습니다. 어떻게 해도 안 된다면 마지막 시도로 구 SDK의 Effects11 샘플을 사용하거나, 또는 CodePlex Effects11의 예전 버전들을 차례로 시험해 보시고요. 같은 문제를 겪는 독자가 또 있을 수 있으니 결과를 공유해 주시면 고맙겠습니다.
비회원

Post by 비회원 »

아 드디어 상자 예제가 돌아갑니다
쉐이더도 잘 적용되고요 (FXC call를 사용하지 않았습니다.)

집 컴이 아닌 노트북으로 했더니 드디어 됩니다. (집컴에 큰 문제가 있는거 같네요)
노트북에 아무것도 안 깔려 있는 상태에서 directx와 비주얼 2010을 설치하고 상자예제를 빌드한 후에 실행했더니 됩니다.

effects.lib를 갱신하지 않았는데도 정상적으로 돌아갑니다만
경고들이 뜹니다.

류광님의 마지막 답변이후로 집컴에 2010을 설치했으나 2010자체에 오류가 나타나서 사용할 수 없게되어 노트북으로 했습니다.
집 컴으로 다시 개발하려면 포맷밖에 방법이 없게되었네요 ㅠㅠ

비주얼 2010으로부터 경고를 참조 wrote: 경고 1 warning LNK4075: '/EDITANDCONTINUE'이(가) '/INCREMENTAL:NO' 사양으로 인해 무시됩니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Camera.obj

경고 2 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(d3dx11dbg.obj)

경고 3 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(d3dxGlobal.obj)

경고 4 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(EffectAPI.obj)

경고 5 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(EffectLoad.obj)

경고 6 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(EffectNonRuntime.obj)

경고 7 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(EffectReflection.obj)

경고 8 warning LNK4204: 'c:\users\user\documents\visual studio 2010\Projects\dxexample\Debug\vc100.pdb'에 참조 모듈에 대한 디버깅 정보가 없습니다. 디버깅 정보가 없는 것처럼 개체를 링크합니다. c:\Users\User\documents\visual studio 2010\Projects\dxexample\Effects11d.lib(EffectRuntime.obj)


예제 성공 이미지는 밑의 링크입니다.
http://blog.naver.com/akfldhspt3/220180580413
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

축하합니다!

집 컴 포맷하시면 VS 2013으로도 다시 시도해 보세요. 저는 이번 주말이나 다음 주에 최근 무료화된 VS 2013 Comunity 에디션으로 점검해 볼 계획입니다.
Post Reply