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

Aktuelle Zeit: Fr Jul 18, 2025 04:34

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL friert ein...
BeitragVerfasst: Mi Feb 04, 2009 21:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mai 27, 2004 15:22
Beiträge: 25
Wohnort: Stuttgart
Hi Leute,

ich hab mich seit langem mal wieder mit OpenGL beschäftigt und musste feststellen das jedes Programm (mit OpenGL) sobald ich die Maus auf den Rendercontext bewege einfriert. Keine Animationen mehr, keine FPS - Aktualisierungen mehr - nix... Maus ausserhalb des Rendercontextes - läuft wieder wie geschmiert.

Alle Programm das heisst....

Alle Demos von Euch (auch die von dem 2D-Tutorial) und meine eigenen kleinen Test's.

Ausstattung:

Athlon 64 X2 5600+ Dual Core
2 GB RAM
WinXP Pro SP2
Geforce 8800 GT 256 MB RAM (aktueller Treiber drauf 181.22)
Delphi 7 prof.


Treiber davor (weiss nicht mehr welcher genau hat auch nicht funktioniert).

Was läuft da schief?

Bei meinem Demoprogramm wird nur ein Hintergrundbild angezeigt und die FPS per Font ausgegeben. Andere Demos frieren auch ein. Warum?! :roll:

Danke im voraus!

_________________
cya
Tom


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 04, 2009 23:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Versuch mal den Renderloop mit einem Timerevent zu steuern. Vielleicht ist dein Betriebssystem so fleißig, dass es nie onIdle ruft. Wäre zwar komisch, aber seltsame Begebenheiten rufen seltsame Erklärungen hervor. 8) ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 09:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Sozusagen alle OpenGL Anwenungen haben bei dir dieses Problem?

Ich hatte früher häufiger mal Probleme mit dem Mausschatten. Der muss von Windows nachträglich über alles gezeichnet werden. Allerdings sollte dein System mit so etwas ja eigentlich überhaupt keine Probleme haben dürfen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mai 27, 2004 15:22
Beiträge: 25
Wohnort: Stuttgart
Lossy eX hat geschrieben:
Sozusagen alle OpenGL Anwenungen haben bei dir dieses Problem?


Ja, aber ich habe gemerkt, die Anwendungen die über die api (also nicht über VCL und onidle gehen) funktionieren. Komisch oder?!

Ich bewege nur die blöde Maus über das Fenster und schon hängt es. Bei dem 2D Tuts an dem zwei beispielen mit dem Raumschiff (Rotation um eigene Achse und der FLug über eine Grasfläche mit Schatten) funz alles wenn ich die Maus nicht im Fenster hab - beweg ich sie hinein - pumpe... nix mehr animiert.

Hab auch schon versucht die Anwendung(en) über den Taskmanager nur einer CPU zuzuweisen aber hat nix gebracht.


Flash hat geschrieben:
Versuch mal den Renderloop mit einem Timerevent zu steuern. Vielleicht ist dein Betriebssystem so fleißig, dass es nie onIdle ruft. Wäre zwar komisch, aber seltsame Begebenheiten rufen seltsame Erklärungen hervor. Cool Wink


Hab ich jetzt mal auch versucht... Hab die Demo Nr. 2 (mit dem Feuer) des 2D Tuts umgeschrieben per Timer (10 ms).
Ergebnis: Maus Ausserhalb des RenderContextes funzt - Maus im RC funzt net. :-(


Keine Ahnung was da los is....??

PS: Aktuellste glBitmap / dglopengl ist wird benutzt (hat davor aber auch nicht mehr funktioniert mit den alten im dglsdk)

_________________
cya
Tom


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 16:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kann es sein, dass deine Maussensitivität zu hoch eingestellt ist? Wenn deine Maus das Formular mit Mousevents bombardiert, könnte es so zu problemen kommen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mai 27, 2004 15:22
Beiträge: 25
Wohnort: Stuttgart
Flash hat geschrieben:
Kann es sein, dass deine Maussensitivität zu hoch eingestellt ist? Wenn deine Maus das Formular mit Mousevents bombardiert, könnte es so zu problemen kommen.


Nein daran liegt es auch nicht, hab gerade rumgespielt an den Einstellungen (Hab ne Logitech Funkmaus /-Tastatur) in SetPoint.
Beschleunigung auf Aus und Sensibilität auf Niedrig. Nix. Geht immer noch nicht. Selbst über nen Timer müsste dies doch egal sein (JvTimer über Thread) geht auch net.

_________________
cya
Tom


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 17:43 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Interessant wäre was Windows so für Nachrichten rumschleudert, wenn deine Maus dein Formular betritt.
Für mich siehts auf alle Fälle nach einem Konfigurationsproblem aus.

DX Anwendungen gehen?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 17:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hast du den DualCore Optimizer von AMD installiert? Für XP braucht man den wenn man einen X2 benutzt. Ohne den hatte ich früher (habe inzwischen Vista x64 am Laufen) auch Timingprobleme wenn ich z.B. OnIdle genutzt hab. An sich sollte ohne den keine Anwendung komplett einfrieren, aber unter XP sollte der auf jeden Fall installiert sein.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 22:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mai 27, 2004 15:22
Beiträge: 25
Wohnort: Stuttgart
Flash hat geschrieben:
Interessant wäre was Windows so für Nachrichten rumschleudert, wenn deine Maus dein Formular betritt.
Für mich siehts auf alle Fälle nach einem Konfigurationsproblem aus.

DX Anwendungen gehen?


Wie kann man denn rausfinden ob Windows Anwendungen mit messages bomardiert?
DX Progs funzen ohne Probleme. OpenGL auch aber nur mit API - bei VCL kackts ab.


Sascha Willems hat geschrieben:
Hast du den DualCore Optimizer von AMD installiert? Für XP braucht man den wenn man einen X2 benutzt. Ohne den hatte ich früher (habe inzwischen Vista x64 am Laufen) auch Timingprobleme wenn ich z.B. OnIdle genutzt hab. An sich sollte ohne den keine Anwendung komplett einfrieren, aber unter XP sollte der auf jeden Fall installiert sein.


Ja hab ich jetzt. Keine Veränderung - gleiches Problem.

Hab jetzt mal weiter getestet...

Bitte schaut Euch mal wenns keine Umstände macht zwei Codes an (komplette Codes von 2 Beispielen mit VCL Code was funktioniert und eines was nicht funktioniert).


1. Codebeispiel. Selcetiontut VCL funktioniert. mit TAppEvent

Code:
  1. //==============================================================================
  2. // Selection tutorial
  3. // 2002-2004 by Sascha Willems
  4. //==============================================================================
  5. // Updated 19.01.2004 :
  6. //  - Renamed TForm1 to TGLForm
  7. //  - Replaced OpenGL12.pas with dglOpenGL.pas (GL1.5)
  8. //  - DC and RC now released on destroy
  9. //==============================================================================
  10. unit selection1;
  11.  
  12. interface
  13.  
  14. uses
  15.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  16.   Dialogs, dglOpenGL, AppEvnts, GLBmp, ExtCtrls, StdCtrls;
  17.  
  18. type
  19.   TGLForm = class(TForm)
  20.     ApplicationEvents1: TApplicationEvents;
  21.     Timer1: TTimer;
  22.     Panel1: TPanel;
  23.     Timer2: TTimer;
  24.     Label1: TLabel;
  25.     Label2: TLabel;
  26.     Label3: TLabel;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  29.     procedure Timer1Timer(Sender: TObject);
  30.     procedure FormResize(Sender: TObject);
  31.     procedure Timer2Timer(Sender: TObject);
  32.     procedure FormClick(Sender: TObject);
  33.     procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  34.       Y: Integer);
  35.     procedure FormDestroy(Sender: TObject);
  36.   private
  37.   public
  38.     FDC    : HDC;
  39.     FRC    : HGLRC;
  40.     List   : Cardinal;
  41.     yrot   : TGLFloat;
  42.     Frames : Integer;
  43.     mx,my  : Word;
  44.     function GetSelectBufferHit : Integer;
  45.     procedure GLInit;
  46.     procedure LoadTextures;
  47.     procedure DrawScene;
  48.   end;
  49.  
  50. var
  51.   Texture     : array[0..4] of TGLBmp;
  52.   GLForm      : TGLForm;
  53.   DisplayList : array[0..3] of Cardinal;
  54.   Rotation    : array[0..3] of TGLFloat;
  55.   SelfRot     : array[0..3] of TGLFloat;
  56.  
  57. const
  58.  // These are names for our planets to use for selection
  59.  Sun   = 0;
  60.  Mars  = 1;
  61.  Earth = 2;
  62.  Moon  = 3;
  63.  
  64. implementation
  65.  
  66. {$R *.dfm}
  67.  
  68. // =============================================================================
  69. // Generates a Sphere and returns the number of the displaylist
  70. // =============================================================================
  71. function CreateSphere(CX, CY, CZ, Radius : TGLFloat; N : Integer) : Cardinal;
  72. var
  73.  i,j                  : Integer;
  74.  theta1,theta2,theta3 : TGLFloat;
  75.  X, Y, Z, px, py, pz  : TGLFloat;
  76. begin
  77. Result := glGenLists(1);
  78. glNewList(Result, GL_COMPILE);
  79. if Radius < 0 then
  80.  Radius :=-Radius;
  81. if n < 0 then
  82.  n := -n;
  83. if (n < 4) or (Radius <= 0) then
  84.  begin
  85.  glBegin(GL_POINTS);
  86.   glVertex3f(CX, CY, CZ);
  87.  glEnd;
  88.  exit;
  89.  end;
  90. for j := 0 to n div 2 -1 do
  91.  begin
  92.  theta1 := J*2*PI/N - PI/2;
  93.  theta2 := (J+1)*2*PI/n - PI/2;
  94.  glBegin(GL_QUAD_STRIP);
  95.  for i := 0 to n do
  96.   begin
  97.   theta3 := i*2*PI/N;
  98.   x := cos(theta2) * cos(theta3);
  99.   y := sin(theta2);
  100.   z := cos(theta2) * sin(theta3);
  101.   px := CX + Radius*x;
  102.   py := CY + Radius*y;
  103.   pz := CZ + Radius*z;
  104.   glNormal3f(X,Y,Z);
  105.   glTexCoord2f(1-I/n, 2*(J+1)/n);
  106.   glVertex3f(px,py,pz);
  107.   X := cos(theta1) * cos(theta3);
  108.   Y := sin(theta1);
  109.   Z := cos(theta1) * sin(theta3);
  110.   px := CX + Radius*X;
  111.   py := CY + Radius*Y;
  112.   pz := CZ + Radius*Z;
  113.   glNormal3f(X,Y,Z);
  114.   glTexCoord2f(1-i/n, 2*j/n);
  115.   glVertex3f(px,py,pz);
  116.   end;
  117.  glEnd;
  118.  end;
  119. glEndList;
  120. end;
  121.  
  122. procedure TGLForm.FormCreate(Sender: TObject);
  123. begin
  124. InitOpenGL;
  125. // Get a handle from our Window
  126. FDC := GetDC(Handle);
  127. // Generate our rendering context with a color depth of 32Bpp
  128. FRC := CreateRenderingContext(FDC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  129. ActivateRenderingContext(FDC, FRC);
  130. Frames := 0;
  131. GLInit;
  132. LoadTextures;
  133. end;
  134.  
  135. // =============================================================================
  136. // Sets up all needed OpenGL properties
  137. // =============================================================================
  138. procedure TGLForm.GLInit;
  139. var
  140.  nStackDepth : TGLUInt;
  141. begin
  142. glEnable(GL_TEXTURE_2D);
  143. glEnable(GL_DEPTH_TEST);
  144. glEnable(GL_LIGHTING);
  145. glEnable(GL_COLOR_MATERIAL);
  146. glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
  147. DisplayList[0] := CreateSphere(0,0,0,48,100); // Sun
  148. DisplayList[1] := CreateSphere(0,0,0,16,100); // Mars
  149. DisplayList[2] := CreateSphere(0,0,0,20,100); // Earth
  150. DisplayList[3] := CreateSphere(0,0,0,8,75);   // Moon
  151. glGetIntegerV(GL_MAX_NAME_STACK_DEPTH, @nStackDepth);
  152. Label3.Caption := 'Depth of Name Stack : '+IntToStr(nStackDepth);
  153. end;
  154.  
  155. // =============================================================================
  156. // Loads all needed textures
  157. // =============================================================================
  158. procedure TGLForm.LoadTextures;
  159. const
  160.  Name : array[0..4] of String = ('sun','mars','earth','moon','space');
  161. var
  162.  i : Integer;
  163. begin
  164. for i := 0 to High(Name) do
  165.  begin
  166.  Texture[i] := TGLBmp.Create;
  167.  Texture[i].LoadImage(Name[i]+'.jpg');
  168.  Texture[i].GenTexture(False,False);
  169.  end;
  170. end;
  171.  
  172. // =============================================================================
  173. // Draws the Scene
  174. // =============================================================================
  175. procedure TGLForm.DrawScene;
  176. const
  177.  Position   : array[0..3] of TGLFLoat = (0, 0, 0, 0);
  178.  Ambient    : array[0..3] of TGLFloat = (0.3, 0.3, 0.3, 0);
  179.  Diffuse    : array[0..3] of TGLFloat = (0.8, 0.8, 0.8, 0);
  180.  Specular   : array[0..3] of TGLFloat = (0.8, 0.8, 0.8, 0);
  181.  mSpecular  : array[0..3] of TGLFloat = (1.0, 1.0, 1.0, 1.0);
  182.  mShininess : TGLFloat = 10.0;
  183. begin
  184. glMatrixMode(GL_MODELVIEW);
  185. glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  186. glLoadIdentity;
  187. glMaterialfv(GL_FRONT, GL_SPECULAR, @mSpecular);
  188. glMaterialfv(GL_FRONT, GL_SHININESS, @mShininess);
  189. // Enable one Light and set it's properties
  190. glEnable(GL_LIGHTING);
  191. glEnable(GL_LIGHT0);
  192. glLightfv(GL_LIGHT0, GL_POSITION, @Position);
  193. glLightfv(GL_LIGHT0, GL_AMBIENT, @Ambient);
  194. glLightfv(GL_LIGHT0, GL_DIFFUSE, @Diffuse);
  195. glLightfv(GL_LIGHT0, GL_SPECULAR, @specular);
  196. glTranslatef(0,0,-500);
  197. glInitNames;
  198. glPushName(0);
  199. // Sun
  200. glLoadName(Sun);       // Push the ID of the sun on the namestack
  201. Texture[0].Bind;
  202. glPushMatrix;
  203. glRotatef(SelfRot[0], 0, 1, 0);
  204. glCallList(DisplayList[0]);
  205. glPopMatrix;
  206. // Mars
  207. glLoadName(Mars);       // Push the ID of the mars on the namestack
  208. Texture[1].Bind;
  209. glPushMatrix;
  210. glRotatef(Rotation[1], 0, 1, 0);
  211. glTranslatef(0,0,100);
  212. glRotatef(SelfRot[1], 0, 1, 0);
  213. glCallList(DisplayList[1]);
  214. glPopMatrix;
  215. // Earth
  216. glLoadName(Earth);       // Push the ID of the earth on the namestack
  217. Texture[2].Bind;
  218. glPushMatrix;
  219. glRotatef(Rotation[2], 0, 1, 0);
  220. glTranslatef(0,0,200);
  221. glRotatef(SelfRot[2], 0, 1, 0);
  222. glCallList(DisplayList[2]);
  223. // Moon
  224. glLoadName(Moon);       // Push the ID of the moon on the namestack
  225. Texture[3].Bind;
  226. glRotatef(Rotation[3], 0, 1, 0);
  227. glTranslatef(0,0,35);
  228. glCallList(DisplayList[3]);
  229. glPopMatrix;
  230. // Background
  231. // Note that you need to load another name on the stack.Otherwise
  232. // the background would have the same name attached to as the moon!
  233. glLoadName(1000);
  234. Texture[4].Bind;
  235. glBegin(GL_QUADS);
  236.  glTexCoord2f(0, 0); glVertex3f(-470,  -350, -300);
  237.  glTexCoord2f(0, 2); glVertex3f(-470,   350, -300);
  238.  glTexCoord2f(2, 2); glVertex3f( 470,   350, -300);
  239.  glTexCoord2f(2, 0); glVertex3f( 470,  -350, -300);
  240. glEnd;
  241. SwapBuffers(FDC);
  242. end;
  243.  
  244. procedure TGLForm.ApplicationEvents1Idle(Sender: TObject;
  245.   var Done: Boolean);
  246. begin
  247. DrawScene;
  248. Done := False;
  249. inc(Frames);
  250. end;
  251.  
  252. procedure TGLForm.Timer1Timer(Sender: TObject);
  253. var
  254.  i : Integer;
  255. begin
  256. SelfRot[0]  := SelfRot[0]+0.1;  // Sun
  257. SelfRot[1]  := SelfRot[1]+1;    // Mars
  258. SelfRot[2]  := SelfRot[2]+1;    // Earth
  259. SelfRot[3]  := SelfRot[3]+1;    // Moon
  260. for i := 0 to High(SelfRot) do
  261.  if SelfRot[i] > 360 then
  262.   SelfRot[i] := 0;
  263. Rotation[3] := Rotation[3]-2.5; // Moon
  264. Rotation[2] := Rotation[2]+0.5; // Earth
  265. Rotation[1] := Rotation[1]+0.3; // Mars
  266. for i := 0 to High(Rotation) do
  267.  begin
  268.  if Rotation[i] > 360 then
  269.   Rotation[i] := 0;
  270.  if Rotation[i] < 0 then
  271.   Rotation[i] := 360;
  272.  end;
  273. end;
  274.  
  275. procedure TGLForm.FormResize(Sender: TObject);
  276. begin
  277. if HandleAllocated then
  278.  begin
  279.  glViewport(0, 0, ClientWidth, ClientHeight);
  280.  glMatrixMode(GL_PROJECTION);
  281.  glLoadIdentity;
  282.  gluPerspective(45, ClientWidth/ClientHeight, 0.1, 1000);
  283.  end;
  284. end;
  285.  
  286. procedure TGLForm.Timer2Timer(Sender: TObject);
  287. begin
  288. Caption := 'www.DelphiGL.de -Tutorial no.3 - Selection - '+IntToStr(Frames)+' FPS';
  289. Frames := 0;
  290. end;
  291.  
  292. function TGLForm.GetSelectBufferHit : Integer;
  293. var
  294.  SelectBuffer : array[0..512] of TGLUInt;
  295.  Viewport     : TGLArrayi4;
  296.  Hits,i       : Integer;
  297.  HitZValue    : TGLUInt;
  298.  Hit          : TGLUInt;
  299. begin
  300. // Store our Viewport
  301. glGetIntegerv(GL_VIEWPORT, @viewport);
  302. // Tell OpenGL the size of our select buffer
  303. glSelectBuffer(512, @SelectBuffer);
  304. // Change our render mode to GL_SELECT
  305. glRenderMode(GL_SELECT);
  306. // Init the namestack
  307. glInitNames;
  308. glPushName(0);
  309. glMatrixMode(GL_PROJECTION);
  310. glPushMatrix;
  311. glLoadIdentity;
  312. // Zoom the view to one pixel around the mouse position
  313. gluPickMatrix(mx, viewport[3]-my, 1.0, 1.0, viewport);
  314. gluPerspective(45.0, ClientWidth/ClientHeight, 0.1, 1000);
  315. // Now we draw our scene in the select render mode
  316. DrawScene;
  317. glMatrixMode(GL_PROJECTION);
  318. glPopMatrix;
  319. // Now store the number of hits in Hits
  320. Hits := glRenderMode(GL_RENDER);
  321. // Now we look which hit has the lowest Z-Value i.e. was in front
  322. Hit       := High(TGLUInt);
  323. HitZValue := High(TGLUInt);
  324. for i := 0 to Hits-1 do
  325.  if SelectBuffer[(i*4)+1] < HitZValue then
  326.   begin
  327.   Hit       := SelectBuffer[(i*4)+3];
  328.   HitZValue := SelectBuffer[(i*4)+1];
  329.   end;
  330. Result := Hit;
  331. end;
  332.  
  333. procedure TGLForm.FormClick(Sender: TObject);
  334. var
  335.  Hit : Integer;
  336. begin
  337. Hit := GetSelectBufferHit;
  338. case Hit of
  339.  0 : Label2.Caption := 'sun';
  340.  1 : Label2.Caption := 'mars';
  341.  2 : Label2.Caption := 'earth';
  342.  3 : Label2.Caption := 'moon';
  343. else
  344.  Label2.Caption := 'none';
  345. end;
  346. end;
  347.  
  348. procedure TGLForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  349.   Y: Integer);
  350. begin
  351. mx := x;
  352. my := y;
  353. end;
  354.  
  355. procedure TGLForm.FormDestroy(Sender: TObject);
  356. begin
  357. DeactivateRenderingContext;
  358. wglDeleteContext(FRC);
  359. ReleaseDC(Handle, FDC);
  360. end;
  361.  
  362. end.
  363.  


2. Codebeispiel 2D Tutorial Nr. 2 mit der Feueranimation welches nicht funktioniert - also einfriert. Hab mal es abgeändert mit TAppEvent. Ohne Erfolg - friert auch ein. Also was ist der Unterschied bei den beiden was so gravierend ist?

Code:
  1. unit opengl2D_demo2_MainForm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs,
  8.  
  9.   dglOpenGL,
  10.   Textures;
  11.  
  12. type
  13.   TGLForm = class(TForm)
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     private
  17.      { Private-Deklarationen }
  18.     public
  19.      procedure Render(Sender : TObject; var Done : Boolean);
  20.    end;
  21.  
  22.   TVertex = record
  23.     x,y,z : Single;
  24.    end;
  25.  
  26. const
  27.  // Hier definieren wie die virtuellen Ausmaße unserer 2D-Ansicht
  28.  // Dadurch das diese Werte fest sind, müssen wir nicht bei abweichender
  29.  // Auflösung die Koordinaten umrechnen.
  30.  SizeX   : Integer = 640;
  31.  SizeY   : Integer = 480;
  32.  // Hier legen wir fest wie unsere Animationstextur aussieht. Wenn man Texturen
  33.  // dynamisch lädt sollte man deren Aufbau irgendwo aus einer Textdatei laden
  34.  AnimCols : Integer = 4;
  35.  AnimRows : Integer = 4;
  36.  
  37.  MaxSize : Integer =   3;
  38.  
  39. var
  40.  GLForm     : TGLForm;
  41.  DC         : HDC;
  42.  RC         : HGLRC;
  43.  QPCFreq    : Int64;
  44.  TimeFactor : Single;
  45.  
  46.  AnimTex    : glUInt;
  47.  AnimX      : Single;
  48.  AnimY      : Single;
  49.  AnimPos    : Single;
  50.  
  51. implementation
  52.  
  53. {$R *.dfm}
  54.  
  55. // =============================================================================
  56. //   TGLForm
  57. // =============================================================================
  58.  
  59. // =============================================================================
  60. //   TGLForm.FormCreate
  61. // =============================================================================
  62. procedure TGLForm.FormCreate(Sender: TObject);
  63. begin
  64. // Zeitmessung
  65. QueryPerformanceFrequency(QPCFreq);
  66.  
  67. InitOpenGL;
  68. DC := GetDC(Handle);
  69. RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  70. ActivateRenderingContext(DC, RC);
  71. // Auch in 2D werden wir den Z-Puffer (und Tiefentest) nutzen, denn damit sparen
  72. // wir uns das eigenhändige Sortieren von Objekten anhand ihres Layers
  73. glEnable(GL_DEPTH_TEST);
  74. glDepthFunc(GL_LESS);
  75. glEnable(GL_TEXTURE_2D);
  76. Application.OnIdle := Render;
  77. // Die Explosionstextur laden auf der sich alle Animationsframes befinden
  78. LoadTexture('textures\explosion.tga', AnimTex, False);
  79. end;
  80.  
  81. // =============================================================================
  82. //   TGLForm.FormDestroy
  83. // =============================================================================
  84. procedure TGLForm.FormDestroy(Sender: TObject);
  85. begin
  86. DeactivateRenderingContext;
  87. DestroyRenderingContext(RC);
  88. ReleaseDC(Handle, DC);
  89. end;
  90.  
  91. // =============================================================================
  92. //   TGLForm.Render
  93. // =============================================================================
  94. procedure TGLForm.Render(Sender : TObject; var Done : Boolean);
  95. var
  96.  QPCStart, QPCEnd : Int64;
  97. begin
  98. // Zeitmessung
  99. QueryPerformanceCounter(QPCStart);
  100.  
  101. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  102.  
  103. glMatrixMode(GL_PROJECTION);
  104. glLoadIdentity;
  105. glViewport(0,0,ClientWidth,ClientHeight);
  106. glOrtho(0, SizeX, 0, SizeY, 0, 128);
  107.  
  108. glMatrixMode(GL_MODELVIEW);
  109. glLoadIdentity;
  110.  
  111. glBindTexture(GL_TEXTURE_2D, AnimTex);
  112. glEnable(GL_ALPHA_TEST);
  113. glAlphaFunc(GL_GREATER, 0.1);
  114. glTranslatef(320, 240, 0);
  115.  
  116. // Das Quad zeichnen wir jetzt von Hand, da wir ja je nach aktuellem Animationsframe
  117. // die Texturkoordinaten ändern müssen
  118. glEnable(GL_CULL_FACE);
  119. glBegin(GL_QUADS);
  120.  glTexCoord2f(AnimX,            1-AnimY-1/AnimRows);  glVertex3f(-192, -192, 0);
  121.  glTexCoord2f(AnimX+1/AnimCols, 1-AnimY-1/AnimRows);  glVertex3f( 192, -192, 0);
  122.  glTexCoord2f(AnimX+1/AnimCols, 1-AnimY);             glVertex3f( 192, 192, 0);
  123.  glTexCoord2f(AnimX,            1-AnimY);             glVertex3f(-192, 192, 0);
  124. glEnd;
  125.  
  126. SwapBuffers(DC);
  127. // Zeitmessung
  128. QueryPerformanceCounter(QPCEnd);
  129. TimeFactor := (QPCEnd-QPCStart) / QPCFreq;
  130.  
  131. // Animation weiterlaufen lassen
  132. AnimPos := AnimPos + 10 * TimeFactor;
  133. if AnimPos > 1 then
  134.  begin
  135.  AnimX   := AnimX + 1/AnimRows;
  136.  AnimPos := 0;
  137.  end;
  138. if AnimX >= 1 then
  139.  begin
  140.  AnimY := AnimY + 1/AnimCols;
  141.  AnimX := 0;
  142.  end;
  143. if AnimY >= 1 then
  144.  begin
  145.  AnimX := 0;
  146.  AnimY := 0;
  147.  end;
  148.  
  149. Done := False;
  150. end;
  151.  
  152. end.

_________________
cya
Tom


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mai 27, 2004 15:22
Beiträge: 25
Wohnort: Stuttgart
@Sascha:

War bei Dir auf der Seite und hab paar Demos von Dir zum ausprobieren gezogen.

glslwater - friert ein bei Maus über dem Fenster
SimpleBump_V2 - funktioniert
MotionBlur - funktioniert


hoffe das Hilft was.

Danke im voraus!

_________________
cya
Tom


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 05, 2009 22:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich tippe auf ein Problem mit deinem System. Insgesamt wurde meine Spiele, Anwendungen und Demos sicherlich mehrere Hundertausend Male runtergeladen (und waren auch auf Heft-CDs), und bisher hat noch niemand ein solches Problem moniert. Wenn, dann waren dass i.d.R. Probleme mit deren Grafikkartentreibern die durch neue Treiber behoben wurden.

Also würde ich mal dein System genau überprüfen und aktuelle Treiber installieren. Ausserdem auch mal solche Sachen wie Cool'n'Quiet ausschalten, alle unnützen Hintergrundprozesse sowie Energiesparmaßnahmen. Wenn das nichts hilft, lad dir mal eine Linux-Live-Distro (läuft direkt von CD/DVD) und schau ob du da das selbe Problem hast.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 14 Queries | GZIP : On ]