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

21

19.12.2009, 14:43

D24S8

am eigentlichen format kanns nicht liegen, immerhin programmiere ich auch 3d spiele; und die laufen auf netbooks und atis. daher ist auch eine abfrage sinnlos; die würde was positives zurückgeben.

22

19.12.2009, 14:46

Zitat

daher ist auch eine abfrage sinnlos; die würde was positives zurückgeben.

Wieso, steht doch in den Device-Caps, ob überhaupt ein ZBuffer für mehrere Rendertargets verfügbar ist

EDIT:
Wobei sich die frage stellt, ob du überhaupt zwei verschiedene ZBuffer brauchst, oder ob du nur temporär den ZBuffer (schreib / Lese) zugriff ausschalten musst.

Was ist, wenn du den Stencil-Buffer weglässt, also z.B.
D3DFMT_D16, D3DFMT_D24, ...

Funktionieren die Post-Processing effekte bei den Grakas, wo sie nihct Funktionieren denn, wenn du Software-Treiber bzw. Referenz-Rasterizer nimmst ?

23

19.12.2009, 15:31

D16 funzt nicht.

mein Framework schaltet auf netbooks automatisch auf software um. rasterizer funzt auch nicht; wäre eh viel zu lahm.

24

19.12.2009, 15:34

Was nimmst du überhaupt für Post-Processing - Effekte vor, die den Z-Buffer brauchen ?

25

19.12.2009, 15:39

brauch ich doch gar nicht. vielleicht aber klappts mit zbuffer ohne schwarz? ein versuch ist es immerhin wert, aber ich glaube nicht dass es dann besser geht.

26

19.12.2009, 15:43

Wenn du ihn doch gar nicht brauchst, wieso schaltest du den Z-Buffer zugriff nicht einfach ab ?

27

19.12.2009, 15:46

das hab ich natürlich gemacht, für die version die gleich erscheinen wird.

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

28

19.12.2009, 16:45

(Quote: E122, aufgeräumt)

global Deklariert:

C-/C++-Quelltext

1
2
// Render Target

PDIRECT3DTEXTURE9 OffscreenTargetTexture;


Init

C-/C++-Quelltext

1
2
3
4
    // Die Render-Targets erzeugen

    tbDirect3D::Instance()->CreateTexture (Config.Direct3D.VideoMode.Width, Config.Direct3D.VideoMode.Height, 1,
        D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8,
        D3DPOOL_DEFAULT, &OffscreenTargetTexture, 0);


Exit

C-/C++-Quelltext

1
    OffscreenTargetTexture->Release();


Render

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    PDIRECT3DSURFACE9 BackBufferSurface;

    // Altes RenderTarget holden

    ddf->GetRenderTarget (0, &BackBufferSurface);

    // Offscreen surface holen

    PDIRECT3DSURFACE9 OffscreenTargetSurface;
    OffscreenTargetTexture->GetSurfaceLevel (0, &OffscreenTargetSurface);   

    // Offscreen surface als Render Target setzen

    ddf->SetRenderTarget (0, OffscreenTargetSurface);

    // Offscreen surface freigeben (bitte nicht vergessen, gibt sonst Memory Leaks!)

    OffscreenTargetSurface->Release();
    OffscreenTargetSurface = NULL;

    // Clear - Blau (0, 0, 63)

    ddf->Clear (0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB (0, 0, 0), 1.0f, 1);

    // Begin Scene

    ddf->BeginScene ();

    // Effekt starten

    UINT np;
    Effect->Begin (&np, 0);

    // for each pass which is not the last of the technique

    for (int Pass = 0; Pass < np - 1; Pass++)
    {
        Effect->BeginPass (Pass);

        // Ganz normal rEndern


        // Effekt beenden

        Effect->EndPass ();
    }
    
    // Die Standard renderT setzen

    ddf->SetRenderTarget (0, BackBufferSurface);

    // [EDIT ]BackBufferSurface freigeben, genauso wichtig!

    BackBufferSurface->Release();
    BackBufferSurface = NULL;

    // Die _Textur_ im Effekt setzen

    Effect->SetTexture ("RenderTarget", OffscreenTargetTexture);

    // Begin Effect Pass

    Effect->BeginPass (1);

    
    // Clearen

    ddf->Clear (0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB (255,0,255), 1.0f, 0);

      
    ssimplevertex e[4];
    //e[0].Position = tbVector3 (0.0f);

    //e[1].Position = tbVector3 (ddf.GetScreenSize().x, 0.0f, 0.0f);

    //e[2].Position = tbVector3 (0.0f, ddf.GetScreenSize().y, 0.0f);

    //e[3].Position = tbVector3 (-(ddf.GetScreenSize().x/2), -(ddf.GetScreenSize().y/2), 0.0f);

    e[0].Position = tbVector3 (-1.0f, 1.0f, 0.0f);
    e[1].Position = tbVector3 (1.0f, 1.0f, 0.0f);
    e[2].Position = tbVector3 (-1.0f, -1.0f, 0.0f);
    e[3].Position = tbVector3 (1.0f, -1.0f, 0.0f);

    e[0].Texture = tbVector2 (0.0f, 0.0f);
    e[1].Texture = tbVector2 (1.0f, 0.0f);
    e[2].Texture = tbVector2 (0.0f, 1.0f);
    e[3].Texture = tbVector2 (1.0f, 1.0f);

    // draw

    ddf.SetFVF (ssimplevertex::fvf);
    ddf->DrawPrimitiveUP (D3DPT_TRIANGLESTRIP, 2, &e, sizeof (ssimplevertex));

    // End effect pass

    Effect->EndPass ();

    // End effect usage

    Effect->End ();
    

    // End Scene

    ddf->EndScene ();

    // Present

    ddf->Present (NULL, NULL, NULL, NULL);


Mal aufgeräumt. Hoffe es hilft.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

29

19.12.2009, 16:50

danke cat, so in etwa hatte ich es nun auch gemacht. Nur ist bei mir OffscreenTargetTexture auch ne textur und kein surface ;)

danke

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

30

19.12.2009, 17:29

Ja sowas übersieht man leicht, wenn man im Forumstextfeld so nen riesen Codeausschnitt editiert. Natürlich muss das vom Typ ein Texturpointer sein.

Wichtig ist halt vor allem die in diesem Thread bis jetzt fehlenden 2 Releaseaufrufe des OffscreenSurface und des BackBufferSurface im GameLoop, sowie das Wegfallen der ganzen überflüssigen Depth/Stencil Textures und Surfaces sowie des überflüssigen zusätzlichen OffscreenSurface aus deinem ersten Post.

Und wie du richtig beim Testen bemerkt hast, hinkt ATI mit Depth/Stencil Texture Support hinterher, solltest du sowas wirklich mal brauchen, erstellst du am besten direkt ein Depth/Stencil Surface.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

Werbeanzeige