SoftPixel Engine
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Komisch ... jetzt funktioniert es. Allerdings nur mit extern "C" __declspec(dllexport) ![]() ![]() 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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cool, danke. Das sieht recht praktisch aus ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() ![]() Erst mal nur ein kleiner Würfel, aber ganz nett ^^ BlitzBasic erfährt anscheinend auch bald OpenGL ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schaut euch mal die erste kleine Mini test Version vom Wrapper für BB an:
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja, deswegen ja der vergleich ^^
mfg |
||
*Mjam* |
![]() |
ShadowJumper |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group