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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

08.09.2010, 18:41

Probleme mit Direct2D

Hi,
Ich habe Probleme beim Erstellen eines DxgiSurfaceRenderTargets mit Direct2D. Im Grunde mache ich es genau so wie in der Doku:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ID2D1RenderTarget* D2DRenderTarget_;

/* ... */

IDXGISurface* BackBuffer = 0;

if (SwapChain_->GetBuffer(0, IID_PPV_ARGS(&BackBuffer)))
{
    io::printError("Could not get back buffer from swap chain");
    return false;
}

dim::size2df DesktopDPI;
D2DFactory_->GetDesktopDpi(&DesktopDPI.Width, &DesktopDPI.Height);

D2D1_RENDER_TARGET_PROPERTIES RenderTargetProps = D2D1::RenderTargetProperties(
    D2D1_RENDER_TARGET_TYPE_DEFAULT,
    D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED),
    DesktopDPI.Width, DesktopDPI.Height
);

if (D2DFactory_->CreateDxgiSurfaceRenderTarget(BackBuffer, &RenderTargetProps, &D2DRenderTarget_))
{
    io::printError("Could not create Direct2D render target"); // Das Programm landet hier und bricht ab :-(
    return false;
}

Hab ich was vergessen? Oder was mache ich falsch?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

08.09.2010, 18:51

Was für nen Fehldercode bekommst du denn geliefert?
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

08.09.2010, 19:01

Gute Frage, ich hatte mich nämlich gewundert, weil ich davon aus ging, dass es nur wieder ein "E_INVALIDARG" ist.
Aber es ein "E_NOINTERFACE": "No such interface supported". Was genau soll das im Zusammenhang zu D2D heißen?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

08.09.2010, 19:10

Falls du versuchst das Ganze mit D3D11 zu integrieren dann könnte das möglicherweisse das Problem sein. Für Mehr Infos siehe: http://www.gamedev.net/community/forums/…topic_id=547920
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

08.09.2010, 19:17

Aus der Diskussion vom GameDev.net Forum lese ich raus, dass das ganze mit einem D3D10 Device gemacht werden muss.
Wie soll ich denn bitte Direct3D11 und 10 zusammen nutzen? Das will ich doch gerade vermeiden, ::Clear und solche sachen mehrmals zu verwenden.
Gibt's da vielleicht Tutorials oder Beispiele? Ich hab schon gegooglet, aber nix gescheites gefunden. Immer nur diese minimal Beispiele auf der MSDN.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

08.09.2010, 19:21

Laut Direct2D and Direct3D Interoperability Overview wird von D2D eben nur D3D10.1 unterstützt ["Direct2D supports interoperability with Direct3D 10.1."]. Mir ist zumindest kein guter Workaround bekannt, das was der Gamedev Artikel sagt eben... Da würd ich aber lieber auf D3D11 support verzichten und direkt D3D10.1 verwenden.
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

08.09.2010, 19:24

Und dann auf Tessellation verzichten?? :P

Wie soll man denn prinzipiell 2D Zeugs mit Direct3D11 zeichnen?? Das wichtigste: wie soll man da Text zeichnen, wenn man D2D und DWrite nicht direkt über D3D11 nutzen kann??

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

08.09.2010, 19:29

Wie soll man denn prinzipiell 2D Zeugs mit Direct3D11 zeichnen?? Das wichtigste: wie soll man da Text zeichnen, wenn man D2D und DWrite nicht direkt über D3D11 nutzen kann??


Mit einer der vielen Alternativen (Bitmapfonts, ...).
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

08.09.2010, 21:37

DirectWrite ist eine eigentständige API und komplett unabhängig von irgendeiner spezifischen Render-API. D2D bietet dir lediglich bereits fertige Funktionalität um Text mit DirectWrite zu rendern aber du kannst DirectWrite natürlich auch direkt mit D3D oder was sonst auch immer benutzen. Alles was du dazu tun musst ist die entsprechenden Interfaces zu implementieren (IDWriteTextRenderer etc.).

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

09.09.2010, 10:11

Das klingt doch schon besser =) Dann kann ich 2D Kram mit D3D über nen extra Shader machen. Und Text mit DirectWrite.

Werbeanzeige