Willkommen
Gast
. Bitte
einloggen
oder
registrieren
.
1 Stunde
1 Tag
1 Woche
1 Monat
Immer
Einloggen mit Benutzername, Passwort und Sitzungslänge
Übersicht
Hilfe
Suche
Kalender
Einloggen
Registrieren
Trident
»
Forum
»
Off Topic
»
Off Topic
»
Frage zum Hardware Render Mode (DirectX9.0c)
Benutzer
Welcome,
Guest
.
Please
login
or
register
.
Login:
Passwort:
Login for:
1 Hour
1 Day
1 Week
1 Month
Forever
Forgot your password?
« vorheriges
nächstes »
Thema versenden
Drucken
Seiten: [
1
]
Nach unten
Autor
Thema: Frage zum Hardware Render Mode (DirectX9.0c) (Gelesen 3196 mal)
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Frage zum Hardware Render Mode (DirectX9.0c)
«
am:
28. November 2006, 16:56:41 »
Hab grad festgestellt das meine kleine Anwendung mit SOFTWARE_VERTEXPROCESSING arbeitet. Hab ich zum Anfang mal zum Testen eingestellt und dann vergessen wieder zu ändern. Nun hab ich das Ganze auf HARDWARE_VERTEXPROCESSING umgestellt mit dem Resultat das nix mehr gerendert wird. Die Anwendung läuft zwar fehlerfrei, aber nur noch Texte werden angezeigt. Alle Objekte werden nicht mehr gerendert. Das gleiche Reslutat gibts, wenn ich auf MIXED_VERTEXPROCESSING umstelle. Ich benutze keinerlei "Sonder-Features" wie Anti Aliasing oder sowas.
Daher wollte ich mal fragen, zu welchen Standard Eigenschaften der Hardware Mode inkompatibel ist, bzw was es sonst sein kann.
Hier mal alle relevanten Daten meiner Anwendung:
m_ColorFormat = D3DFMT_R5G6B5;
m_DepthStencilFormat = D3DFMT_D16;
m_dwVertexProcessing = D3DCREATE_MIXED_VERTEXPROCESSING;
m_MultiSampling= D3DMULTISAMPLE_NONE;
m_dwAnisotropy= 0;
...
ZeroMemory(&m_PresentParameters, sizeof(m_PresentParameters));
m_PresentParameters.Windowed=false;
m_PresentParameters.SwapEffect=D3DSWAPEFFECT_DISCARD;
m_PresentParameters.EnableAutoDepthStencil=true;
m_PresentParameters.AutoDepthStencilFormat=m_DepthStencilFormat;
m_PresentParameters.hDeviceWindow=m_hWnd;
m_PresentParameters.BackBufferWidth=m_dwWidth;
m_PresentParameters.BackBufferHeight=m_dwHeight;
m_PresentParameters.BackBufferFormat=m_ColorFormat;
m_PresentParameters.MultiSampleType= m_MultiSampling;
m_pD3DObject->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,m_hWnd,m_dwVertexProcessing,&m_PresentParameters,&m_pD3DDevice)
...
for(unsigned i = 0;i < 8;++i)
{
m_pD3DDevice->SetSamplerState(i,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
m_pD3DDevice->SetSamplerState(i,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
m_pD3DDevice->SetSamplerState(i,D3DSAMP_MIPFILTER,D3DTEXF_ANISOTROPIC);
m_pD3DDevice->SetSamplerState(i,D3DSAMP_MAXANISOTROPY,m_dwAnisotropy);
}
m_pD3DDevice->SetRenderState(D3DRS_AMBIENT,RGB(255,255,255));
m_pD3DDevice->SetRenderState(D3DRS_LIGHTING,false);
m_pD3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pD3DDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
...
g_App.GetDevice()->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, F2DW(g_fSlopeBias));
g_App.GetDevice()->SetRenderState(D3DRS_DEPTHBIAS, F2DW(g_fBias*(float)i));
g_App.GetDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,i*8,0,8,0,12);
Moderator informieren
Gespeichert
Mongrel
Trident Vollmitglied
Labermonster
Beiträge: 482
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #1 am:
29. November 2006, 08:49:14 »
Ich nehme mal an, dass das mit Deinen VertexBuffern zu tun hat. Gib mal den Code mit dem Du die erzeugst.
Moderator informieren
Gespeichert
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #2 am:
29. November 2006, 22:56:12 »
hier wird er erstellt:
// Vertex Puffer ertellen
g_App.GetDevice()->CreateVertexBuffer( 8*g_iMaxCubes*sizeof(D3DVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &g_pCubeVB, NULL);
hier gefüllt (iPos gibt die Nummer des Objektes an, welches reingeschrieben wird)
void FillVertexBuffer(int iPos)
{
VOID* pData;
D3DVERTEX aTempBuffer[8];
for (int i=0; i<8; i++)
aTempBuffer
= g_aCubeVertices[i+8*iPos];
g_pCubeVB->Lock(8*iPos*sizeof(D3DVERTEX),sizeof(pData),(void**)&pData,0);
memcpy(pData,aTempBuffer,8*sizeof(D3DVERTEX));
g_pCubeVB->Unlock();
} // ~FillVertexBuffer();
Moderator informieren
Gespeichert
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #3 am:
30. November 2006, 00:09:46 »
D A N K E
Genau nach sowas hab ich gesucht. Einer einfachen kleinen Änderung und schon gehts
Wenn du mir jetzt noch sagen kannst, warum mein Programm bei Alt+Tab abstürzt, dann gibts gar keine Probs mehr *ggg*
Da bringt er nämlich wenn man zu dem Device zurückkehren will immer "Reset fehlgeschlagen" Nachricht. Einziger Parameter für Reset ist aber die PresentParameters Struktur, welche ja stimmen müsste
Die Funktionen Dafür:
bool CApp::CheckDevice(void)
{
switch(m_pD3DDevice->TestCooperativeLevel())
{
case D3DERR_DEVICELOST: return false;
case D3DERR_DEVICENOTRESET:
{
if(FAILED(m_pD3DDevice->Reset(&m_PresentParameters)))
{
ERRORMSG("Reset() fehlgeschlagen!", "CheckDevice();");
return false;
}
InitScene();
return true;
}
default: return true;
} // ~switch(m_pD3DDevice->TestCooperativeLevel())
} // ~CApp::CheckDevice();
Moderator informieren
Gespeichert
Mongrel
Trident Vollmitglied
Labermonster
Beiträge: 482
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #4 am:
30. November 2006, 12:22:36 »
Warum genau Dein Device nicht resetted werden kann, weiß ich nicht, aber möglicherweise hilft Dir folgendes:
Ressourcen, die im "Default" Pool angelegt werden, landen alle im Speicher der Hardware (und sind darum so schön flott und sinnvoll), verschwinden aber im Nirwana, wenn das Device verloren geht.
Beim DEVICE_LOST event musst Du also alle entsprechenden Ressourcen wieder neu laden. Vielleicht geht deswegen der Rest schief.
Moderator informieren
Gespeichert
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #5 am:
30. November 2006, 16:56:07 »
Also der Vertexpuffer wird dann kurz darauf wieder gefüllt, wär ja auch net schlimm wenn da ne Sekunde lang erstmal der Bildschirm leer bleibt. Aber das er bereits das Reset nicht ausführt...
Moderator informieren
Gespeichert
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #6 am:
30. November 2006, 17:11:31 »
Habs jetz mal ausgelotet, er sagt "INVALIDCALL", also muss irgendwas mit der PresentParameters Struktur net stimmen
nur was...
EDIT:
Es liegt mit ziemlicher Sicherheit NICHT an den Present Parameters. hab jetzt den Teil, der die Present Parameters füllt ausgelagert und nochmal seperat vor dem Reset aufrufen lassen. Aber der Fehler bleibt...
foglender Code ist dazu gehörend:
case D3DERR_DEVICENOTRESET:
{
InitPresentParameters();
if(FAILED(m_pD3DDevice->Reset(&m_PresentParameters)))
{
ERRORMSG("Reset() fehlgeschlagen!", "CheckDevice();");
return false;
}
InitScene();
return true;
}
«
Letzte Änderung: 30. November 2006, 17:34:51 von kokunze
»
Moderator informieren
Gespeichert
kokunze
Abteilungstrident
Buchstabenmillionär
Beiträge: 1.167
Re: Frage zum Hardware Render Mode (DirectX9.0c)
«
Antwort #7 am:
30. November 2006, 19:12:38 »
Ich glaub jetzt gehts...
An den PResent-Parameters lags net.
Musste den Vertex- und Indexbuffer sowie das Font Objekt erst löschen, dann den Reset machen, und die 3 Dinge dann wieder neu anlegen. Nu funzt es
Moderator informieren
Gespeichert
Thema versenden
Drucken
Seiten: [
1
]
Nach oben
« vorheriges
nächstes »
Trident
»
Forum
»
Off Topic
»
Off Topic
»
Frage zum Hardware Render Mode (DirectX9.0c)
Benutzer Online
581 Gäste, 0 Mitglieder
Powered by
EzPortal