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.
GetMem(screendata, SCREEN_WIDTH*SCREEN_HEIGHT*3*sizeof(byte));//für jeden pixel 3byte (rgb)
glGetTexImage(GL_Texture_2D,0,GL_RGB,GL_BYTE,screendata);//Das Bild aus dem Buffer in den Arbeitsspeicher
for counter :=0to(SCREEN_WIDTH*SCREEN_HEIGHT)dobegin
writeln(inttostr(getcolorvalue(byte((@screendata+counter*3)^),byte((@screendata+counter*3+1)^),byte((@screendata+counter*3+2)^))));//hier tritt eine Accessviolation auf
end;
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!
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.
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.
Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 17 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.