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

1

17.07.2013, 20:18

Direct3D 11 - CreateRenderTargetView Null-Pointer Problem

Halli hallo :D
Ich versuche gerade in DirectX 11 rein zu kommen. Jetzt macht aber mein m_RenderTargetView vom Typ ID3D11RenderTargetView* Probleme. Immer wenn ich den Code ausführe und ich an die Stelle D3DDevice->CreateRenderTargetView(..., &m_RenderTargetView) komme, sagt mein Debugger, dass es sich hier um einen Null-Pointer handelt. Ich weiß, ich habe m_RenderTargetView vorher noch nie initialisiert, aber das solle doch die CreateRenderTargetView Mehtode machen, oder etwa nicht?
Wie verhinder ich, dass m_RenderTargetView ein Null-Pointer ist?

MfG
MazzMan
Hi

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

17.07.2013, 20:34

Als Parameter wird ein Zeiger auf einen Zeiger auf ein RenderTarget erwartet. Damit kann die Funktion den Zeiger auf das RenderTarget umsetzen (weil sie halt den Zeiger darauf hat, statt eine Kopie). Wenn du ihm aber ein Zeiger auf Null gibst, ist da kein Zeiger zum umbiegen.

3

17.07.2013, 20:44

Danke für die Antwort. Ich verstehe das Problem jetzt, aber ich weiß nicht wie ich es lösen kann.
Damit es kein Null-Pointer ist, muss ich die Variable doch initialisier, oder nicht? Aber mit was?
Hi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

18.07.2013, 01:15

Sieht OK aus.
Sicher, dass das das Problem ist und nicht ein anderer Zeiger, der NULL ist?
Z.B. das D3D-Device?

5

26.07.2013, 21:33

Die D3D-Device ist nicht NULL. Habe gerade eine Abfrage gemacht und der Debugger sagt das Selbe. An der Stelle, wo der Fehler auftritt ist nur die Variable m_RenderTargetView NULL. Hier mal ein Auszug:
http://pastebin.com/yVBC2ynq
In Zeile 35 findet ihr die Stelle wo der Fehler auftritt.
Hi

Crazy007

Treue Seele

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

6

26.07.2013, 22:12

Entschuldigung! Hier stand Blödsinn!
Der Error sitzt meistens vor dem Bildschirm! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Crazy007« (27.07.2013, 10:48)


FSA

Community-Fossil

  • Private Nachricht senden

7

26.07.2013, 23:06

Nein.
http://msdn.microsoft.com/de-de/library/…7(v=vs.85).aspx

Ist m_RenderTargetView vom Typ ID3D11RenderTargetView* ?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

8

26.07.2013, 23:09

Nein.
http://msdn.microsoft.com/de-de/library/…7(v=vs.85).aspx

Ist m_RenderTargetView vom Typ ID3D11RenderTargetView* ?
Jap, ist es.
Hi

FSA

Community-Fossil

  • Private Nachricht senden

9

26.07.2013, 23:19

Ich tippe darauf, dass dein SwapChain NULL ist, da du in DXGI_SWAP_CHAIN_DESC nicht die Größe des BackBuffers angibst oder aber Typ ID3D10Texture2D benutzt:

C-/C++-Quelltext

1
2
ID3D11Texture2D* BackBuffer;
m_SwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)&BackBuffer);


Da das ganze in Rätselraten übergeht, hier mal funktionierender Code. Den kannst du dann vergleichen. ;)

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
27
28
29
30
31
DXGI_SWAP_CHAIN_DESC sd;
    sd.BufferDesc.Width  = (int)m_vScreenSize.x;
    sd.BufferDesc.Height = (int)m_vScreenSize.y;
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
    sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
    sd.BufferUsage  = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.BufferCount  = 1;
    sd.OutputWindow = m_hWindow;
    sd.SwapEffect   = DXGI_SWAP_EFFECT_DISCARD;
    sd.Flags        = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
    sd.Windowed     = pConfig->Direct3D.bWindowed;
    sd.SampleDesc.Count   = pConfig->Direct3D.MultiSamplingSamples;
    sd.SampleDesc.Quality = pConfig->Direct3D.MultiSamplingQuality;
    if(pConfig->Direct3D.bVSync)
    {
        sd.BufferDesc.RefreshRate.Numerator = 60;
        sd.BufferDesc.RefreshRate.Denominator = 1;
    }
    else
    {
        sd.BufferDesc.RefreshRate.Numerator = 0;
        sd.BufferDesc.RefreshRate.Denominator = 1;
    }

    hResult = m_pIDXGIFactory->CreateSwapChain(m_pD3D11Device, &sd, &m_pSwapChain);
    if( FAILED( hResult ) )
        LOG_ERROR_DIRECTX( "m_pIDXGIFactory->CreateSwapChain", hResult, NXE_ERROR );

    m_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&m_pBackBuffer);
    m_pD3D11Device->CreateRenderTargetView(m_pBackBuffer, 0, &m_pRenderTargetView);

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

10

26.07.2013, 23:33

Okay, danke für die Antwort. Ich bin gerade etwas müde, deshalb werde ich mir das Ganze morgen anschauen und dann sagen, ob ich den Fehler gefunden habe.
Hi

Werbeanzeige