Aktuelle Zeit: 11.12.2017 13:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 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: Heute 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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 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