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

04.03.2013, 22:46

Fehler bei d3dpresent_parameters.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES;

Wenn ich bei dem Struct D3DPRESENT_PARAMETERS nicht auf das Multesampling verzichte, kann ich die Funktion PDIRECT3D9::CreateDevice
nicht erfolgreich aufrufen.

Bei nicht erfolgreichem Aufruf von PDIRECT3D9::CreateDevice wird eine MessageBox erzeugt.

Was ist der Fehler der dazu führt, dass beim Mulisampling die Funktion PDIRECT3D9::CreateDevice nicht aufrufen kann?

Header der structur, welche directx verwaltet.

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
#pragma once


#include <d3d9.h>

#include "window.h"


struct d3d
{

PDIRECT3D9 direct3d9p;

 PDIRECT3DDEVICE9 adirect3ddevice9p;


 D3DPRESENT_PARAMETERS d3dpresent_parameters;


    d3d(window *pwindowp);

};



Implementierung der structur, die directx verwaltet.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "d3d.h"


d3d::d3d(window *pwindowp){ HRESULT hresult;


    direct3d9p=Direct3DCreate9(D3D_SDK_VERSION);


    d3dpresent_parameters.AutoDepthStencilFormat=D3DFMT_D24X8;

 d3dpresent_parameters.BackBufferCount=1;


 d3dpresent_parameters.BackBufferFormat=D3DFMT_A8R8G8B8;


d3dpresent_parameters.BackBufferHeight=pwindowp->ysize;


 d3dpresent_parameters.BackBufferWidth=pwindowp->xsize;



 d3dpresent_parameters.EnableAutoDepthStencil=true;



 d3dpresent_parameters.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER | D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;



 d3dpresent_parameters.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;    


d3dpresent_parameters.hDeviceWindow=pwindowp->hwnd; 


d3dpresent_parameters.MultiSampleQuality = 4;



 d3dpresent_parameters.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES;


d3dpresent_parameters.PresentationInterval = D3DPRESENT_INTERVAL_ONE;


 d3dpresent_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;

 d3dpresent_parameters.Windowed = true;


    if(!(SUCCEEDED(hresult=direct3d9p->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,pwindowp->hwnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpresent_parameters,&adirect3ddevice9p))))

 {  

 MessageBox(pwindowp->hwnd,"Fehler bei create device","Fehler",MB_OK);
}

}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

04.03.2013, 22:48

Der Fehler wird wohl hier liegen:

C-/C++-Quelltext

1
d3dpresent_parameters.MultiSampleQuality = 4;


Quality ist was anderes als die Anzahl der Samples.
Nicht umsonst gibt es die Möglichkeit die Multi-Sampling-Features eines Devices aufzulisten.

3

04.03.2013, 23:30

Auf Grund der Anwort von David Scherfgen bin ich dahintergekommen das die Ursache in

C-/C++-Quelltext

1
d3dpresent_parameters.Flags =D3DPRESENTFLAG_LOCKABLE_BACKBUFFER | D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;




liegt. Durch das Flag D3DPRESENTFALG_LOCKABLE_BACKBUFFER wird verhindert, dass überhaupt irgendein Multisampling funktioniert.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

05.03.2013, 01:32

Dennoch kannst du nicht einfach so davon ausgehen, dass jede Grafikkarte eine MultiSampleQuality von 4 unterstützt...

Werbeanzeige