MemoryAccessViolation bei RenderWorld abhängig vom System
Übersicht

BigdeakBetreff: MemoryAccessViolation bei RenderWorld abhängig vom System |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo erstmal,
ich beschäftige mich schon seit einer recht langen Weile mit BlitzBasic3D. So lange, dass ich zur Zeit an einer Rollenspielengine arbeite und auch mit 5k Quellcode Zeilen zu viel habe, um daran mein Problem, mit dem ich kämpfe, zu schildern. Hoffentlich ist dieses Thema nicht schonmal irgendwo hier aufgetaucht, aber ich hab wirklich alles durchsucht danach. Es geht darum, dass wie der Titel sagt, ich seltsamerweise in der Funktion RenderWorld die bekannte Fehlermeldung "Memory Access Violation" bekomme. Ich weiß, dass ich im Quellcode nichts falsch gemacht habe, denn ich habe die ganze Geschichte mal genaustens analysiert. Ob dieser Absturz kommt, ist von meinem System, sprich Computer, vom Grafikkartentreiber, dem DirectX und dem Betriebssystem abhängig. Ich habe ein Laptop mit WindowsXP(32 bit) und Windows7(64 bit). Dann habe ich noch einen PC mit WindowsXP(32 bit) und Windows7(64 bit), gestern hatte ich noch Windows Vista(32 bit) auf dem PC statt Windows7. Unter WindowsXP läuft sowohl am Laptop als auch am PC alles perfekt durch. Keine Fehlermeldung vom RenderWorld, allerdings sind auf meinem PC ( wahrscheinlich weil die Nvidia Grafikkarte zu neu ist ), die angezeigten Sprites auf seltsamer Art teilweise verzerrt, da wohl das DirectX 9 mit der Grafikkarte nicht mehr so richtig zusammen arbeiten will. Die ersten Probleme von meinem Spiel sind aufgetaucht, als ich es mal unter Windows Vista(32 bit) damals mit einem neuen Grafikkartentreiber und dem aktuellsten DirectX kompiliert und gestartet habe. Denn hier kam dann eben diese Fehlermeldung "Memory Acces Violation" bei RenderWorld. Das Problem war behoben, als ich einfach einen älteren Grafikkartentreiber installiert habe. Hier waren die Sprites übrigens nicht verzerrt sondern wurden immer richtig dargestellt. Gestern, als ich Windows7(64 bit) auf meinem PC installiert habe, mit samt der aktuellsten Grafikkartentreiber etc. hab ich genau das Problem nicht mehr weg bekommen, selbst mit einem älteren Grafikkartentreiber. Wann genau diese Fehlermeldung im RenderWorld auftritt kann ich euch sagen: Die Sprites sind die Ursache dieser Fehlermeldung, "vermutlich" Sprites mit einem EntityOrder von -1. Denn die Fehlermeldung entsteht nur dann, sobald ich solche Sprites rendere. Zusätzliche Ursache sind Planes, ich habe eine Testwelt, bei der ich einfach nur ein CreatePlane aufrufe, dort entsteht auch diese Fehlermeldung beim RenderWorld. Wenn ich mich als auf Sprites beschränke mit normalem EntityOrder und keine CreatePlane nutze, funktioniert alles einwandfrei, nur nutze ich an recht vielen Stellen Sprites mit einem EntityOrder von -1. Genau das ist in meinem WinVista(32 bit) mit neuen Nvidiatreiber aufgetreten und auch jetzt in meinem Win7(64 bit). Meine PC Daten: Grafikkarte: Geforce GT 285 Prozessor: AMD Phenom II X4 920 Meine Frage ist: Gibt es irgendeine Möglichkeit, die ganze Geschichte auch unter Windows7 mit 64 bit stabil zu kriegen? |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne jetzt den Text durchgelesen zu haben: Sind deine Texturen auch alle schön quadratisch und haben Seitenlängen, die einer 2er Potenz (2, 4, 8, 16, 32, 64, 128 etc) entsprechen?
Edit Jup, klingt sehr verdächtig nach falsch bemessenen Texturen. Andere Ursachen könnten noch sein: Du hast zu viele Texturen auf dem Bildschirm oder ein Mesh mit zu vielen Vertices oder Triangles. Diese würden dann wohl aber auf allen Grafikkarten /Systemen zum MAV (Memory Access Violation) führen. mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im übrigen sind echte Blitz3D -Sprites mit so die langsamsten Entities die geboten werden. Wenn es nur wenige (bis maximal ~20) sind, ist es jedoch kein Problem. Wenn du aber damit ganze Partikelanimationen erstellen willst, dann würde ich dir hier zu einer Singlesurface -Methode raten. Absoluter Geschwindigkeitsvorteil. In so einem Fall kann ich dir sicherlich behilflich sein, eine Möglichkeit zu finden, die ohne zusätzlichen DLLs auskommt. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Bigdeak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Holzchopf:
Ich habe die ganze Sache überprüft und nachgeguckt, nein, an den Texturen liegt es nicht. Wenn dann müsste das MAV kommen, sobald ich ein Sprite anzeige mit falscher Textureabmessung, aber das ist eben auf dem PC nicht der Fall. Desweiteren war meine Vermutung richtig, sobald ich einen EntityOrder von < 0 verwende, kommt das MAV, sobald ich das entsprechende Entity Rendern möchte. Ich glaube sogar, dass genau dieser Fehler bei jedem Entity auftritt mit EntityOrder < 0 und nicht nur Sprites, aber das überprüfe ich noch. @hectic: Ich habe auch schon überlegt, eine eigene Technik für Sprites zu entwickelt, nur eben eher auf eigene Faust mit dem Setzen eigener Vertices auf Surfaces. Aber im Endeffekt zeige ich nicht all so viele Partikelanimationen an, weil ich eher Sprites mit animierter Textur anzeige und mir dadurch da vieles an Performance sparen kann und es imho auch besser aussieht. Aber generell können wir ja mal Kontakt knüpfen und ich kann dir etwas mehr vom Projekt erzählen, der Link da in deiner Signatur sieht sehr interssant aus ![]() |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist es vielleicht möglich, dass die aktuellen Nvidia Grafiktreiber daran Schuld sind? Laut Bigdeaks Aussagen hat er die neusten installiert.
Vielleicht beschränken die neusten sich nicht nur auf das fehlen von CreateTexture, sondern nun auch auf die EntityOrder von DX7. Zitat: die angezeigten Sprites auf seltsamer Art teilweise verzerrt, da wohl das DirectX 9 mit der Grafikkarte nicht mehr so richtig zusammen arbeiten will. [...] Die ersten Probleme von meinem Spiel sind aufgetaucht, als ich es mal unter Windows Vista(32 bit) damals mit einem neuen Grafikkartentreiber und dem aktuellsten DirectX kompiliert und gestartet habe. Klingt zumindest danach.
Blitz3D benutzt DirectX 7 und ist somit eigentlich extrem out-dated. Hast du schonmal versucht noch ältere Grafikkartentreiber drauf zu spielen? Neue Grafiktreiber von Nvidia sind Gift für DirectX 7. Ich hab hier noch den Forceware 169.x auf der Platte und der funktioniert super. (ist von Februar 2009) Meld dich mal falls nichts hilft, ich kann den irgendwo hochladen. |
||
Bigdeak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@NighPhoenix:
Genau wie ich es beschrieben habe, in Vista war es ja auch so. Ist dieser ältere Treiber Windows7 64 bit tauglich? Wenn ja, dann sofort her damit! ^^ |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah ich denke genau da wird das Problem liegen.
Die älteren unterstützen kein Win7, weil es das noch nicht gab. Aber soweit ich weiß kannst du auch Treiber für Vista auf Win 7 laufen lassen, informiere dich dazu vorher nochmal ob das auch für Grafiktreiber gilt, bevor du vor nem schwarzen Bildschirm sitzt. Wenn es mit den Vista Treibern geht, dann ist diese Version eine funktionierende: http://www.nvidia.de/object/wi...44_de.html Ansonsten könntest du es noch mit Omega Treibern versuchen. Die sind inzwischen sogar alle stabil und versprechen große Kompatibilität. *such* http://www.omegadrivers.net/nvidia_vista64.php Genau diese Seite liefert auch die 169er als Omega Version. Auf den 169er laufen alle mir bekannten Spiele problemlos. Sind top. *edit* Sorry hab Vista mit Win7 verwechselt. Text geändert. *edit 2* Ich übernehme kein Gewähr dafür: http://www.windows-7-forum.net...s-7-a.html Laut einigen Links, unter anderem dieser, sind Vista Treiber zu Win 7 kompatibel. |
||
Bigdeak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@NightPhoenix:
Uff, die ganze Geschichte bringt mich immer mehr zum verzweifeln. Ich habe beide Treiber ausprobiert, das Problem ist nur, dass diese beiden Treiber nicht mehr kompatibel mit meiner Geforce GTX 285 sind, weil die Treiber wohl dafür schon zu alt sind. :/ Ich habe sämtliche Treiber von NVidia ausprobiert, DirectX ständig neu installiert etc. Der einzige Unterschied ist von Treiber zu Treiber, dass bei manchen Treiber nach den ersten 2 gerenderten Frames bei einer Plane ein MAV in RenderWorld kommt und bei manchen anderen Treiber schon nach dem ersten Frame... ... bis jetzt sehe ich nurnoch die Lösung, mein altes kaputtes WinXP Betriebssystem vom PC zu löschen und neu aufzusetzen und das Spiel darauf zu entwickeln, kann dann keinerlei BlitzBasic Spiele mit dem jetzigen Win7 64 bit System spielen, denn jegliches 3D Spiel was in BlitzBasic programmiert ist, stürzt eben ab.... Scheinbar gibt es auch keine kompatiblitätstreiber mehr speziell für solche Grafikkarten, wie ich sie habe unter so einem aktuellen Betriebssystem. (Zumale unter Vista 32 bit mit diesem PC und dem entsprechenden Treiber noch alles einwandfrei funktioniert hat mit BlitzBasic) Falls jemand noch eine Möglichkeit sieht, da vielleicht doch noch was machen zu können, kann derjenige es ja hier rein posten, ich für meinen Teil bin etwas enttäuscht von der gesamten Sache, weil wohl eben auch Leute mit einem aktuelleren Systemen mein spiel nicht mehr spielen können. Mein Fazit, so leid es mir tut, was ich daraus schließe, ist, dass ich, damit ich eine halbwegs zukunftsmäßig Rollenspielengine hinkriege, mich auf kurz oder lang von BlitzBasic verabschieden muss und dafür dann mit einer anderen Sprache in einem aktuelleren DirectX eine solche Engine schreiben muss. Enttäuscht bin ich eben deshalb, weil ich mir mit dieser jetzigen Engine schon so viel Arbeit gemacht hab mit der Stukturierung, den Abkapselungen etc. ich bin im Prinzip mitten drin in der Entwicklung, würde ich diese zuende führen, tue ich das mit dem Wissen, dass die Technik eh veraltet ist und bald vielleicht nicht mehr klappt. Aufgeben möchte ich mit der Entwicklung aber auch nicht, weil es dann kein abgeschlossenes Projekt ist und weil dann viel, sehr viel Arbeit für die Füße war... |
||
Bigdeak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry für den Doppelpost, aber ich habe eine Lösung und ich finde alle sollten daran Teil haben ![]() Und zwar hab ich mich echt tot gesucht an den Fehler, warum es unter Win7 64 bit nicht klappt, es liegt nicht an dem CreateTexture, wohl auch nicht so ganz an dem EntityOrder, sondern an dem Sprite. Ich hab nun folgenden Code programmiert: Code: [AUSKLAPPEN] Type CompatibleSprite Field Mesh Field Surface End Type Function CreateCompatibleSprite . CompatibleSprite() coms . CompatibleSprite = New CompatibleSprite coms \ Mesh = CreateMesh() coms \ Surface = CreateSurface( coms \ Mesh ) v1 = AddVertex( coms \ Surface , -1 , -1 , 0 , 0 , 1 ) v2 = AddVertex( coms \ Surface , -1 , 1 , 0 , 0 , 0 ) v3 = AddVertex( coms \ Surface , 1 , -1 , 0 , 1 , 1 ) v4 = AddVertex( coms \ Surface , 1 , 1 , 0 , 1 , 0 ) AddTriangle( coms \ Surface , v1 , v2 , v3 ) AddTriangle( coms \ Surface , v2 , v4 , v3 ) EntityFX coms \ Mesh , 16 + 32 + 1 Return coms End Function Function LoadCompatibleSprite . CompatibleSprite( path$ , flags ) coms . CompatibleSprite = CreateCompatibleSprite() texture = LoadTexture( path$ , flags ) EntityTexture coms \ Mesh , texture Return coms End Function Function UpdateCompatibleSprites( Camera ) For coms . CompatibleSprite = Each CompatibleSprite PointEntity coms \ Mesh , Camera Next End Function Das nutze ich jetzt statt die normalen Sprites und siehe da, kein einziger MAV mehr in RenderWorld... ich habe sozusagen auf ganz simple Weise eigene Sprites programmiert. Für die, die das selbe Problem irgendwann wie ich mit ihrem Projekt haben, wo es auch vielleicht an dem BlitzBasic Sprite liegt, die können sich ja diesen Code nehmen. Ob es durch diese Alternative große Performanceeinbußungen gibt, kann ich euch nicht sagen, weil ich einen sehr schnellen PC hab und davon nicht merke in meinem Projekt. Ich bin total glücklich, dass es jetzt funktioniert! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group