Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

1

15.12.2013, 13:34

[DX11] Effects11.lib Linker Problem

Hallo Zusammen,

ich habe mir aus Weiterbildungsgründen endlich mal mit Direct3D11 angefangen zu beschäftigen und hänge an einem nervigen Linkerproblem. Ich verwende die Effects11-Bibliothek und bin nicht in der Lage, die korrekte Lib zu linken. Ich habe folgende Fehlermeldung:

Quellcode

1
error LNK2019: unresolved external symbol _D3DX11CreateEffectFromMemory@20 referenced in function "public: __thiscall Effect::Effect(struct ID3D11Device *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Effect@@QAE@PAUID3D11Device@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)


Ich arbeite mit VS2012 und noch dem DirectX SDK, weil ich noch D3DX brauche. Ich habe bereits den Fehler gefunden, dass bei Download der Effect-Lib von der Codeplex-Seite standardmäßig für eine ältere Version von VS übersetzt worden ist und habe es für 2012 in passendem Zeichen-Encodind Debug + Release übersetzt. Spannenderweise finde ich per Dumpbin /EXPORTS keine veröffentlichten Symbole.

Hat jemand eine Idee?

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

15.12.2013, 13:55

Problem 1 ist gelöst. Ein Rebuild mit korrekter Header-Datei hat das Problem gelöst. Ich habe einfach per Notepad++ in die lib hereingeschaut und gesehen, dass das Symbol _D3DX11CreateEffectFromMemory@26 an statt 20 ist, somit musste der Header falsch sein, den ich ausgetauscht habe.

Ansonsten hatte ich leider zwei Versionen von den DX11-Libs bedingt durch das Windows SDK. Ich würde ja gern nur auf das Windows-SDK setzen, aber ich habe nach installieren die Debug-Variante von D3DX nicht gefunden. Liegt das an dem deprecated von D3DX?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

15.12.2013, 14:09

Vermutlich, es gibt kein D3DX mehr...

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

15.12.2013, 15:26

Mja, leider baut der Autor meines Buches noch darauf auf. Später werde ich die Abhängigkeit entfernen. Man, bin ich in C++ eingerostet :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

15.12.2013, 17:43

In dem Fall so lange wohl besser einfach das alte June 2010 DirectX SDK und VS 2010 verwenden...

Cranberry

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

6

15.12.2013, 20:42

Ich würde nicht mehr mit D3DX arbeiten. Wenn etwas rausgeschmissen wurde hat es auch irgendwo seinen Sinn.
Und mit diesem Artikel ist das ganze auch überhaupt kein Problem. ;)

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

16.12.2013, 08:59

[DX11] Inputlayouts

Ich arbete trotzdem mit 2012, einfach um mich in die IDE etwas einzuarbeiten und zu gewöhnen. Auf Arbeit verwenden wir 2010, das kenn ich langsam gut genug.

Eine Frage hab ich noch, eh ich einen neuen Thread aufmache. Wie gehe ich Architekturmäßig mit InputLayouts um? Diese kennen Ihre Inputelemente + eine binäre Inputsignatur. Dadurch ist doch das Layout an Geometrie + Shader gebunden?!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrommlBomml« (16.12.2013, 09:07)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

16.12.2013, 09:21

Ich arbete trotzdem mit 2012, einfach um mich in die IDE etwas einzuarbeiten und zu gewöhnen. Auf Arbeit verwenden wir 2010, das kenn ich langsam gut genug.

Dann musst du afaik allerdings bei der Konfiguration acht geben, denn VS 2012 verwendet standardmäßig das Windows 8 SDK, mit welchem das DirectX SDK nicht kompatibel ist. Wenn du D3DX willst, musst du allerdings das veraltete DirectX SDK verwenden, weil D3DX im aktuellen Windows SDK nichtmehr enthalten ist. In dem Fall solltest du also ein Windows 7 SDK installieren und VS so konfigurieren, dass es dieses statt dem Windows 8 SDK verwendet. Meine persönliche Empfehlung: Auf D3DX verzichten.

Eine Frage hab ich noch, eh ich einen neuen Thread aufmache. Wie gehe ich Architekturmäßig mit InputLayouts um? Diese kennen Ihre Inputelemente + eine binäre Inputsignatur. Dadurch ist doch das Layout an Geometrie + Shader gebunden?!

Richtig. Ein InputLayout ist allerdings nur an die Signatur des Shaders und nicht an die konkrete Instanz des verwendeten Objektes gebunden und funktioniert daher für alle Shader mit identischer Signatur.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (16.12.2013, 09:30)


TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

16.12.2013, 09:57

Nun ist die Frage, ob man einfach stumpf pro VertexBuffer ein eigenes InputLayout angibt. Frage ist lohnt sich das? Vor allem, besitzt jeder Vertexbuffer InputLayouts, oder jeder VertexShader, oder hält man das noch zentraler und muss immer bei jedem Pass das Passende InputLayout ermitteln? Lohnt es sich, oder erstellt man einfach für jeden VertexBuffr für jeden Pass ein eigenes Layout?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

16.12.2013, 10:25

Logisch betrachtet besitzen weder ein VertexBuffer noch ein VertexShader ein InputLayout. Ein InputLayout verknüpft Buffer und Shader.

Werbeanzeige