Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Copy-befehl vom einem Speicherbereich in den anderen.
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 04.03.2010, 16:24    Titel: Copy-befehl vom einem Speicherbereich in den anderen. Antworten mit Zitat

Ich suche einen memcopy-befehl in Freebasic.

Gibt es so etwas, wenn nein, was ist eine sehr schnelle Routine dafür?

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tim.vogt



Anmeldungsdatum: 01.03.2009
Beiträge: 56

BeitragVerfasst am: 04.03.2010, 16:58    Titel: Antworten mit Zitat

Einfach:

Code:

#Include "crt.bi"



Dann kannst du memcpy benutzen.
_________________
"Nichts ist wahrhaftig und alles ist erlaubt."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 04.03.2010, 17:11    Titel: Antworten mit Zitat

Jup, danke.
Das Bild ist aber Seitenverkehrt damit im "Sprite":
MemCpy sprite + 32, FiDataPointer,spritemenge

Wenn ich vorher Freeimage FlipVertical( FiDataPointer) eingebe, ändert sich nichts.

In welcher Reihenfolge und wie muss ich die Daten umkopieren?

Gruss

Code:

#include "GL/gl.bi"
#include "GL/glu.bi"
#include "IrrlichtWrapper.bi"
#include "fbgfx.bi"
#INCLUDE "FreeImage393.bi"
#include  "crt.bi"
USING FB

Declare Sub mScreenshot ()

Dim Shared Sprite As  Any  Ptr
DIM MeshTexture as irr_texture
DIM TestNode as irr_node
DIM TestNode1 as irr_node
DIM OurCamera as irr_camera
Dim delta as single
DIM drehen as single
DIM drehe as single
Dim shared As Integer new_x, new_y,xres1, yres1,xres2, yres2,bits,spritemenge,zz

ScreenRes 300,300,32
SCREENCONTROL SET_WINDOW_POS, 10,200

IrrStart( IRR_EDT_OPENGL, 400, 400, IRR_BITS_PER_PIXEL_32, _
        IRR_WINDOWED, IRR_NO_SHADOWS, IRR_CAPTURE_EVENTS )

IrrSetWindowCaption( "ogl-sprite" )

MeshTexture = IrrGetTexture( "./media/testbild.bmp" )

TestNode = IrrAddTestSceneNode
IrrSetNodeMaterialTexture( TestNode, MeshTexture, 0 )
IrrSetNodeMaterialFlag( TestNode, IRR_EMF_LIGHTING, IRR_OFF )

TestNode1 = IrrAddTestSceneNode
IrrSetNodeMaterialTexture( TestNode1, MeshTexture, 0 )
IrrSetNodeMaterialFlag( TestNode1, IRR_EMF_LIGHTING, IRR_off )

OurCamera = IrrAddCamera( 0,0,-100, 0,0,0 )

IrrSetNodePosition( OurCamera, 10, 10, -35 )

IrrAddChildToParent( testnode1, testnode)
IrrSetNodePosition( testnode1, 0, 10, 0 )

xres1=100
yres1=100
xres2=200
yres2=200
spritemenge=xres2*yres2*4

bits=32

Sprite = ImageCreate(xres2,yres2)

While IrrRunning
    Sleep 1
   
    IrrBeginScene( 255,255,0 )
   
    If multikey( FB.SC_W ) Then 
        IrrDrawScene
        mScreenshot ()
        Put (50,50),sprite,pset
    End If
   
    getmouse new_x, new_y
    drehe = drehe+new_x/5000
    drehen = drehen+new_y/5000

   IrrSetNoderotation( TestNode, 0,0,drehe)
   IrrSetNoderotation( TestNode1, drehen, 0,0 )
   
   IrrDrawScene
   IrrEndScene
Wend

IrrStop

Sub mScreenshot ()
   Dim bitmap as FiBitmap ptr
   Dim FiDataPointer as any ptr

   bitmap = FreeImage_Allocate(xres2, yres2, bits)
   FiDataPointer = FreeImage_GetBits(bitmap)
   
   glReadPixels(xres1,yres1, xres2, yres2, GL_BGRA, GL_UNSIGNED_BYTE, FiDataPointer)

   MemCpy sprite + 32, FiDataPointer,spritemenge
   
   FreeImage_Unload(bitmap)
end Sub

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 04.03.2010, 18:21    Titel: Antworten mit Zitat

MemCpy sprite + 32, FiDataPointer,spritemenge !?
Was soll hier sprite + 32 sein? sprite ist ne Variable, in der du das Bild abspeicherst, memcpy arbeitet mit Pointern. Du übergibst also überschreibst also dein Sprite mit den Daten aus FiDataPointer, lässt aber was aus, warum?

btw.: Du füllst das Forum mit deinen Codes etwas aus, verwende doch lieber ein Pastesystem, zB. Pastebin oder das vom FreeBASIC-Portal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 04.03.2010, 18:38    Titel: Antworten mit Zitat

Code:

Dim Shared Sprite As  Any  Ptr


Sprite wurde ganz oben als ptr dimensioniert und 32 ist der Header.
Das Sprite ist links im kleinen Freebasic-Screen zu sehen, mit "put" reingesetzt, ist quasi ein kopierter Ausschnitt aus dem Irrlichtscreen(Opengl) rechts.

Ich wollte immer neben dem Opengl-Screen einen 2. haben von Freebasic zum Zeichnen und Auswerten.

Da Irrlicht mit Opengl arbeitet und sehr gute Befehle für die Darstellung hat, ist es töricht sich mit dem anderen Opengl etwas zusammen zu zimmern.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 04.03.2010, 18:53    Titel: Antworten mit Zitat

Das meinte ich ja, du überschreibst das Bild, den Header aber nicht. Naja egal...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 04.03.2010, 19:37    Titel: Antworten mit Zitat

Habe jetzt eine Lösung gefunden aus dem Portal.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 05.03.2010, 16:06    Titel: Antworten mit Zitat

funkeld hat Folgendes geschrieben:
Da Irrlicht mit Opengl arbeitet und sehr gute Befehle für die Darstellung hat, ist es töricht sich mit dem anderen Opengl etwas zusammen zu zimmern.

Habe ich was verpasst? Anderes OpenGL?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 05.03.2010, 18:42    Titel: Antworten mit Zitat

Zitat:

Anderes OpenGL?


jup, habe die Version von meinem Opengl erhöht bzw neue Treiber geladen, weil das neue Irrlicht 1.7.1 tolle neue Befehle hat die jetzt auch vom Irrlichtwrapper 0.7.1 alpha von Freebasic angesprochen werden.

Wenn ich Demos vom neuen Irrlicht getestet hatte, wurde gemeckert , das meine Version Opengl diesen oder jenen Befehl umgangen hat.


Wer zu spät kommt , dem bestraft das Leben.
Sie mal zu, das du dein Projekt hier zu Ende bringst.
happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 05.03.2010, 23:13    Titel: Antworten mit Zitat

Ähm ja sicherlich....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.03.2010, 23:17    Titel: Antworten mit Zitat

Dann meinst du aber nicht ein anderes OpenGL, sondern eine andere Version von OpenGL. zwinkern
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.03.2010, 13:50    Titel: Antworten mit Zitat

Dann haben wir auch keine 3.000.000 Hartz-IV Empfänger sondern 3.000.000 arbeitssuchende, die aber vor 11.00 Uhr vormittags nicht aufstehen wollen, eine andere generation Menschen. happy

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.03.2010, 13:58    Titel: Antworten mit Zitat

Nein, denn es gibt nur ein OpenGL und das ist standardisiert. Der Standard wird halt gelegentlich erweitert, aber trotzdem ist es immer noch "das" OpenGL. Ich weiß jetzt nicht, bis zu welcher Version die FreeBASIC-Header reichen, es kann durchaus sein, dass da die neuesten Befehle noch nicht dabei sind - aber die neuen Header kann man sich ja auch automatisiert übersetzen lassen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.03.2010, 14:19    Titel: Antworten mit Zitat

Für diese Routine möchte ich ein Ersatz, damit ich das Freeimage nicht immer mitschleppen muss:

FreeImage_FlipVertical(bitmap)

Brauche mal einen Vorschlag. geht irgendwie wieder mit Pointer?

Ansonsten funktioniert die Bildcopy in einem Speicherbereich mit Createimage(Sprite) wunderbar. Nur das Bild muss geflippt werden.

Gruss


Gruss

Code:

Sub mScreenshot ()
   glReadPixels(xres1,yres1, xres2, yres2, GL_BGRA, GL_UNSIGNED_BYTE, FiDataPointer)
   FreeImage_FlipVertical(bitmap)
   MemCpy sprite +32, FiDataPointer,xres2*yres2*4   
End Sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 06.03.2010, 14:24    Titel: Antworten mit Zitat

Wenn du das Bild nur spiegeln willst, dann mach es doch einfach, ein Code dafür ist nicht schwer zu erstellen.

Falls du Denkanstöße brauchst, schau im Projektforum den Code von Kirby an, da werden die Bilddateien auch gespiegelt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 06.03.2010, 14:41    Titel: Antworten mit Zitat

aus der "mir ist stink langweilig schnellcode zimerei"

Code:
#IfNDef MemCopy
Declare sub MemCopy cdecl alias "memcpy" (dest As Any Ptr, src As Any Ptr, length As ushort)
#EndIf

Sub ImageFlipVertical (Byref Image as any ptr)
    Dim ImageWidth  as UInteger=Peek(UInteger,Image+8)
    Dim ImageHeight as UInteger=Peek(UInteger,Image+12)
    Dim ImagePitch  as UInteger=Peek(UInteger,Image+16)

    Dim FlipImage   as any ptr=ImageCreate(ImageWidth,ImageHeight)
   
    ImageHeight-=1
   
    For Y as UInteger=0 to ImageHeight
        MemCopy (FlipImage+32+(Y*ImagePitch),Image+32+((ImageHeight-Y)*ImagePitch),ImagePitch-1)
    Next Y
   
    Deallocate Image
    Image=FlipImage
End Sub

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 06.03.2010, 14:48    Titel: Antworten mit Zitat

Hey Eternal_pain, nett dich mal wieder zu lesen lächeln

Aber:
Man sollte dem Benutzer funkeld nicht immer fertigen Code vorsetzten. Denn so lernt er nie eigenständig zu arbeiten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.03.2010, 15:00    Titel: Antworten mit Zitat

Zitat:

Man sollte dem Benutzer funkeld nicht immer fertigen Code vorsetzten. Denn so lernt er nie eigenständig zu arbeiten.


Ich war mal Beamter, jetzt Pensionär, jetzt werden eure Steuergelder verprasst.
Beamte arbeiten nicht, sie dienen.... lächeln

Gruss an den Schmuddelarbeiter 28398


Zuletzt bearbeitet von funkeld am 06.03.2010, 15:01, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.03.2010, 15:00    Titel: Antworten mit Zitat

Eternal_pain, danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.03.2010, 15:04    Titel: Antworten mit Zitat

Zitat:

Projektforum den Code von Kirby


Finde es nicht...dieses Proktforum für Freebasic.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz