Aktuelle Zeit: 14.12.2017 02:33

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 05.12.2017 21:45 
Offline

Registriert: 13.08.2016 12:53
hallo,
ich hoffe das ist hier richtig (bitte sonst verschieben )

aktuell weis ich nicht weiter (ich vermute ich nutze die falschen Google Begriffe).... und ich hoffe ihr könnt mir helfen...

ich habe ein kleines Script probiert(mehrer planes mesch´s laden und darstellen) und nun festgestellt das wenn ich 3d Objekte lade nur meine cpu ausgelastet wird (nur 1 kern)aber meine Grafikkarte nicht ...
ich vermute das deswegen auch die fps zusammen brechen( von ~5000 auf ~30 fps) nach ein paar mal die gleichen planes dargestellt (c.a. 5500 planes)

ich vermute dabei das die Grafik engien nur auf ein kern zugreift (glaube sowas mal angedeutet gelesen zu haben bei opengl) ich denke ich muss der 3d engein noch irgendwie erzählen das sie die Grafikkarte nutzen soll (die meistens bei ~1 % Belastung ist wenn ein cpu-kern ~100% ist während andere kerne bei ungefähr 1%liegen...)

dazu der code also die schleife wo so viel Leistung gefuttert wird:


Repeat
RenderWorld()
Delay(1)
FlipBuffers()
Until Quit = 1


(soory ein richtiges beenden ist noch nicht drin )

ich werde die Vermutung nicht los das ich die dx ich nen es mal anschalten muss weil ich in den Artikel (viewtopic.php?f=4&t=30217) mehrer Informationen daraus interpretiere... nur mehr als das habe ich auch nicht gefunden.... (auch nicht wie das gemacht worden ist)

so nun aber zu meiner eigentlichen frage kann mir wer ein tipp geben ( wenn möglich nicht vorsagen ( will ich es verstehen möchte...) aber son stups auf die richtige bahn ) weil ich denke für ein Projekt werde ich mehr als die planes brauchen von der Leistung her... und erhoffe mir von der Grafikkarte die Leistung...

vielen dank schon mal im voraus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 06.12.2017 15:27 
Offline

Registriert: 13.08.2016 12:53
so ich denke meine Vermutung sind heute .... (falsch Gewese) (aber ich versuche hier dar zustellen was mir nun noch an versuchen aufgekommen ist/was ich getestet habe fals wer anders das gleiche Problem hat oder so )

denn ich denke ich habe herausgefunden wie ich zwischen dx9 und opengl wechsel...
dank https://www.purebasic.com/documentation ... stems.html (Stichwort Subsysteme)

nun habe ich auch eine ogre.log (log Datei durch InitEngine3D(#PB_Engine3D_DebugLog ) )
die mir auch den wechsel zwischen dx9 und opengl darstellt (wenn ich den log richtig interpretiere)

leider läuft damit immer noch alles auf einem Kern (ich vermute das nur da der taskmanager 1 kern c.a. 100% und msi afterburner mir anzeigt das die Grafikkarten bei c.a. 1% liegt...)

zurzeit da mir nichts mehr einfehlt überlege ich ob mandas ganze nicht in mehrer Screen aufteilen kann oder ob ich anderes irgendwie sparsamer das ganze machen kann auch wenn ich es noch nicht aufgeben will ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 06.12.2017 16:51 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Zunächst mal läuft natürlich alles nur auf einem Kern, wenn du nicht selbst neue Threads erzeugst. Und da wir deinen Code nicht kennen, können wir dir hier eh nicht helfen. Gib uns ein Beispielcode, der bei dir und für deinen Geschmack eine zu hohe Auslastung hat, dann können wir mal schauen. Und solange du nur ein paar Planes darstellst, wird deine Grafikkarte kaum ausgelastet sein.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Tevo Tarantula 3D-Drucker von Gearbest (Aufbau und Review)
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 06.12.2017 18:08 
Offline

Registriert: 13.08.2016 12:53
um den Code um den es gehen sollte schreibe ich dann wie im ersten post nochmal .... diesmal ergrenze ich noch die gesamte Datei drum herum

ich dachte das die fps schleife das wichtige sei...(die ich eigentlich am Anfang schrieb) ... da nix anderes zur gleichen zeit lauft (also kein andere tread) erlaube ich mir das drumherum auch ( ich hoffe das ist nicht schlimm)

den habe ich so in einer schleife laufen lassen um andere störungen aus schlissen zu können und ist auf das Minimum begrenzt (vorsicht das ende kann da nicht erreicht werden)

Repeat
RenderWorld()
Delay(1)
FlipBuffers()
Until Quit = 1

und ich erhalte c.a. 100% CPU last...


da der code da schon drin ist schreibe ich nochmal die gesamte Datei. Der schient zu gehen bis auf die fps halt
Code:
 OpenWindow(0, 0, 0, 800, 600, "A screen in a window...")
  #RobotMesh=2
  #RobotTexture=3
  map_dir.s=".\map_files\"
  UseSQLiteDatabase()
  InitEngine3D(#PB_Engine3D_DebugLog )
  Add3DArchive("./tes map mesch", #PB_3DArchive_FileSystem)
  InitSprite()
  InitKeyboard()
  InitMouse()
  Parse3DScripts()
  OpenWindowedScreen(WindowID(0), 0, 0, 800, 600,0,0,0,#PB_Screen_NoSynchronization    )
  LoadMesh   (#RobotMesh   , "plane.mesh")
  LoadTexture(#RobotTexture, "clouds.jpg")
  TransformMesh(#RobotMesh, 1, 1, 1, 1, 1, 1, 0, 0, 0 )
  fu= CreateMaterial(#PB_Any, TextureID(#RobotTexture))
  If OpenDatabase(0, map_dir+"map.sqlite", "", "")
    If DatabaseQuery(0, "SELECT * FROM M1 WHERE  Typ=1") 
     While NextDatabaseRow(0)   ; alle Einträge durchlaufen
      z=GetDatabaseLong(0, 1)*2
      x=GetDatabaseLong(0, 3)*2
      y=0
      Repeat
        If x>=32
          y+3
          x=x-32
        EndIf
      Until x<=32     
      CreateEntity( #PB_Any, MeshID(#RobotMesh), MaterialID(fu) ,x,y,z)
     Wend
    EndIf
    FinishDatabaseQuery(0)
  EndIf
  DisableMaterialLighting(fu, 1)
  CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
  SetLightColor(0, #PB_Light_SpecularColor, RGB(255, 0, 0))
  CreateCamera(0, 0, 0, 100, 100)
  MoveCamera(0, 0, 0, 500)
  CameraBackColor(0, RGB(0, 0, 128))
  Repeat     
    If ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Up )
        cam+1
      EndIf
      If KeyboardPushed(#PB_Key_Down)
        cam-1
      EndIf
      If KeyboardPushed(#PB_Key_Left)
        cam_Y+1
      EndIf
      If KeyboardPushed(#PB_Key_Right)
        cam_Y-1
      EndIf
      If KeyboardPushed(#PB_Key_PageUp)
        ro+1
      EndIf
      If KeyboardPushed(#PB_Key_PageDown)
        ro-1
      EndIf
      If KeyboardPushed(#PB_Key_E)
        rota-1
      EndIf
      If KeyboardPushed(#PB_Key_D)
        rota+1
      EndIf
      If KeyboardPushed(#PB_Key_Escape)
        Quit = 1
      EndIf
    EndIf
    MoveCamera  (0, cam_Y, ro, cam)
    RotateCamera(0, rota, 0, 0 )
    If cam>0
      cam-1
    EndIf
    If cam<0
      cam+1
    EndIf 
    If cam_Y>0
      cam_Y-1
    EndIf
    If cam_Y<0
      cam_Y+1
    EndIf
    If ro>0
      ro-1
    EndIf
    If ro<0
      ro+1
    EndIf
    RenderWorld()
    Delay(1)
    FlipBuffers()
    Event = WindowEvent()
    If Event = #PB_Event_CloseWindow
       Quit = 1
     EndIf
  Until Quit = 1
End



hir der code etwas zusammengestückelt

Code:
 OpenWindow(0, 0, 0, 800, 600, "A screen in a window...")
  #RobotMesh=2
  #RobotTexture=3
  map_dir.s=".\map_files\"
  UseSQLiteDatabase()
  InitEngine3D(#PB_Engine3D_DebugLog )
  Add3DArchive("./tes map mesch", #PB_3DArchive_FileSystem)
  InitSprite()
  InitKeyboard()
  InitMouse()
  Parse3DScripts()
  OpenWindowedScreen(WindowID(0), 0, 0, 800, 600,0,0,0,#PB_Screen_NoSynchronization    )
  LoadMesh   (#RobotMesh   , "plane.mesh")
  LoadTexture(#RobotTexture, "clouds.jpg")
  TransformMesh(#RobotMesh, 1, 1, 1, 1, 1, 1, 0, 0, 0 )
  fu= CreateMaterial(#PB_Any, TextureID(#RobotTexture))
  If OpenDatabase(0, map_dir+"map.sqlite", "", "")
    If DatabaseQuery(0, "SELECT * FROM M1 WHERE  Typ=1") 
     While NextDatabaseRow(0)   ; alle Einträge durchlaufen
      z=GetDatabaseLong(0, 1)*2
      x=GetDatabaseLong(0, 3)*2
      y=0
      Repeat
        If x>=32
          y+3
          x=x-32
        EndIf
      Until x<=32     
      CreateEntity( #PB_Any, MeshID(#RobotMesh), MaterialID(fu) ,x,y,z)
     Wend
    EndIf
    FinishDatabaseQuery(0)
  EndIf
  DisableMaterialLighting(fu, 1)
  CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
  SetLightColor(0, #PB_Light_SpecularColor, RGB(255, 0, 0))
  CreateCamera(0, 0, 0, 100, 100)
  MoveCamera(0, 0, 0, 500)
  CameraBackColor(0, RGB(0, 0, 128))
  Repeat     
    RenderWorld()
    Delay(1)
    FlipBuffers()
  Until Quit = 1
End


und hier noch mal der Code wo es langsam wird....
Code:
  Repeat     
    RenderWorld()
    Delay(1)
    FlipBuffers()
  Until Quit = 1


ich hoffe das ist so wie du es meintest (sorry ich bin mir nicht sicher was du genau brauchst da ich ja den Code als beispiel der ich denke das problem ist schon geschrieben habe)...
(sorry wenn ich nicht so sprach gewandt bin ich hoffe das ist aber so oki )


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 08.12.2017 14:08 
Offline

Registriert: 13.08.2016 12:53
durch das tauschen der mesh´s habe ich heraus gefunden beispiel Robot nehme anstat einer plane

ich die gleiche cpu last habe mit den gleichen fps mit höher GPU Auslastung (wenn mein test aussage kräftig ist würde mich freuen ob jemand sagen kann ob das auch bei anderen so ist)


jetzt ist nu meine frage wird anzahl der Entity durch die CPU(ein kern) begrenzt und die Komplexität durch die GPU ?

(ich hoffe das ist nicht schlimm das ich solche Anfänger fragen stelle...)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 08.12.2017 15:41 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Ich weiß nicht ob das dein Problem behebt, aber du solltest pro main loop iteration alle events abarbeiten.
Dein erster code verarbeitet nur ein event pro frame, dein zweiter code gar keine events.
Beispiele findest du in der Hilfe zu OpenWindowedScreen(). Die 3D Beispiele machen das durch Aufruf von Screen3DEvents() die in Screen3DRequester.pb definiert ist.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 08.12.2017 15:49 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Schlimm ist eher, dass deine Sätze kaum zu verstehen sind. Bist du tatsächlich Legastheniker oder gibst du dir nur keine Mühe? Und das zweite Problem ist, dass ich mit 3D eigentlich nichts am Hut hab.

Der Arbeitsspeicher deiner Grafikkarte enthält normalerweise alle Meshes, Texturen und Koordinaten der Instanzen, so grob gesagt. Dann rendert sie das alles um es auf dem Bildschirm auszugeben. Die CPU steuert die Position aller Instanzen und initial das Kopieren der Texturen und Meshes von der Festplatte zum Arbeitsspeicher und dann zum Grafikkartenspeicher. Wird die CPU auch noch dazu benutzt Physik zu berechnen, müssen die Meshes natürlich auch im Arbeitsspeicher vorliegen, damit sie damit arbeiten kann.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Tevo Tarantula 3D-Drucker von Gearbest (Aufbau und Review)
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 08.12.2017 20:00 
Offline

Registriert: 13.08.2016 12:53
@ #NULL vielen dank. Ich dachte man sollte immer nur das überprüfen was man auch nutzt, auch wenn das was für dann ist wenn ich erstmal eine gute Performanz habe den sonst wird die schleife vermutlich noch langsamer ...

@NicTheQuick :angry: ich frage mich ob du nur trollen willst oder ähnliches ... weswegen ich dementsprechend reagiere werde ... ( Entity und Meshes so wie Texturen sind Unterschiedliche dinge....
und hir ein kleiner Auszug aus der Hilfe von pb
zitat:"Es ist möglich, ein Mesh oder ein Material jeweils bei mehreren Entities zu benutzen. Dies reduziert den Speicherverbrauch und notwendige CPU-Takte. "
da du die frage vermutlich nicht einmal richtig verstanden hast gehe ich davon aus das es keine Anfänger frage mehr ist )

@wieder an alle

hat wer ne Idee wie man die schleife sinnvoll auf mehrere kerne legt oder evtl so macht das sie schneller läuft... ?
(das delay soll die cpu entlasten und sie nicht auf 100% laufen lassen also soll es nicht weggelassenen werden auch wenn das delay zur zeit nicht wirklich was bringt ...)

Code:
  Repeat     
    RenderWorld()
    Delay(1)
    FlipBuffers()
  Until Quit = 1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: 11.12.2017 11:35 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
xdes hat geschrieben:
@NicTheQuick Entity und Meshes so wie Texturen sind Unterschiedliche dinge....
und hir ein kleiner Auszug aus der Hilfe von pb
zitat:"Es ist möglich, ein Mesh oder ein Material jeweils bei mehreren Entities zu benutzen. Dies reduziert den Speicherverbrauch und notwendige CPU-Takte. "
da du die frage vermutlich nicht einmal richtig verstanden hast gehe ich davon aus das es keine Anfänger frage mehr ist )

Nichts anderes habe ich gesagt. Bloß, dass ich Instanz statt Entity gesagt habe, was in dem Fall das selbe ist. Und Material ist natürlich der korrekte Begriff um die Oberfläche eines Meshes zu beschreiben, aber die Texturen selbst verbrauchen eben am meisten Speicherplatz.
Keine Ahnung, warum du mich als Troll siehst. Kann ich aber gerne zurück geben.

Du hast immer noch kein lauffähiges Beispiel gepostet. Nur irgendwas, was Daten aus einer Datenbank liest, die wir nicht besitzen und Dateien benutzt, die wir ebenfalls nicht besitzen. Hier haben die wenigsten Lust freiwillig deinen Code erst mal so umzubauen, dass er bei ihnen läuft.
Dennoch: Von einem Delay in der Ereignisschleife würde ich absehen. Versuche stattdessen mal die vertikale Synchronisation zu aktivieren. Dann sollte FlipBuffers() automatisch warten bis dein Bildschirm sich das nächste mal aufbaut und so CPU-Zeit sparen.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Tevo Tarantula 3D-Drucker von Gearbest (Aufbau und Review)
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: rendern mit gpu nutzen evtl dx
BeitragVerfasst: Gestern 00:37 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
Sehr löblich deine Bemühungen xdes, aber so wie sich deine Texte lesen hast du mit Grafiken dich noch gar nicht außeinander gesetzt, bzw. ist das dein erstes mal, oder?
Egal ob DirectX oder OpenGL, 3D-Grafik besteht nicht einfach nur aus ein paar Meshes, Texturen oder Materials und ein paar Lichtquellen hier und da. Das was dahinter steckt ist um ein vielfaches Komplexer, schon alleine deswegen, weil die Technik hinter dem Beschleunigen von 3D-Grafiken, also die Hardware Grafikkarte, nicht nur einfach Nullen und Einsen verarbeitet ... das soll dich aber jetzt nicht entmutigen, das muss man auch nicht im Detail wissen. Man sollte aber eine Ahnung davon haben, was da passiert. Dafür bin ich aber auch der falsche Ansprechpartner :yin-yang:

Zu deinem eigentlichen Problem: Die eingebaute PureBasic-OGRE3D-Engine kann schlicht nicht auf mehrere Threads ausgelagert werden. Das geht nicht mit DirectX9.0c weil es schlicht nicht vorgesehen ist und auch wenn ich das nie in Erwägung gezogen hab, das wird mit der OpenGL-Implementierung wohl auch nicht klappen. Doch selbst wenn DX11 zur Verfügung stünde, würden deine Beispiele nicht wirklich schneller laufen, weil du gar nix tust, was eine Grafikkarte belastet. Das deine Beispiel mit 100% Auslastung eines Kerns deiner CPU resultiert ist klar, das passiert bei jedem Loop der nicht ausgebremst wird :wink: Im Forum gibs ein paar pfiffige Beispiele, im englischen Forum noch mehr ... die ein paar interessante Dinge tun mit der eingebauten 3D-Engine.

Um die Grafikkarte nun ins Schwitzen bringen zu können sind spezielle "Tricks" nötig, die erst dazu führen, das die Grafikkarte tatsächlich aktiv wird. Eines davon sind die "StaticGeometry". Und OGRE bietet so ähnliches auch für bewegte bzw. animierte Objekte, leider unterstützt das PB aber leider immer noch nicht, somit gibs nicht viel, was da tun kannst außer mit dem Limit zu leben. Eine andere Sache sind im übrigen Shader, da müssteste dich auch Tief in die Materie einarbeiten, wenn du mit PureBasic-OGRE Grafikkarten zum schwitzen bringen willst. Beispiele dazu sind hier oder im englischem Forum zu finden.

Threads würde ich zu dem die Finger von lassen, so lange du überhaupt noch keine Erfahrungen mit OGRE3D hast und auch noch nix fertiges, das so funktioniert. Sonst wirst irgend wann auf unlösbare Probleme stoßen. Bringen tut dir das auch nur in so weit etwas, als dass du dann am Ende einen Thread für die Grafikverarbeitung verwenden kannst und andere für Spiellogik. In der Entwickung sollt das aber mit unter der letzte Schritt sein.

Wenn du mit PB lernen willst, wie man Spiele oder Grafiken verwendet, dann empfehle ich erst mal die 2D-Bibliothek. Und dich neben bei in der Zwischenzeit etwas mit 3D-Grafiken auseinander zu setzen. Ansonsten würd ich sagen, viel Spaß und Erfolg. <)

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye