Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problemi sa z baferom d3d

[es] :: 3D programiranje :: problemi sa z baferom d3d

[ Pregleda: 2332 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon problemi sa z baferom d3d01.06.2005. u 00:03 - pre 229 meseci
Kada sam probao moje programe kod druga na njegovoj gforce 6800 pojavio se sledeci problem:
Ako ukljucim 16 bitni z bafer (D3DFMT_D16) onda sve radi kako treba. Ako promenim na 24 bitni (D3DFMT_D24S8 ili D3DFMT_D24X8 - proverio sam caps) onda u rezolucijama iznad 1024 x 768 ima problema a na 1024 x 768 je sve ok.

Problem je sledeci: Aplikacija se ne blokira niti izbacuje gresku ali se 3d scena ne iscrtava, pojavljuju se neka treperenja i sl...

Format bafera sam postavio sa:
presentParameters.AutoDepthStencilFormat=D3DFMT_D24X8

A bafer brisem sa:
Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(150,150,200), 1.0f, 0);

Nisam u prilici da kod njega instaliram sdk pa da pokupim debug informaciju.... Kod mene inace sve radi kako treba i u vecim rezolucijama ali imam drugu graficku...
 
Odgovor na temu

speciebsp
Gorazde, BiH

Član broj: 52340
Poruke: 19
*.bih.net.ba.

Sajt: bspdx.cjb.net


Profil

icon Re: problemi sa z baferom d3d01.06.2005. u 01:23 - pre 229 meseci
Kada koristis Clear uvjek dodaj i D3DCLEAR_TARGET kako bi obrisao i backbuffer.
Prije nego kreiras device interfejs pozeljno je da koristis GetDeviceCaps, CheckDeviceType, CheckDeviceFormat i CheckDepthStencilMatch funkcije (postoje jos i dvije druge koje ces naci u help-u). Inace uz sdk dolaze i neki primjeri pa bi bilo dobro i to da pogledas (naravno ako vec nisi)...

Dali je fullscreen mode ili window? Koje renderstates koristis? Mozda bi bilo dobro da das parce koda :) kako bi imali bolji uvid u sve?

CY
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: problemi sa z baferom d3d01.06.2005. u 17:09 - pre 229 meseci
Problem se javlja u full screen modu i to samo pri rezolucijama iznad 1024x768 (dobro nisam bas proverio svaku podrzanu ali otprilike je tako). To je ono sto me najvise i zbunjuje, pogotovu sto kod mene sve radi ok a imam daleko losiju graficku.
Backbuffer ne brisem jer mi scena zauzima ceo ekran tako da nema potrebe. Valjda je ovako brze ?

CheckDeviceType, CheckDeviceFormat i CheckDepthStencilMatch nisam koristio. Na startu sam popisao sve modove sa EnumAdapterModes. Onda sam proverio caps-e i to je to.

Pokusacu sa ovima gore da izvucem neke informacije.

Ipak ako deepth stencil format i mod nisu kompatibilni onda valjda ne bih uspeo ni da kreiram d3dDevice ?

Evo i nekog koda koji postavlja potrebne render stejtove (trazio si):
Code:

device->SetRenderState(D3DRS_AMBIENT, 0x00a0a0a0);
device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
device->SetRenderState(D3DRS_ZENABLE, TRUE);
device->SetRenderState(D3DRS_ALPHABLENDENABLE,   TRUE);
device->SetRenderState(D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA);
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
 
Odgovor na temu

speciebsp
Gorazde, BiH

Član broj: 52340
Poruke: 19
*.bih.net.ba.

Sajt: bspdx.cjb.net


Profil

icon Re: problemi sa z baferom d3d01.06.2005. u 19:51 - pre 229 meseci
Pozdrav,

evo dio koda gdje kreiram d3ddevice interfejs pa reko mozda ti i pomogne... veoma je vazno da popunis D3DPRESENT strukturu sa validnim vrijednostima (iako znam da znas to)... doduse kod checkdeviceformat funkcije sam koristi provjeru da li je moguce koristiti bar 16bit zbuffer kao minimum...

Code:

BOOL cD3DInit::CreateD3DWindow(int W, int H, HWND Hwnd, LPDIRECT3D9 D3D9)
{

    D3DPRESENT_PARAMETERS PP;
    memset(&PP,0,sizeof(PP));

    if(FAILED(D3D9->CheckDeviceType(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8 ,D3DFMT_X8R8G8B8 ,FALSE)))
    {
        MessageBox(NULL,"Your video card is not supported!","Error!",MB_OK);
        return FALSE;
    }

    if(FAILED(D3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8 ,D3DUSAGE_DEPTHSTENCIL,
        D3DRTYPE_SURFACE,D3DFMT_D16)))
    {
        MessageBox(NULL,"Your video card is not supported! Need at least 16bit z-buffer!","Error!",MB_OK);
        return FALSE;
    }
    
    HRESULT rez;
    rez = D3D9->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &D3DCAPS);
    if(rez==D3DERR_INVALIDCALL)
    {
        MessageBox(NULL,"GetDeviceCaps(): Invalid call!","Error",MB_OK);
    }
    else if(rez==D3DERR_INVALIDDEVICE)
    {
        MessageBox(NULL,"GetDeviceCaps(): Invalid device type!","Error",MB_OK);
    }
    else if(rez==D3DERR_OUTOFVIDEOMEMORY)
    {
        MessageBox(NULL,"GetDeviceCaps(): Out of memory!","Error",MB_OK);
    }

    if(FAILED(D3D9->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &D3DCAPS)))
    {
        MessageBox(NULL,"Could not get adapter capabilities!","Error",MB_OK);
        return FALSE;
    }

    if((D3DCAPS.VertexShaderVersion < D3DVS_VERSION(1,1)) ||
       (D3DCAPS.PixelShaderVersion < D3DPS_VERSION(1,1)))
    {
        MessageBox(NULL,"PS/VS shader version error!","Error",MB_OK);
        return FALSE;
    }

    DWORD VP = 0;
    if(D3DCAPS.VertexProcessingCaps != 0)
        VP |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
    else
        VP |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;

    PP.Windowed = FALSE;
    PP.SwapEffect = D3DSWAPEFFECT_DISCARD;
    PP.BackBufferCount = 1;
    PP.BackBufferFormat = D3DFMT_X8R8G8B8;
    PP.BackBufferWidth = W;
    PP.BackBufferHeight = H;
    PP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; 
    PP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
    PP.MultiSampleType = D3DMULTISAMPLE_NONE;
    PP.EnableAutoDepthStencil = TRUE;
    PP.AutoDepthStencilFormat = D3DFMT_D24X8;

    D3D9->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        Hwnd,
        VP,
        &PP,
        &D3DDEVICE);

    if(D3DDEVICE == NULL)
    {
                return FALSE;
    }

    // Get basic adapter information
    D3DADAPTER_IDENTIFIER9 AdapInfo;
    memset(&AdapInfo,0,sizeof(D3DADAPTER_IDENTIFIER9)); 
    if(SUCCEEDED(D3D9->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &AdapInfo)))
    {
        wsprintf(AdapterName,"Adapter: %s",AdapInfo.Description); 
        wsprintf(AdapterDriver,"Driver: %s",AdapInfo.Driver); 
    }

    // If everthing went ok set our default render states

    //Turn off the Z-buffer
    D3DDEVICE->SetRenderState(D3DRS_ZENABLE, TRUE);  
    // Turn light off
    D3DDEVICE->SetRenderState(D3DRS_LIGHTING, FALSE);
    // Turn ambient light on
    D3DDEVICE->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(255,255,255));  
    // Disable culling
    D3DDEVICE->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    // Bilinear texture filtering
    D3DDEVICE->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);   
    D3DDEVICE->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

    return TRUE;
}


Nadam se da ce ti pomoci...
 
Odgovor na temu

speciebsp
Gorazde, BiH

Član broj: 52340
Poruke: 19
*.bih.net.ba.

Sajt: bspdx.cjb.net


Profil

icon Re: problemi sa z baferom d3d02.06.2005. u 16:22 - pre 229 meseci
...ah da na mjestu gdje pise ovo:

//Turn off the Z-buffer
D3DDEVICE->SetRenderState(D3DRS_ZENABLE, TRUE);

ustvari Turn on :)

radim na meni menadzeru pa koristim ortho matricu zbog 2D-a u 3D-u pa zbuffer mora biti iskljucen... sorry
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: problemi sa z baferom d3d05.06.2005. u 15:27 - pre 229 meseci
Istestirao sam podrsku za 24-bitni z bafer i dobio da podrzava D3DFMT_D24S8 i D3DFMT_D24X8. Naravno sa ova dva sam i ranije radio tako da se nista nije promenilo. Osim toga CheckDeviceFormat i CheckDepthStencilMatch samo uzimaju u obzir D3DFORMAT a ne i D3DDISPLAYMOD u kome se radi tako nisam ni ocekivao da mi daju neku novu informaciju.

Najvise mi je bio sumnjiv Clear metod, tacnije mislio sam da on pada iz nekih razloga pa mi z bafer ostaje neociscen ali Clear vraca S_OK svaki put.

Jeli ima neko ideju sta bi jos moglo da predstavlja problem ? Ono sto me najvise buni je to sto sa z baferom nemam puno kontakta osim prilikom kreiranja device-a, brisanja istog sa Clear i povremenog ukljucivanja i iskljucivanja. Jel postoji jos neko kriticno mesto ?


Code:

if(FAILED(D3D9->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &D3DCAPS)))

Valjda si vec smestio rezultat u HRESULT rez.
 
Odgovor na temu

speciebsp
Gorazde, BiH

Član broj: 52340
Poruke: 19
*.pppoe288.bih.net.ba.

Sajt: bspdx.cjb.net


Profil

icon Re: problemi sa z baferom d3d05.06.2005. u 17:15 - pre 229 meseci
Da upravu si sto se tice GetDeviceCaps-a vjeruj mi da nisam ni primjetio to :(

Reci mi kako bi bilo da isntaliras DebugView (http://www.sysinternals.com/Utilities/DebugView.html) pa da pogledas sta se desava "iza haube"... mozda dobijes kakvu korisnu informaciju... za ovo ti trebaju Debug runtimes...

Ja zaista ne znam sta da ti kazem jos... mozda da das nakraju krajeva i samu aplikaciju pa da svi ovdje testiramo... sta mislis?

Pozdrav!
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: problemi sa z baferom d3d05.06.2005. u 18:02 - pre 229 meseci
Hvala za debag view, nisam imao pojma da takvo nesto postoji. Videcu da to instaliram kod druga. Izvini ali radije ne bih da saljem dok je jos u ovoj pocetnoj fazi.
 
Odgovor na temu

[es] :: 3D programiranje :: problemi sa z baferom d3d

[ Pregleda: 2332 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.