SetViewport Programmabsturz
Übersicht

![]() |
Suco-XBetreff: SetViewport Programmabsturz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abend.
Ich habe hier schon häufiger mitbekommen, dass der Befehl SetViewport bei einigen Rechnern (Anscheinend die mit alten Grafikkarten) zu einem Programmabsturz führt. Da ich aber nicht drum rum komme diesen Befehl zu nutzen, will ich der Sache mal genauer auf den Grund gehen und wende mich an euch. Wer hatte also schonmal so einen Absturz, wer kennt die genauen Gründe, passiert das ganze bei beiden Treibern und gibt es vielleicht die Möglichkeit, Hinweise auf ein nicht-funktionieren bei dem jeweiligen Programmausführer zu erhalten? Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn es in DX ist: Kannst du nix dagegen machen.
Grund ist das Viewport in BlitzMax unter DX mit ClipPlanes arbeitet. 4 um genau zu sein. Die Karten die dabei abstürzen jedoch supporten nur 2 ClipPlanes. In OpenGL haben sie kein Problem weil der GLScissor Test anders funktioniert. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Soweit ich weiss, liegt es an daran, dass ältere Grafikkarten nicht genug Clip-Planes unterstützen. Ich dachte aber, dass das Programm nicht abstürtzt, sondern nur Grafikfehler hinterlässt. Aber das liegt vielleicht auch am Treiber.
Jedenfalls kann man ( bei DirectX ) die maximale Anzahl von unterstützten Clip-Planes mit Hilfe der Methode GetCaps ermitteln, die zu IDirect3DDevice7 gehört. So kommt man an das Device: Code: [AUSKLAPPEN] Local device:IDirect3DDevice7 = D3D7Max2DDriver( ).device
Die Struktur, die GetCaps benötigt, ist so aufgebaut: Code: [AUSKLAPPEN] typedef struct _D3DDeviceDesc7 {
DWORD dwDevCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMinTextureWidth, dwMinTextureHeight; DWORD dwMaxTextureWidth, dwMaxTextureHeight; DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; DWORD dwMaxActiveLights; D3DVALUE dvMaxVertexW; GUID deviceGUID; WORD wMaxUserClipPlanes; WORD wMaxVertexBlendMatrices; DWORD dwVertexProcessingCaps; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; } D3DDEVICEDESC7, *LPD3DDEVICEDESC7; |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Also funktioniert es mit dem OpenGL Treiber "ohne" Absturz und Grafikfehler? Ich habe mal ein wenig in den DX Treiber geschaut und diese Zeilen gefunden Code: [AUSKLAPPEN] Local err If device.SetClipPlane(0,[1.0,0.0,0.0,-Float(x)]) err=True If device.SetClipPlane(1,[-1.0,0.0,0.0,Float(x+width)]) err=True If device.SetClipPlane(2,[0.0,1.0,0.0,-Float(y)]) err=True If device.SetClipPlane(3,[0.0,-1.0,0.0,Float(y+height)]) err=True If err Throw "device does not support clipplanes" Da der Fehler nirgendwo sonst abgefangen wird könnte man ein Programmende ja mit dem Abfangen dieses Fehlers beheben denke ich mal. Weiß aber nicht ob es DX Interne Fehler geben könnte, die zu einem Absturz führen. @ChristianK: Danke für den Hinweis, mal schauen was ich damit noch für Informationen erhalten kann. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group