SoftPixel Engine

Übersicht Sonstiges Smalltalk

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

 

ChristianK

BeitragDi, Mai 20, 2008 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst den exakten Namen der exportierten Funktion kennen. Alle DLL-Funktionen müssen für Blitz3D die _stdcall Aufrufkonvention verwenden, daher lautet der Funktionsname für "spCreateDevice" -> "_spCreateDevice@16".
Die Zahl hinter dem @ steht für die Anzahl der Bytes, die als Parameter übergeben werden.
So werden die Funktionen benannt, wenn du sie mit _declspec( dllexport ) exportierst. Wenn du einfach eine Moduldefinitionsdatei ( .def ) erstellst, werden die Funktionsnamen direkt ohne weitere Symbole exportiert.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

LukasBanana

BeitragDi, Mai 20, 2008 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich also auch einfach die *.def Datei verwenden. Muss ich die an den Anfang der *.decls schreiben?

Also anstatt { .lib "SoftPixelEngineWrapper.dll" } lieber das: { .lib "SoftPixelEngineWrapper.def" } ??
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana
 

ChristianK

BeitragDi, Mai 20, 2008 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, die DEF-Datei sagt dem Linker, welche Funktionen exportiert werden müssen. In den Linker-Einstellungen musst du den Namen der Datei angeben, die in etwa so aussieht:

Code: [AUSKLAPPEN]
EXPORTS

spCreateDevice
...

Die Funktionen müssen aber trotzdem alle _stdcall sein:

Code: [AUSKLAPPEN]
int _stdcall spCreateDevice( int blablubb )
{
    ...
}

In der DECLS-Datei gibst du dann die normalen Funktionsnamen an.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

LukasBanana

BeitragDi, Mai 20, 2008 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Komisch ... jetzt funktioniert es. Allerdings nur mit extern "C" __declspec(dllexport) Question Exclamation

Ich musst einfach noch mal das gesammte Projekt neu kompilieren. Das macht mir mit DevC++ in der Programmiersprache C/C++ hin-und wieder richtige Probleme. Man kann in C++ die einzelnen Dateien einzeln kompilieren aber dann noch mal alles zusammen 'klabustern'. Wenn man alles neu kompilieren muss dauert das sehr viel länger als in BB ider PB Laughing
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana
 

ChristianK

BeitragDi, Mai 20, 2008 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach ja, das extern "C" hab ich vergessen. Ohne das werden die Funktionsnamen vom C++ Compiler anders dargestellt ( dekoriert ).
Ich kann dir das Programm PEview empfehlen, damit kannst du nachsehen, welche Funktionen deine DLL exportiert und wie sie heissen -> http://www.magma.ca/~wjr/PEview.zip
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

LukasBanana

BeitragMi, Mai 21, 2008 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, danke. Das sieht recht praktisch aus Smile

Ich hab auch schon einen kleinen Forschritt gemacht mit meinem Wrapper.

Ich versuche einen 'C Pointer' in einen 'BB int' umzuwandeln. Und da ein Pointer immer 4 Byte groß ist müsst das auch eigentlich gehen. Allerdings schreibt er dann in einen BB int eine Negative Zahl und das kann nicht funktionieren (vielleicht macht das schon die C Funktion, naja egal).

Ich glaube es ist fast besser wenn ich diese Fragen im C/C++ Forum weiter frage ...
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana
 

Dreamora

BeitragMi, Mai 21, 2008 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
was du machen kannst statt sie umzuwandeln ist in einer table zu speichern und den index nach BB zu schicken. Wirst kaum 2.1 Mia pointer haben, sollte also weniger ein Problem sein und 4 Byte pro Pointer overhead ist eigentlich auch vertrettbar Smile
Entweder "brachial" (auffüllen, jeweils um 2er potenz vergrössern/verkleinern und beim einfügen einfach stupide die erste freie adresse suchen) oder zb via hashing.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragMi, Mai 21, 2008 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst da nichts umzuwandeln. Es geht ja nur um die Größe des Wertes und nicht um den Datentyp.
In C++ schreibst du sowas:

Code: [AUSKLAPPEN]
MyStruct* BlaBlubb( )
{
    MyStruct* s = new MyStruct;
    return s;
}

In der DECLS gibst du als Rückgabewert einfach Integer an:

Code: [AUSKLAPPEN]
.lib "BlubbLib.dll"
BlaBlubb%( )

Und ein Zeiger kann, als Integer dargestellt, durchaus negativ sein.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

BladeRunner

Moderator

BeitragMi, Mai 21, 2008 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dass BB da eine negative Zahl ausspuckt heisst nur dass das führende Bit des Pointers gesetzt ist, was BB als Vorzeichenbit interpretiert. Das ändert nichts an der Gültigkeit des Pointers.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

LukasBanana

BeitragMi, Mai 21, 2008 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hopla, ich dachte bisher dass das '%' in BB einen boolean Wert symbolisiert und nicht Interger. Aber okay, dass kann natürlich auch daran liegen
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana

Goodjee

BeitragMi, Mai 21, 2008 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
bb kennt keinen unterschied zwischen boolean und int, true ist quasi eine konstante, die den wert eins wiederspiegelt
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

LukasBanana

BeitragMi, Mai 21, 2008 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab in der *.decls Datei jetzt den Rückgabewert von '#' in '%' geändert und schon funktioniert die erste MINI-MINI Version des SoftPixel Engine Wrappers für BlitzBasic Mr. Green Mr. Green Mr. Green

Erst mal nur ein kleiner Würfel, aber ganz nett ^^

BlitzBasic erfährt anscheinend auch bald OpenGL Very Happy
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana

LukasBanana

BeitragMi, Mai 21, 2008 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Schaut euch mal die erste kleine Mini test Version vom Wrapper für BB an:

user posted image

Und das ist der gnaze Code dazu:

Code: [AUSKLAPPEN]
; SoftPixel Engine Wrapper Test 1 (20.5.2008)

Include "C:\Programme\Blitz3D\userlibs\SoftPixelEngineWrapper.bb"

Const Test = 2

; Main device
spCreateDevice(640, 480, 32, "SoftPixel Engine Wrapper for BlitzBasic", False, False, True)

; Scene manager, Animator, Control, Textureloader & StencilManager
driver   = spGetVideoDriver()
smngr   = spGetSceneManager()
anim8or   = spGetAnimator()
control   = spGetUserControl()
texload   = spGetTextureLoader()
stencil   = spGetStencilManager()

; Camera & light
cam      = spCreateCamera()
light   = spCreateLight(LIGHT_DIFFUSE)

spSetLighting(True)
spSetNodePosition(light, 5, 0, 0, False)

; Model
obj = spLoadModel("C:\Programme\Blitz3D\samples\mak\dragon\model\dragon.md2", "", 0)
tex1 = spLoadTexture("C:\Programme\Blitz3D\samples\mak\dragon\model\dragon.bmp", 0, False)
spAddEntityTexture(obj, tex1, 0)
spSetNodeScale(obj, 0.1, 0.1, 0.1, False)

; Environement
cube = spCreateModel(ENTITY_CUBE, 0, 1, 0, False)
spSetNodePosition(cube, 0, 22.75, 0, False)
spSetNodeScale(cube, 25, 25, 25, False)
spFlipMesh(cube, False)

tex2 = spLoadTexture("C:\Programme\Blitz3D\samples\mak\dragon\Chorme-2.BMP", 0, False)
spAddEntityTexture(cube, tex2, 0)
spDoEntityTextureTransform(cube, 0, 3, 3)

If Test = 2 Or Test = 3
   light_obj = spCreateModel(ENTITY_SPHERE, 9, 0.5, 0, False)
   spSetNodeParent(light_obj, light)
   spSetEntityMaterial(light_obj, MATERIAL_NOLIGHTING)
EndIf

; Normals smooth
spSetEntityNormalsType(obj, NORMALS_SMOOTH)
spUpdateNormals(obj)

; Animation
anim = spGetAnimation(obj)

If Test = 1
   spDoAnimate(anim, ANIM_LOOP, 150, 0, 0)
ElseIf Test = 3
   spDoAnimate(anim, ANIM_LOOP, 25, 0, 0)
EndIf

; Realt-time shadow
If Test = 2 Or Test = 3
   spAddEntityCastCloud(obj)
   spAddLightShadowSource(light)
   spSetStencilEffects(True)
EndIf

cam_x# = 0.0 : cam_y# = -5.0 : cam_z# = -15.0
light_deg# = 0.0 : light_radius# = 15.0

While spUpdateEvent() And spIsKeyHit(27) = False
   
   spClearBuffers()
   
   spUpdateAnimations()
   
   If Test = 3
      spUpdateStencilShadow(obj) ; (very slow)
   EndIf
   
   spRenderScene()
   
   spFlipBuffers()
   
   If spIsKeyPressed(KEY_RIGHT)   Then cam_x = cam_x + 2
   If spIsKeyPressed(KEY_LEFT)      Then cam_x = cam_x - 2
   If spIsKeyPressed(KEY_UP)      Then cam_y = cam_y - 2
   If spIsKeyPressed(KEY_DOWN)      Then cam_y = cam_y + 2
   If spIsKeyPressed(KEY_PAGEUP)   Then cam_z = cam_z + 0.5
   If spIsKeyPressed(KEY_PAGEDOWN)   Then cam_z = cam_z - 0.5
   
   If (cam_z < -30) Then cam_z = -30
   If (cam_z > -10) Then cam_z = -10
   If (cam_y < -90) Then cam_y = -90
   If (cam_y >   0) Then cam_y =   0
   
   If Test = 2 Or Test = 3
      light_deg = light_deg + 1.0
      light_radius = 20 + Sin(light_deg)*10
      spSetNodePosition(light, Sin(light_deg)*light_radius, 3+Cos(light_deg/2)*5, Cos(light_deg)*light_radius, False)
   EndIf
   
   spSetNodePosition(cam, 0.0, 0.0, 0.0, False)
   spSetNodeRotation(cam, cam_y, cam_x, 0.0, False)
   spDoNodeMove(cam, 0, 0, cam_z)
   
   If spIsKeyHit(KEY_RETURN)
      isLighting = 1 - isLighting
      spSetLighting(isLighting)
   EndIf
   
Wend

spDeleteDevice()

End
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana
  • Zuletzt bearbeitet von LukasBanana am Sa, Jun 07, 2008 13:48, insgesamt einmal bearbeitet
 

Coffee

BeitragMi, Mai 21, 2008 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Finds richtig stark, mit welchem ehrgeiz du das durchziehst! bin schon gespannt auf erste testbare versionen (bis zu denen es wohl noch etwas dauern wird, is ja klar^^). und dann einen geschwindigkeitsvergleich mit DX7 und mit der OpenGL-Funk von Irrlicht =)

MfG
*Mjam*

peacemaker

BeitragDo, Mai 22, 2008 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Engine ist ja selbstgeschrieben und hat ja nix mit Irrlicht zu tun, die Architektur ist aber anscheinend ähnlich...
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
 

Coffee

BeitragDo, Mai 22, 2008 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, deswegen ja der vergleich ^^

mfg
*Mjam*

ShadowJumper

BeitragFr, Mai 23, 2008 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
wird die Engine ausschließlich für B3D verfügbar sein oder auch für BB/B+?
(sollte sie auch mit B+ nutzbar sein, dann hätte ich einen Grund für eine gewisse Zeit wieder BB zu nutzen xD)

basiert diese auf DirectX oder OpenGL?

nur so nebenbei:
für VB wirst du "C++/CLI" benötigen (außer wenn es auch VB ohne .NET gibt...)
*so-tu-als-ob-von-was-Ahnung* ^^
Bilder kostenlos hosten
lest und weint:
RAM - 512 MB; GrafikRAM - 32 MB; CPU - 800 MHz
Ps: ... und weint (vor lachen)

LukasBanana

BeitragSa, Mai 24, 2008 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, war kurze Zeit im 'Urlaub' ^^

Also, ich denke es wird nicht nur für B3D sondern auch für BB und B+ nutzbar sein. Da es sich ja von der Programmiersprache an sich um die gleiche handelt außer dass es eben unterschiedliche Funktionalitäten gibt.

SoftPixelEngine unterstützt: OpenGL

Ich hoffe natürlich, da die DLL (SoftPixelEngine.DLL oder SoftPixelEngineWrapper.DLL) ja in C++ geschrieben ist, dass ich sehr viel an Geschwindigkeit auch in den Wrappern für BB rausholen kann

Grüße, Lukas
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana

LukasBanana

BeitragSo, Mai 25, 2008 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich will nur mal ankündigen dass voraussichtlich die erste offizielle PreBeta Version des SPWrappers für BB in ca. 2 Wochen (also ca. 14 Tage) erscheinen soll! Very Happy
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana

LukasBanana

BeitragSo, Mai 25, 2008 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch mal ne Frage zu den Userlibs:

Wie kann man in der *.decls Datei Default-parameter setzten?

In BB sieht das bei einer Funktion so aus:

Code: [AUSKLAPPEN]
Function Func(Param = 0)
    Value = Param
End Function

Func() ; Default-Parameter ist 0
Func(5) ; Parameter wird mit 5 gefüllt

Wie sieht das also dann in der *.decls Datei aus? Geth das da überhaupt?
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana
Meine Projekte auf github.com: https://github.com/LukasBanana
Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group