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

Aktuelle Zeit: Fr Jul 18, 2025 08:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Nov 06, 2008 18:41 
Offline
DGL Member

Registriert: Do Jan 25, 2007 19:12
Beiträge: 17
Hallo

ich möchte gerne eine Textur, genau genommen dass Ergebnis eines Renderpass, byteweise auslesen.

Dass tue ich, indem ich zuerst eine renderpasstexture wie im entsprechendem Tutorial gezeigt (CreateScreenTexture) als Speicher herstelle (einmal in der Einrichtungsphase).
Dann folgt die erstellung der Szene und dieser Code.

Code:
  1.  
  2. glBindTexture(GL_TEXTURE_2D, renderpasstexture);
  3.   glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
  4.  
  5.   GetMem(screendata, SCREEN_WIDTH*SCREEN_HEIGHT*3*sizeof(byte)); //für jeden pixel 3byte (rgb)
  6.  
  7.  
  8.  
  9.   glGetTexImage(GL_Texture_2D,0,GL_RGB,GL_BYTE,screendata); //Das Bild aus dem Buffer in den Arbeitsspeicher
  10.  
  11.  
  12.  
  13. for counter := 0 to (SCREEN_WIDTH*SCREEN_HEIGHT) do begin
  14.  writeln (inttostr (getcolorvalue(byte((@screendata+counter*3)^),byte((@screendata+counter*3+1)^),byte((@screendata+counter*3+2)^))));  //hier tritt eine Accessviolation auf
  15. end;
  16. FreeMem(screendata); //Speicher wieder freigeben


Ich bin jetzt um ehrlich zu sein etwas ratlos, da ich mich sooft noch nicht mit den Pointern beschäftigt habe, jedoch habe ich den Eindruck, dass dem Speicherbereich nichts zugewiesen wird, da ein loggen der an getcolorvalue übergebenen Werte Textanteile enthielt die auf Speicher hindeuten der vormals durch KDE verwendet und dann nicht überschrieben wurde. Zudem entsteht an der makierten Stelle eine AccessViolation bei unterschiedlichen counter-Werten.

ich würde mich über schnelle Hilfe freuen
The Fettel Error

_________________
*sudo*
may the force
be with
you!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 06, 2008 19:43 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Gib mal die Definition von screendata.
Denn glGetTexImage erwartet einen Pointer auf einen Speicherbereich.
Später aber holst du mit @screendata einen Pointer auf den Pointer.

Deshalb bitte die var-Liste, damit wir dann genau sagen können wo @ hin muss und wo nicht.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 06, 2008 20:08 
Offline
DGL Member

Registriert: Do Jan 25, 2007 19:12
Beiträge: 17
Variablen:

lokal

Code:
  1. screendata: PByteArray;


global

Code:
  1. renderpasstexture: GLuint;




okay ich denke das waren alle die da verwendet werden...

_________________
*sudo*
may the force
be with
you!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 06, 2008 20:14 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Code:
  1. writeln (inttostr (getcolorvalue(byte((@screendata+counter*3)^),byte((@screendata+counter*3+1)^),byte((@screendata+counter*3+2)^))));

Ist falsch. Denn du holst hier einen Pointer auf einen Pointer und erhöhst ihn. Du bewegst dich also nicht im Speicher des Bildes, sondern im Speicher der Pointer. Und diese zeigen auf irgendwelche Dateien.
Du solltest also das @ weglassen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 06, 2008 20:20 
Offline
DGL Member

Registriert: Do Jan 25, 2007 19:12
Beiträge: 17
Dann bekomme ich folgenden Fehler 3 mal:

Code:
  1. (245,35) Error: Illegal type conversion: "Array[0..32767] Of Byte" to "Byte"



entferne ich die byte umwandlung bleibt ein Fehler:

Code:
  1. (245,116) Error: Incompatible type for arg no. 3: Got "TByteArray", expected "Byte"



dazu nochmal der Funktionsheader:

Code:
  1. function getcolorvalue (r,g,b: byte): integer;



/edit:

Ich habs hinbekommen:

Code:
  1.  writeln (inttostr (getcolorvalue((screendata)^[counter*3],(screendata)^[counter*3+1],(screendata)^[counter*3+2])));




Vielen Dank an i0n0s für die Hilfe

_________________
*sudo*
may the force
be with
you!


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]