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

11

18.12.2009, 21:39

Zitat von »"E122"«

Bei D3DFVF_XYZRHW, darf doch die Positionsangabe nur 2Dimensional sein, oder ?

EDIT: Was sagt denn die Direct3DDebug - Ausgabe ?


was soll sie denn aufälliges sagen? wird alles gerendert; ohne zwischenfälle. das rendertarget ist schwarz;
am zeichnen des targets liegts also nicht.

muss ich für 2d vielleicht einen zbuffer mit verwenden? ist meiner meinung nach aber nicht nötig.

12

18.12.2009, 21:41

Sie sagt vieles, unnötige State-Changes, Warnungen, Fehler, ...
Ausserdem Berichtet sie über Mem-Leaks bei DX-Ressourcen

Zitat

muss ich für 2d vielleicht einen zbuffer mit verwenden? ist meiner meinung nach aber nicht nötig.

Probier halt mal, wenn du den Z und den Stencil buffer auch noch setzt.

EDIT: Müsste Render-Target-Surface nicht als ein Surface Level von RenderTarget sein, und kein Eigenständiges, dass mit CreateRenderTarget erzeugt wird ?
Welche DX-Version verwendest du eigentlich ? Ist lpD3D.... eigentlich die PDIRECT3DDEVICE9 oder eine Wrapper-Klasse, die du geschrieben hast ?

13

18.12.2009, 21:44

Zitat von »"E122"«


EDIT II:

C-/C++-Quelltext

1
  lpD3DDevice->SetRenderTarget(0, RenderTargetSurface); 


probiers mal mit
RenderTarget->GetSurfaceLevel (..... ) statt RenderTargetSurface.


mit RenderTarget->GetSurfaceLevel kann ich nur einen surface als textur nutzten. mit dem eigentlichen rendern in den target hat es also nichts zutun. habs zwar ausprobiert, habe aber schwarzen screen (auch auf nvidia).

14

18.12.2009, 21:46

Zitat von »"E122"«

er halt mal, wenn du den Z und den Stencil buffer auch noch setzt.

EDIT: Müsste Render-Target-Surface nicht als ein Surface Level von RenderTarget sein, und kein Eigenständiges, dass mit CreateRenderTarget erzeugt wird ?
Welche DX-Version verwendest du eigentlich ? Ist lpD3D.... eigentlich die PDIRECT3DDEVICE9 oder eine Wrapper-Klasse, die du geschrieben hast ?


müsste aber trotzdem mit create-textur als rendertagret erzeugt werden. mit surface-level setzte bringt keine änderung.

15

18.12.2009, 21:47

C-/C++-Quelltext

1
PDIRECT3DTEXTURE9 RenderBackBufferTarget, RenderDephtStencilTarget;


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    PDIRECT3DSURFACE9 RBBTS, RDSTS;
    RenderBackBufferTarget->GetSurfaceLevel (0, &RBBTS);
    RenderDephtStencilTarget->GetSurfaceLevel (0, &RDSTS);

    
    ddf->GetRenderTarget (0, &BackBuffer);
    ddf->GetDepthStencilSurface (&DephtStencilBuffer);


    ddf->SetRenderTarget (0, RBBTS);
    ddf->SetDepthStencilSurface (RDSTS);

so mach ichs bei mir immer, hat mich bisher noch nicht im stich gelassen ;)

16

18.12.2009, 21:50

Zitat von »"E122"«

C-/C++-Quelltext

1
PDIRECT3DTEXTURE9 RenderBackBufferTarget, RenderDephtStencilTarget;


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    PDIRECT3DSURFACE9 RBBTS, RDSTS;
    RenderBackBufferTarget->GetSurfaceLevel (0, &RBBTS);
    RenderDephtStencilTarget->GetSurfaceLevel (0, &RDSTS);

    
    ddf->GetRenderTarget (0, &BackBuffer);
    ddf->GetDepthStencilSurface (&DephtStencilBuffer);


    ddf->SetRenderTarget (0, RBBTS);
    ddf->SetDepthStencilSurface (RDSTS);

so mach ichs bei mir immer, hat mich bisher noch nicht im stich gelassen ;)


kannst du mal eben gerade eine komplette initialisierung und verwendung im gameloop posten? kammst auch als besonderen dank in die credits ;)

17

18.12.2009, 21:54

global Deklariert:

C-/C++-Quelltext

1
2
3
// Multiple Render Targets

PDIRECT3DSURFACE9 BackBuffer, DephtStencilBuffer;
PDIRECT3DTEXTURE9 RenderBackBufferTarget, RenderDephtStencilTarget;


Init

C-/C++-Quelltext

1
2
3
4
5
    // Die Render-Targets erzeugen

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


Exit

C-/C++-Quelltext

1
2
    RenderBackBufferTarget->Release();
    RenderDephtStencilTarget->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
    // Textursurface (0) bekommen

    PDIRECT3DSURFACE9 RBBTS, RDSTS;
    RenderBackBufferTarget->GetSurfaceLevel (0, &RBBTS);
    RenderDephtStencilTarget->GetSurfaceLevel (0, &RDSTS);

    // Altes RenderTarget holden

    ddf->GetRenderTarget (0, &BackBuffer);
    ddf->GetDepthStencilSurface (&DephtStencilBuffer);

    // Render target setzen

    ddf->SetRenderTarget (0, RBBTS);
    ddf->SetDepthStencilSurface (RDSTS);

    // 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, BackBuffer);
    ddf->SetDepthStencilSurface (DephtStencilBuffer);

    // Die Textur im Effekt setzen

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

    // 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);


das dürfte alles wichtige gewesen sein, wenn ich was vergessen habe, einfach fragen.

EDIT: Hier vorsichtshalber noch der Link, zu der/den ganzen Dateien samt Effekt:
http://dl.dropbox.com/u/3405107/PostProc…nderTargets.zip
Nicht wundern über die Komischen Kommentare, war erst als Test für Wassersimulation ausgelegt, dann als Testfeld für meine Shader, dann was weiss ich was ;)
War im übrigen meine erste Erfahrung mit Shadern, daher sieht der 'n bisschen komisch aus ;)

18

18.12.2009, 21:59

vielen dank, werde es im laufe des morgigen tages mal in meinen code einpuzzeln. der release der neuen version wird dann vermutlich erst morgen (spät abends sein.

e333, danke für deine mühen.

gruß fred

19

19.12.2009, 14:22

Deine Lösung funzt auf nvidia und neuen atis. intels und alte atis stürzen aber wegen den zbuffer operationen ab. lasse ich den zbuffer weg, habe ich zwar keinen absturz, auf allen atis und intels aber wieder schwarz.

auch habe ich die dx internen RenderToSurface funktionen getestet, hier läuft es am besten: nvidia und neue atis alles ok, alte atis und intel schwarz. na immerhin kein absturz.

kennt vielleicht jemand eine ganz andere möglichkeit, post-shader einzubauen?

20

19.12.2009, 14:36

Vorerst kannst du ja beim Start prüfen, ob ZBuffering verfügbar ist, oder nicht ?
Welches ZBuffer-Format hast du denn Gewählt ?

Werbeanzeige