| |
|
|
- Seite 1 - |
|
| Wenn ich hier im Programm mein linkes Opengl-Bild drehe (Taste Q/E), soll im rechten Fenster das Bild als normales Pic dargestellt werden. Es funktioniert soweit unter dem normalen Profan, mit Profan2cpp nicht Das Problem, ist wenn ich anfange zu drehen, dann wird das rechte Bild erneuert, aber die Fläche ist weiss, es sind keine Daten drin
Muss in Profan2cpp irgendwie der Speicher fürs Bild usw anders reserviert werden? Welche Fehler habe ich gemacht. Unten ist das gesamte Programm.
Im Anhang ist eine Zip auch mit eine EXE von Profan und eine EXE von Profan2cpp KompilierenMarkierenSeparieren $H Windows.ph
DEF rgb_umwandlung(2) ! "bmptex.dll","bmptex"
declare x1!,y1!,dx!,dy!,winkel!,y&,z%,a&,test%
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy# ,ogl_rgb#
dim ogl_rgb#,128*128*4+1032
var texid%=0
var ende%=1
Window 20,20-600,400
Cls @RGB(220,220,220)
var hWin& = @Create("text", %hWnd, "Test1", 10, 10, 128,128)
var hWin1& = @Create("text", %hWnd, "Test1", 180, 10, 250,250)
oGL("Init", hwin&, 0,0, 0, 0)
oGL("PosMode", 1)
ogl("glReadBuffer",~GL_Front)
bild_auto_h& = Create("hPic", -1,"leer.bmp") Bildcontainer für "setDIBits"
var tex.auto%=erzeugetex("auto.bmp")
setTimer 18
drawglscene
drawglscene
oglzubmp
WHILE ende%
WaitInput
if isKey(81)
winkel!=winkel!+1.0
drawglscene
oglzubmp()
endif
if isKey(69)
winkel!=winkel!-1.0
drawglscene
oglzubmp()
endif
ENDWHILE
killTimer
end
proc oglzubmp
ogl("glReadPixels",0,0,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_auto_h&,0,128,ogl_rgb#,bmi#,0)
mcls 128,128
startpaint -1
drawpic bild_auto_h&,0,0,-1
endpaint
startpaint hWin1&
mcopybmp 0,0-127,127>50,50,-1
endpaint
endproc
proc drawglscene
OGL("Clear")
OGL("origin",0,0,-1.11)
OGL("texture",tex.auto%,1)
OGL("rotate",0,0,winkel!)
OGL("quad",0.5,0.5)
OGL("show")
endproc
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER =
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = 128
.biHeight& = 128
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
endproc
proc erzeugetex
parameters namebild$
bitmap_header()
bild_umw_h& = Create("hPic", -1, namebild$)
a&=bmi#.biSizeImage&
dim bildxy#,a&+1032
~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
rgb_umwandlung(bildxy#,a&)
OGL("glGenTextures",1,ADDR(texid%))
OGL("glBindTexture",~GL_TEXTURE_2D,texid%)
OGL("glEnable",~GL_ALPHA_TEST)
OGL("glAlphaFunc",~GL_GREATER, 0.1)
OGL("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
OGL("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR)
OGL("gluBuild2DMipmaps",~GL_TEXTURE_2D, ~GL_RGBA, 128, 128, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
dispose bildxy#
RETURN texid%
endproc
mfg peter |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
Sebastian König | Ok, erledigt Auf der Profan2Cpp-Homepage [...] gibt es nun die Testversion 2.0 zum Download. |
|
|
| |
|
|
|
| Hallo, das ging aber Superschnell. Die Grafik funktioniert auch wie sie soll.
Eine tolle Arbeit das ganze Profan2cpp 2.0
Wenn ich jetzt mit BCC55 compiliere, kann ich dann da auch "if-auswertungen " ala C++ gemäß BCC55 reinbringen usw oder gibt es da irgendwelche besondere einschränkungen, das nur bestimmter Code genommen werden darf?
Ein Fehler? Der Compiler beanstandet die "PVAR", das er die nicht kennt, wenn ich ich auf weiter gehe, stürzt er ab. KompilierenMarkierenSeparieren mfg peter |
|
|
| |
|
|
|
Jörg Sellmeyer | Ob das mit dem Inline CPP geht, kann ich nicht sagen aber Du meinst doch sicher "EndProc" und nicht "end proc", oder? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 12.09.2008 ▲ |
|
|
|
|
| oGL("scale", scale_1!, scale_1!,scale_1!)
Dieser Befehl wird beanstandet, weil die falsche Anzahl von Parametern übergeben wird. Bei Scale werden aber 3 Parameter übergeben. (war bei Vers 1.6c nicht)
mfg peter |
|
|
| |
|
|
|
| Ein Parameter für ogl.Scale! (in die Falle bin ich auch schon getappt) |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| "end proc"
Natürlich zusammen. Wurde hier falsch reinkopiert. Ist in meinem beanstandeten Programm richtig.
mfg |
|
|
| |
|
|
|
| procedure glScaled(x, y, z: TGLdouble);
Auszug aus Opengl-Delphi .
mfg peter |
|
|
| |
|
|
|
| Falsche Hilfedatei, ogl("scale",x!) ist XProfan - nicht Delphi. Hier wird zudem die API genutzt, dass kannst Du mit XProfan ganz einfach: ogl("glScaled",... |
|
|
| |
|
|
|
| Also dann sollte das mal in Xprofan10 /11 dem Täglichen original Befehl angepasst werden.
mfg peter |
|
|
| |
|
|
|
| Es gibt keine Abweichungen, es sind 2 unterschiedliche Funktionen und Sprachen. Den Sinn dahinter, ogl.scale auf 1 Parameter zu beschränken, habe ich aber damals schon nicht gefunden. Roland könnte auch 3 Parameter ermöglichen. |
|
|
| |
|
|
|
Sebastian König | Hallo Peter,
die Anweisung für das Inline-C++ sollte ein Kommentar sein: KompilierenMarkierenSeparieren Von Profan2Cpp aus gibt es für den Code eigentlich keine direkte Einschränkung - Du kannst einfach mal ausprobieren, was funktioniert und was nicht.
MfG
Sebastian |
|
|
| |
|
|
|
| Ah...und ich dachte das dieses "<INLINE_CPP>" ein Befehl war.
danke.
mfg peter |
|
|
| |
|
|