Also eins gleich vorweg, ja ich will mich an eine dll wagen, welche eine 3D Engine beinhaltet, aber keine Konkurenz zur glb internen, da diese dx9 unterstützen wird.
Meine Frage nun, ich habe die header datei von purebasic angesehen, sowie die von bb3d, welche beide die dll unterstüzen.
Wie müsste so ein wrapper für glb aussehen?
einzelne funktionen mit jeweils inline drin?
und es gibt eine Init3D und die dazugehörige EndInit3d(welche die dll aus dem speicher entlädt) funktion.
die Init3D() umfasst in den anderen headerdateien den kompletten befehlssatz der dll.
ich habe somit erstmal versucht eine funktion um alle anderen funktion zu machen, hat aber nicht wirklich geklappt.
also grundlegen eine frage, wie kann man in einer gbas eine dll aufrufen, und alle, befehle nutzbar machen?
bei den anderen header dateien gibt es ja sowas wie die prototypen, und deklarationen, constanten usw.
wie müsste das bei glb aussehen?
ich könnte auch einen teil der pb headerdatei posten, falls euch das etwas nützt?
frage ist auch, wenn ich in der dll beispielsweise einen befehl wie positionentity(entity, x, y, z) aufrufen würde wollen, was für werte bzw. variablen oder variablentypen ich dort eintragen muss?
also x,y,z sind ja integer, und entity, wohl dann eher nicht, oder wird das intern ebenso als integer gehandhabt.
es sind mehrere hundert befehle, aber ich würde das einfach mal nebenbei stück für stück probieren wollen, bzw. mal einfach nur ein objekt laden und anzeigen wollen, mit dx9 und glb.
das ist ein riesen motivationsschub.
für tips etc. wie man das anhand eines beispiels macht, wäre ich mehr als dankbar.
http://www.glbasic.com/forum/index.php?topic=2129.0 (http://www.glbasic.com/forum/index.php?topic=2129.0) zeigt wie's geht. Evtl. sollte das mal einer übersetzen und in's deutsche FAQ packen. - aber sprecht euch ab, damit's nicht 3 gleichzeitig machen :P
jo, da warst du wohl etwas zu schnell.
aber geht das nicht simpler???
die pb headerdatei sieht so aus, hab sie dir schon geschickt, aber wer sich angesprochen fühlt, und wenigstens anhand eines befehls, oder zwei oder drei, das mal übersetzen könnte.
http://www.glbase.de/dll.txt
also so gehts es ja schonmal nicht.....
FUNCTION xGraphics3D: a, b, c, d, e
INLINE
DECLARE_ALIAS(xGraphics3D,"Xors3D.dll","_xGraphics3D@20",(int,int,int,int,int),int);
ENDINLINE
ENDFUNCTION
FUNCTION xCreateCamera:
INLINE
extern "C" {
DECLARE_ALIAS(xCreateCamera,"Xors3D.dll","_xCreateCamera@4",(),void);
}
ENDINLINE
ENDFUNCTION
FUNCTION xflip:
INLINE
extern "C" {
DECLARE_ALIAS(xFlip,"Xors3D.dll","_xFlip@0",(),void);
}
ENDINLINE
ENDFUNCTION
FUNCTION xPositionEntity: ent, x,y,z
INLINE
extern "C" {
DECLARE_ALIAS(xPositionEntity,"Xors3D.dll","_xPositionEntity@20",(int,int,int),void);
}
ENDINLINE
ENDFUNCTION
Nein!!! Das DECLARE kommt oben in die Datei und nicht in eine Funktion. Schau halt mal mein Beispiel an und lies das auch durch.
kannst du wenigstens einen oder zwei meiner beispielbefehle oben umschreiben?
vorallem die übergebenen parameter machen mir probleme, weil ja ein unterschied zwischen zahlen, entitys, true-false, etc. ist.
ich bin da bei deinem noch net ganz durchgestiegen, dachte da reicht eine oder zwei zeilen um das umzuschreiben.
okay schau mal, so in etwa?
INLINE
extern "C" {
DECLARE_ALIAS(xGraphics3D,"Xors3D.dll","_xGraphics3D@20",(int,int,int,int,int),int);
}
ENDINLINE
FUNCTION Graphics3D: width, height, depth, mode, vsync
INLINE
if(xGraphics3D)
return xGraphics3D(0);
ENDINLINE
ENDFUNCTION
kommt aber dieser fehler.
compiling:
C:\Users\nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::Graphics3D(DGInt, DGInt, DGInt, DGInt, DGInt)':
C:\Users\nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:18: error: too few arguments to function
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
ps.s der prototype bei pb lautet Prototype.l xGraphics3DProto(width, height, depth = 32, mode = #False, vsync = #False)
Das #False bei den beiden Parametern bedeutet, dass diese, falls an ihrer Position im Funktionsaufruf kein Wert eingegeben wird, standartmäßig den Wert #False annehmen. Es sind quasi "optionale Parameter".
WIE muss ich das handhaben???
und der bb3d part wäre folgender
in der decls datei
DLL_xGraphics3D%(width%, height%, depth%, mode%, vsync%):"_xGraphics3D@20"
und in der header datei die funktion
Function xGraphics3D(width, height, depth = 16, mode = 0, vsync = 0)
hwnd = SystemProperty("AppHWND")
xSetWND(hwnd)
DLL_xGraphics3D(width, height, depth, mode, vsync)
xDefaultFont = xLoadFont("Arial")
End Function
vielleicht hilft das ja, ich blick nämlich nicht, warum da zu wenig argumente übergeben werden!?!
is schon blöd, dass man bei glb nicht den gleichen funktionsnamen nehmen kann.
INLINE
extern "C" {
DECLARE_ALIAS(xGraphics3D,"Xors3D.dll","_xGraphics3D@20",(int,int,int,int,int),int);
}
ENDINLINE
FUNCTION Graphics3D: width, height, depth = 16, mode = 0, vsync = 0
INLINE
if(xGraphics3D)
return xGraphics3D(width, height, depth, mode, vsync);
ENDINLINE
ENDFUNCTION
INLINE
extern "C" {
DECLARE_ALIAS(xRenderWorld,"Xors3D.dll","_xGraphics3D@4",(int),int);
}
ENDINLINE
FUNCTION Render3D:
INLINE
if(xRenderWorld)
return xRenderWorld(0);
ENDINLINE
ENDFUNCTION
soweit funktioniert das, bricht aber damit ab, dass die meldung kommt, das die direct3d device nicht gestartet werden kann.
dazu gibts in der pb header datei um alle global deklarationen bzw. funktionen eine große funktion namens INIT3D() .wie bekomm ich das in glb hin.
wollte grad schreiben, dass der das Device nicht erstellen kann!
Liegt wohl an der DLL....
Mein Code(Seperates *.gbas):
GLOBAL xDefaultFont
INLINE
#define DLL "Xors3d.dll"
DECLARE_ALIAS(xSetWND, DLL,"_xSetWND@4",(void*),void);
DECLARE_ALIAS(xGraphics3D, DLL, "_xGraphics3D@20",(int,int,int,int,int),int);
DECLARE_ALIAS(xLoadFont, DLL, "_xLoadFont@20",(const char,int,int,int,int),int);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
// DECLARE_ALIAS(, DLL, "",(),);
ENDINLINE
FUNCTION Xo_Graphics3D: width, height, depth = 16, mode = 0, vsync = 0
LOCAL OK
INLINE
xSetWND(GLBASIC_HWND());
OK = xGraphics3D(width, height, depth, mode, vsync);
ENDINLINE
xDefaultFont = Xo_LoadFont("Arial");
RETURN OK
ENDFUNCTION
FUNCTION Xo_LoadFont: font$, height = 12, bold = 0, italic = 0, underline = 0
INLINE
return xLoadFont(font_Str, height, bold, italic, underline);
ENDINLINE
ENDFUNCTION
EDIT:
Die INIT vom PB-Header ist nur dafür da, alle Funktionen zu laden mehr net ;)
EDIT2:
Das komische ist noch er sagt fehler in:
File name: e:\xors\xors3d\engine\render.cpp
Ich hab "e" als DVD-Laufwerk :D
KA was der von dem render.cpp will?
kannst du die xRenderWorld noch machen?
und irgendwas mit entities?also weil ich nicht weiß, was da hinten dann reinkommt, jeweils, int, void, oder was auch immer.
das xRenderworld hab ich wohl falsch....
das mit dem laufwerk pfad hab ich auch, keine ahnung warum?
ups, stimmt, Fehler in der declare, war noch das xGraphics3D@4 drin.geht aber trotzdem noch nicht, keine ahnung warum.
vergiss es einfach, wirds beste sein ;)
na toll
kannst du dir trotzdem die pb datei nochmal anschauen?
da wird am anfang ein Xors3D_Init()
gezeigt, welches alles umfasst als funktion.
und in einem pb beispiel wird dies als erster befehl aufgerufen, kann man das auch irgendwie einbinden, kann ja nicht so schwer sein.
Hab dir doch schon gesagt, dass das Init nur alle Funktionen läd, mehr nicht!
checked doch einfach mal ob die funktion nicht vielleicht mit extern C funzen.
wenn eine dll abscmiert liegt es am falschen aufruf meistens nicht daran das sie schlech tprogrammiert wurde.
EDIT:// DEvice nicht erstellen kann vielleicht daran liegen das ihr bezug auf ein vorhandenes fenster nehmt. versucht mal ein neues.
Mei o mei o mei. Dann schick mir halt eine mail und ich mach Dir die 2 Funktionen rein.
hab dir eine pn geschickt, aber hier auch nochmal für alle, die sich probieren wollen...
http://www.glbase.de/blanko.rar
geht halt bis zum öffnen eines fensters, aber direct3d device kann nicht starten irgendwie.
@Heiko
Ist zwar nett gemeint aber spar dir die Arbeit lieber.:) Ich würde es eh nicht benutzen, weil es mir nichts bringt. :P GLBasic bietet doch schon alles. Was willst du mehr?
P.s.
Wolltest du nicht ein Spiel mit dem ES machen? :booze:
Cheers
mach ich doch auch noch nebenbei, mich ärgern nur die animationen, und da hab ich für zwischendurch was anderes gesucht.
um mich abzulenken, grins.
und das ganze, wenn ichs hinbekommen würd, wäre dann dx9 verfügbarkeit für glb!
Quote from: Heiko on 2008-Jul-24
mach ich doch auch noch nebenbei, mich ärgern nur die animationen, und da hab ich für zwischendurch was anderes gesucht.
und das ganze, wenn ichs hinbekommen würd, wäre dann dx9 verfügbarkeit für glb!
Vergiss es, nix DX9 in GLB....
DX überschreibt die GLBasic-Main und somit ist das GLB-Fenster weg!
Du kannst dann nix mit machen, du bist quasi bei Null.
echt nich?
das geht doch bei anderen sprachen auch....
Jetzt denk mal schwer drüber nach, wieso das so ist... :noggin:
Tip DX ;)
das is mir schon klar, aber ich mein bmax kann das ja auch.
da ist wohl aufgrund der eingebauten engine glb zu sehr auf ogl angewiesen.
nunja, ich hab gernot ja eine mail schicken sollen, mit allem, wie weit ich bin, und mal sehen, was er dazu sagt, spätestens dann wird er ja merken, dass es um dx unterstützung geht.
aber nett wärs schon, und ich könnt mich drum kümmern, wenn ich mich mal eingearbeitet habe.
Vergiss es !
GLBasic wird ---------> NIE <---------- DX unterstützung haben!
Die betonung liegt auf -----------------------------------> NIE <--------------------------- :zzz:
war ja auch nur eine idee, ich hätts cool gefunden bisschen dx zum laufen zu kriegen.
naja ein fenster hatten wir ja schon offen, immerhin.
sogar mit deinem und mit meinem code, auch wenns nich weiter ging.
dann gibts ja doch eine einschränkung, also etwas was glb nich kann. :S
GLB kann alles!
Kommt auf den Benutzer an !
QuoteGLBasic wird ---------> NIE <---------- DX unterstützung haben!
ähm du hast dir eben wiedersprochen...
Dann les doch mal richtig!
NIE, weil Gernot das NIE machen würde...
Nie hat nix mit können zu tun, also hab ich mir nicht wiedersprochen :roll:
grins mein ich ja, dass es nie direkt unterstützt wird vielleicht, sondern nur, dass man eben seperat als modul, also .dll gangbar machen könnte.
dies meinte ich ja von anfang an, und keine direkte dx unterstützung, was ja auch sinnfrei wegen multiplattform wäre.
aber als alternative auf jeden fall eine nette spielerei, und warum nicht, wenns denn möglich ist.
wäre ja auch nett, so, mit bisschen unterstützung am anfang, ich lerne ja mit jedem stück code der übersetzung des wrappers.
Dann nimm ne andere, die ist einfach nur schlecht gecodet!
ähm welche würdest denn nehmen, die dx9 kann und son ES drin hat, und shader, partikel usw usw.
Irrlicht?
mmmm hatte ich schon überlegt, ich schaus mir mal mit an.
aber das ist ja noch komplizierter, hab mir mal den wrapper für pb angeschaut..... :giveup:
mädels ich habs.
einen rotierenden teapot.
seht selbst.
cpu last zwischen 3-11 prozent, aber ich hab auch nur nen lappi mit x3100 grafik, aber hey, ich finds klasse.
dx9 unter glb, ich mach den wrapper komplett fertig.
okay cursortasten zum kamera bewegen, is keine dolle steuerung und tasten vertauscht, aber um die zeit, es funktioniert, und ich weiß, wie....
ausser den killprozess, naja, wird schon.
[attachment deleted by admin]
Xor3d ist doch die Russische engine?
Hab inzwischen 22 Befehle fertig, fast alles zu positionierung und bewegung eines geladenen und texturierten objektes.
paar effekt befehle hab ich schon drin, tastaturabfrage etc.
alle globals drin.
als nächstens sind shader dran.
werd sicher in ein paar tagen den kompletten wrapper fertig haben.
so wie ich zeit habe.
Den mach ich dir so in ca 2-3 Stunden GANZ ;)
Schreib halt nen Wrapper von decl to gbas..
hab ich auch gesagt - das könnte man wirklich brauchen!
sind aber nicht nur die decl die man konvertieren muss.....schranz0r
P.S. mach doch! bis 20 uhr sind drei stunden um.....
weis ich doch das es auch eine BB ist :)
Ich hatte das schon gemacht, kannste trucidare fragen!
Und nein, den gefallen tu ich dir jetzt mal nicht.
öhm mach mir den wrapper ja nun selber, von daher.....
angel ich mir mein dx fischlein ja nun selber...
ist doch jedem selber überlassen, oder? ich zwinge doch niemanden es zu nutzen.
ich selbst werd es nutzen, und mehr will ich ja garnricht.
ich seh das wie in gernots log
QuoteNeues Konzept:
GLBasic wird zukünftig ein breiteres Anwendungsspektrum erhalten.
öhm na unterschwellig ist was anderes.in einem von mir erstellten thread mit diesem thema.
wenn du es nicht haben möchtest, dann ists doch egal...mir zumindest
Quote from: Heiko
ich selbst werd es nutzen, und mehr will ich ja garnricht.
Das versteh ich jetzt nicht. Warum schreibst du es dann hier ins Forum? Also ich würde sowas dann für mich behalten. ;)
Cheers
nein wer sich dafür interessiert der kanns gern haben.
bisher bin ich bis auf wenige ausnahmen nur dafür kritisiert worden.