Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 18:57

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zu hohe CPU-Auslastung
BeitragVerfasst: Mo Sep 15, 2008 07:40 
Offline
DGL Member

Registriert: Do Sep 11, 2008 17:54
Beiträge: 41
Also, ich bin erst letzte Woche über diese Seite und das OpenGL gestoßen.
Ich beschäftige mich das erste mal mit 3D Programmierung und habe folgenden Auftrag bekommen:
Ich soll eine sich drehende Glaskugel programmieren (Bildschirmschoner).
Ich hab mich erstmal bis zu einem bestimmten Punkt durch dieier Tutorials gearbeitet.
Das mit dem Glaseffekt (durchsichtigkeit) das ist derzeit noch nicht mein Problem da ich soweit noch nicht bin...
Aber hier erstmal mein Quelltext:

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.  
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL, ExtCtrls;
  9.  
  10. type
  11.  
  12.   TForm1 = class(TForm)
  13.     Timer1: TTimer;
  14.  
  15.     procedure FormCreate(Sender: TObject);
  16.     procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
  17.     procedure FormDestroy(Sender: TObject);
  18.     procedure Timer1Timer(Sender: TObject);
  19.  
  20.   private
  21.  
  22.     procedure Render();
  23.  
  24.     { Private-Deklarationen }
  25.  
  26.   public
  27.  
  28.     { Public-Deklarationen }
  29.  
  30.   end;
  31.  
  32. const
  33.  
  34.   NearClipping = 1;
  35.  
  36.   FarClipping = 1000;
  37.  
  38.   mat_specular   : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  39.   mat_shininess  : Array[0..0] of GlFloat = (50.0);
  40.   mat_ambient    : Array[0..3] of GlFloat = (0.4, 0.4, 0.4, 1.0);
  41.   mat_diffuse    : Array[0..3] of GlFloat = (0.4, 0.8, 0.4, 1.0);
  42.  
  43.   light_position : Array[0..3] of GlFloat = (10.0, 10.0, 0.0, 1.0);
  44.   light_ambient  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  45.   light_diffuse  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  46.  
  47. var
  48.  
  49.   Form1 : TForm1;
  50.  
  51.   DC : HDC;
  52.   RC : HDC;
  53.  
  54.   Rotation : Integer;
  55.  
  56. implementation
  57.  
  58. {$R *.dfm}
  59.  
  60. procedure TForm1.FormCreate(Sender: TObject);
  61. begin
  62.  
  63.  Rotation := 0;
  64.  
  65.  Cursor := -1;
  66.  
  67.  DC := GetDC(Handle);
  68.  
  69.    if (not InitOpenGL) then
  70.  
  71.        Application.Terminate;
  72.  
  73.  RC := CreateRenderingContext(DC,
  74.                               [opDoubleBuffered],
  75.                               17,
  76.                               32,
  77.                               0,0,0,
  78.                               0);
  79.  
  80.  ActivateRenderingContext(DC, RC);
  81.  
  82.  glClearColor(0.0, 0.0, 0.0, 0.0);
  83.  
  84.  glEnable(GL_LINE_SMOOTH);
  85.  
  86. end;
  87.  
  88. procedure TForm1.Render();
  89. begin
  90.  
  91.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  92.  
  93.  glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  94.  glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  95.  glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  96.  glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  97.  
  98.  glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  99.  glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  100.  glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  101.  
  102.  glEnable(GL_LIGHTING);
  103.  glEnable(GL_LIGHT0);
  104.  
  105.  glMatrixMode(GL_PROJECTION);
  106.  glLoadIdentity;
  107.  gluPerspective(45, ClientWidth / ClientHeight, NearClipping, FarClipping);
  108.  
  109.  glMatrixMode(GL_MODELVIEW);
  110.  glLoadIdentity;
  111.  
  112.  glTranslatef(0, 0, -10);
  113.  glScalef(1, 1, 1);
  114.  glRotatef(Rotation ,0, 1, 0);
  115.  
  116.  glPushMatrix();
  117.    gluSphere(gluNewQuadric(),2, 700, 700);
  118.  glPopMatrix();
  119.  
  120.  SwapBuffers(DC);
  121.  
  122. end;
  123.  
  124. procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
  125. begin
  126.  
  127.  glViewport(0, 0, ClientWidth, ClientHeight);
  128.  glMatrixMode(GL_PROJECTION);
  129.  glLoadIdentity;
  130.  gluPerspective(3, ClientWidth / ClientHeight, NearClipping, FarClipping);
  131.  
  132.  glMatrixMode(GL_MODELVIEW);
  133.  glLoadIdentity;
  134.  
  135.  Render();
  136.  
  137. end;
  138.  
  139. procedure TForm1.FormDestroy(Sender: TObject);
  140. begin
  141.  
  142.  DeactivateRenderingContext;
  143.  DestroyRenderingContext(RC);
  144.  ReleaseDC(Handle, DC);
  145.  
  146. end;
  147.  
  148. procedure TForm1.Timer1Timer(Sender: TObject);
  149. begin
  150.  
  151.  Render();
  152.  
  153.    if (Rotation < 180) then
  154.  
  155.        inc(Rotation)
  156.  
  157.    else
  158.  
  159.        Rotation := -180;
  160.  
  161.    if ((Rotation >= -90) and (Rotation <= 90)) then
  162.  
  163.        glEnable(GL_CULL_FACE)
  164.  
  165.    else
  166.  
  167.        glDisable(GL_CULL_FACE);
  168.  
  169. end;
  170.  
  171. end.


Nun, da man ja ohne Bezugspunkt zu irgendetwas eine Drehung der Kugel nicht wahrnehmen kann, hab ich die Lichter eingebaut.
Allerdings führt die Berechung dieser zu einer CPU-Auslastung bei nicht ganz so neuen PC's die auch schon mal 100% betragen kann.
Kann man diese Ansprüche an die CPU irgendwie runterschrauben?

Edit...

Das Problem ist halt, es ruckelt...


Zuletzt geändert von Cre@or am Di Sep 16, 2008 16:08, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 08:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Kann man diese Ansprüche an die CPU irgendwie runterschrauben?

Das sollte eigentlich ganz leicht sein.

Betrifft: die "Methode TForm1.Render"

Die folgenden Zeilen:
Code:
  1.  glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  2.  glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  3.  glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  4.  glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  5.  
  6.  glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  7.  glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  8.  glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  9.  
  10.  glEnable(GL_LIGHTING);
  11.  glEnable(GL_LIGHT0);


....sind eine Initilaisierung des Lichts und müssen nur einmal gemacht werden, sie gehören daher ANS ENDE der Methode "FormCreate".

Der wirkliche Grund für die Totalbeschäftigung der CPU ist aber m.E. folgende Zeile:
Code:
  1. gluSphere(gluNewQuadric(),2, 700, 700);


Was geschieht hier? gluSphere zeichnet eine Kugel, das ist OK. gluNewQuadric aber ERZEUGT eine Kugel. Das bedeutet: Du erzeugst bei jedem Renderdurchgang ein Kugelobjekt, nur um es zu zeichnen. Wenn Du 60 Renderdurchgänge pro Sekunde hast (das ist ein schwacher Wert) erzeugst Du 60 Kugeln pro Sekunde, die nirgendwo mehr gelöscht werden und schreibst Deinen RAM damit voll. Vielleicht kommt ein moderner Computer damit zurande (besonders wenn Du das Programm bald abbrichst), aber ein etwas älteres Exemplar ist damit - wie Du ja selbst schreibst - überfordert.

Richtig wäre daher mit "gluNewQuadric" AM ENDE der Methode "FormCreate" eine Kugel zu erzeugen und sie mit "gluSphere" in der Methode "Render" zu zeichnen. Guter Programmierstil wäre es, die Kugel mit "gluDeleteQuadric" AM ANFANG der Methode "FormDestroy" zu löschen.

Übrigens: Das Backface-Culling muss man auch nicht immer aus- und einschalten, es genügt durchaus, es einmal am Anfang (im onCreate)zu setzen.

Viele Grüße
Traude

PS: wenn die CPU-Ausnutzung Deines Programms über 2% hinausgeht, ist immer noch etwas falsch.

PPS: Noch etwas fällt mir auf: Der Befehl "PushMatrix" sichert eventuell vorher gesetzte (Projektions-/Modell-)Matrizen. In diesem Programm ist die Klammer PushMatrix/PopMatrix überflüssig, denn es gibt gar keine vorher gesetzten Matrizen. Wenn Du das aber in ein größeres Programm einbauen möchtest, lies Dir bitte nochmal die Beschreibung dazu durch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:19 
Offline
DGL Member

Registriert: Do Sep 11, 2008 17:54
Beiträge: 41
Hab den Code geändert, das ganze sieht jetzt so aus:

Code:
  1.  
  2.  
  3. unit Unit1;
  4.  
  5. interface
  6.  
  7. uses
  8.  
  9.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10.   Dialogs, dglOpenGL, ExtCtrls;
  11.  
  12. type
  13.  
  14.   TForm1 = class(TForm)
  15.     Timer1: TTimer;
  16.  
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
  19.     procedure FormDestroy(Sender: TObject);
  20.     procedure Timer1Timer(Sender: TObject);
  21.  
  22.   private
  23.  
  24.     procedure Render();
  25.  
  26.     { Private-Deklarationen }
  27.  
  28.   public
  29.  
  30.     { Public-Deklarationen }
  31.  
  32.   end;
  33.  
  34. const
  35.  
  36.   NearClipping = 1;
  37.  
  38.   FarClipping = 1000;
  39.  
  40.   mat_specular   : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  41.   mat_shininess  : Array[0..0] of GlFloat = (50.0);
  42.   mat_ambient    : Array[0..3] of GlFloat = (0.4, 0.4, 0.4, 1.0);
  43.   mat_diffuse    : Array[0..3] of GlFloat = (0.4, 0.8, 0.4, 1.0);
  44.  
  45.   light_position : Array[0..3] of GlFloat = (10.0, 10.0, 0.0, 1.0);
  46.   light_ambient  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  47.   light_diffuse  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  48.  
  49. var
  50.  
  51.   Form1 : TForm1;
  52.  
  53.   DC : HDC;
  54.   RC : HDC;
  55.  
  56.   Kugel : PGLUQuadric;
  57.  
  58.   Rotation : Integer;
  59.  
  60. implementation
  61.  
  62. {$R *.dfm}
  63.  
  64. procedure TForm1.FormCreate(Sender: TObject);
  65. begin
  66.  
  67.  Rotation := 0;
  68.  
  69.  Cursor := -1;
  70.  
  71.  DC := GetDC(Handle);
  72.  
  73.    if (not InitOpenGL) then
  74.  
  75.        Application.Terminate;
  76.  
  77.  RC := CreateRenderingContext(DC,
  78.                               [opDoubleBuffered],
  79.                               17,
  80.                               32,
  81.                               0,0,0,
  82.                               0);
  83.  
  84.  ActivateRenderingContext(DC, RC);
  85.  
  86.  glClearColor(0.0, 0.0, 0.0, 0.0);
  87.  
  88.  glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  89.  glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  90.  glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  91.  glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  92.  
  93.  glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  94.  glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  95.  glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  96.  
  97.  glEnable(GL_LIGHTING);
  98.  glEnable(GL_LIGHT0);
  99.  
  100.  glEnable(GL_LINE_SMOOTH);
  101.  
  102.  glDisable(GL_Texture_2D);
  103.  
  104.  Kugel := gluNewQuadric();
  105.  
  106.  gluSphere(Kugel, 2, 700, 700);
  107.  
  108. end;
  109.  
  110. procedure TForm1.Render();
  111. begin
  112.  
  113.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  114.  
  115.  glMatrixMode(GL_PROJECTION);
  116.  glLoadIdentity;
  117.  gluPerspective(45, ClientWidth / ClientHeight, NearClipping, FarClipping);
  118.  
  119.  glMatrixMode(GL_MODELVIEW);
  120.  glLoadIdentity;
  121.  
  122.  glTranslatef(0, 0, -10);
  123.  glScalef(1, 1, 1);
  124.  glRotatef(Rotation ,0, 1, 0);
  125.  
  126.  glPushMatrix();
  127.    gluSphere(Kugel, 2, 700, 700);
  128.  glPopMatrix();
  129.  
  130.  SwapBuffers(DC);
  131.  
  132. end;
  133.  
  134. procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
  135. begin
  136.  
  137.  glViewport(0, 0, ClientWidth, ClientHeight);
  138.  glMatrixMode(GL_PROJECTION);
  139.  glLoadIdentity;
  140.  gluPerspective(3, ClientWidth / ClientHeight, NearClipping, FarClipping);
  141.  
  142.  glMatrixMode(GL_MODELVIEW);
  143.  glLoadIdentity;
  144.  
  145.  Render();
  146.  
  147. end;
  148.  
  149. procedure TForm1.FormDestroy(Sender: TObject);
  150. begin
  151.  
  152.  gluDeleteQuadric(Kugel);
  153.  
  154.  DeactivateRenderingContext;
  155.  DestroyRenderingContext(RC);
  156.  ReleaseDC(Handle, DC);
  157.  
  158. end;
  159.  
  160. procedure TForm1.Timer1Timer(Sender: TObject);
  161. begin
  162.  
  163.    if (Rotation < 180) then
  164.  
  165.        inc(Rotation)
  166.  
  167.    else
  168.  
  169.        Rotation := -180;
  170.  
  171.  Render();
  172.  
  173. end;
  174.  
  175. end.
  176.  
  177.  


Hab aber immer noch 100% CPU-Auslastung...


Zuletzt geändert von Cre@or am Di Sep 16, 2008 16:09, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Schraub mal Deinen Timer runter.

PS: gluSphere zeichnet die Kugel. Das ist im OnCreate fehl am Platz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Traude da kann ich leider nicht ganz zustimmen. ;) gluNewQuadric erzeugt ein Quadric object welches meines Wissens nach nur so ein paar Einstellungen kappselt. Mit diesem Quadric kann man dann eine Kugel zeichnen. Trotzdem stimmt es vollkommen, dass dieses Quadric auch immer wieder Freigegeben werden müssen oder nur ein mal erstellt und wieder freigegeben werden. Denn sonst läuft irgendwann der Speicher voll. Das sind zwar nur wenige KBs pro Aufruf aber die Anzahl der Aufrufe macht es. ;)

Die Zeile die Traude angegeben hat ist meiner Meinung nach der Auslöser. Allerdings aus einem anderen Grund. Du gibst bei gluSphere an, dass die Kugel aus 700 Slices und 700 Stacks bestehen soll. Das hat zur Folge, dass deine Kugel von Oben nach Unten in 700 Teile zerschnitten wird und dieser Teile jeweils noch einmal in 700 Einzelteile zerschnitten werden. Wenn ich mich nicht verrechnet habe, dann besteht deine Kugel auch 978.600 einzelnen Dreiecken die bei jedem Bild immer wieder und wieder berechnet werden müssen. Entweder benutzt du kleinere Werte (32x32 oder 64x64 sollten für runde kugeln durchaus reichen) oder aber du solltest die Kugel selber berechnen und dann die einzelnen Dreiecke mit so etwas wie einem VBO zeichnen. Dann werden die Daten auf der Grafikkarte abgelegt was dazu führt, dass die Werte nicht ständig neu berechnet werden müssen.

PS: Wenns sein muss würde auch eine Displayliste reichen um die Daten zu speichern. Die ist besonders in deinem Fall vermutlich doch etwas einfacher zu erstellen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Lossy, er spricht von einem "etwas älteren Computer". Da wäre doch möglich, dass VBO gar nicht zur Verfügung steht.

Ansonsten tschuldigung: ich arbeite normalerweise nicht mit gluSphere. Klar bei einem solchen Kugelobjekt ist das Zeichnen ziemlich umfangreich, daher korrigiere ich mich und sage: schraub mal Deine Kugelausmasse nach Lossys Angaben zurück.

Es ist sicher möglich, eine genügend "smoothe" Kugel zu zeichnen, ohne dass die CPU-Auslastung explodiert. Das Ziel sollte sein, dass das Rauf- oder Runterschrauben des Timers direkt proportional mit der CPU-Auslastung ist.


Zuletzt geändert von Traude am Mo Sep 15, 2008 09:47, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:41 
Offline
DGL Member

Registriert: Do Sep 11, 2008 17:54
Beiträge: 41
Ich hab den Interval des Timer's auf 1 Sec. gestellt.
Das hat bereits schon ganz schön was ausgemacht... der stand vorher auf 25 ms...
Ich hab die Kugel jetzt auf 64 x 64 getrimmt.
Das hat dann das ganze abgerundet auch wenn es jetzt ein bischen eckiger ist *lol...
Naja danke für die Hilfe, habt mir da noch mal ein paar Dinge klargemacht.

mfg Cre@or


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 09:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ah. Habe ich nicht gelesen, dass es auch für ältere System ist. Aber ja. Auf reichlich älteren Grafikkarten gibt es VBOs nicht in Hardware. Mittlerweile emulieren aber die Hersteller das im Treiber. Und dann würden in jedem Falle die Berechnungen der Punkte wegfallen. Zu was ich so oder so in jedem Falle nur raten kann. Egal ob neu oder alt oder ob die Kugel groß oder klein wäre. Das ist massiver nicht nötiger Rechenaufwand, den man immer vermeiden sollte.

Sollten VBOs nicht existieren könnte man auch VertexArrays benutzen. Sind relativ gleich und werden überall unterstützt. Wobei DisplayListen wie gesagt auch genügen. Dann muss sich der Treiber darum kümmern, dass die Daten dort lange wo es am Schnellsten ist.

PS: Besonders bei älteren System dürfte die Anzahl der Dreiecke schon zu groß werden. Selbst wenn man sie nicht ständig neu berechnen müsste wäre es allein von der Anzahl her schon ein richtiger haufen Arbeit für die Karte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 15, 2008 11:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Der Timer wartet wie lange und dein System ist was für eines ?
Ist der Timer zu niedrig eingestellt, dann ensteht ne menge cpulast, da er ziemlich oft durchläuft und die Szene entsprechend neu zeichnet.

Wenn ein normales 3D Computerspiel nicht bei 100% läuft würde ich mir sorgen machen, dann ist es nicht gut Entwickelt worden.
Das Spiel soll ja alle verfügbaren Ressourcen krallen und soviel wie möglich draus machen und wenn es 500FPS statt 100FPS bei der Physik und KI durchrattert. Das zeichnen kann man auf ein 100FPS Cap beschränken, da setzt das Auge eh schon weit vorher aus und 100Hz ist nur noch für die Monitortechnik wichtig(flimmern bei schlechten Monitoren verschwindet und man will doch auch Full-HD supporten, welches bei 1080P einen 100Hz Modi kann).
Bei Software, die 3D Visualisierung verwendet, ist es der Gegensatz, man will so selten wie möglich zeichnen, rechnen und Ressourcen verbrauchen.

Wenn deine CPU zu den älteren gehört, dann ist eine höhere Last normal und wenn deine Grafikkarte zu alt ist, dann kann deine Anwendung in Softwaremodus laufen und deine CPU ist wieder voll ausgelastet.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


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 ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 15 Queries | GZIP : On ]