C ++ Forum | | | | | pourquoi muss je mon Funktion : drawogl 2x hintereinander eingeben, avec cela sich cela objet dreht. mais seulement beim Compilieren avec Profan2Cpp. Ansonsten pas. qui dll braucht on avec zum le bout. KompilierenMarqueSéparation $H Windows.ph
DEF rgb_umwandlung(2) ! bmptex.dll,bmptex
declare x1!,y1!,dx!,dy!,winkel!,groesse&,handleogl&
declare hWin&,hwin1&,hintergr&,tex.auto&
declare width&,height&,texid&,ende&
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy#
groesse&=128*128*4
dim bildxy#,groesse&
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = Create(text, %hWnd, Test1, 10, 10, 128,128)
hWin1& = Create(text, %hWnd, Test2, 250, 20, 500,500)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto_h& = Create(hnewPic,64,64,0 )
hintergr&=create(hnewpic,500,500,$00ffff)
tex.auto&=erzeugetex(auto.bmp)
drawogl
drawogl
oglzubmp
drawscene
WHILE ende&
WaitInput
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(81)
winkel!=winkel!+1.0
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawogl
drawogl
oglzubmp
drawscene
endif
ENDWHILE
end
proc drawogl
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 oglzubmp
DeleteObject handleogl&
handleogl&=create(hPic,0,&OGLBMP )
endproc
proc drawscene
StartPaint hwin1&
drawpic hintergr&,0,0;0
drawpic handleogl&,100+dx!,100+dy!,-1 ;-1
EndPaint
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& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
endproc
proc erzeugetex
parameters namebild$
texid&=0
height&=128
width&=128
dispose bmi#
bitmap_header()
bild_umw_h& = Create(hPic, -1, namebild$)
~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
rgb_umwandlung(bildxy#,groesse&)
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, height&, width&, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
dispose bildxy#
ref='./../../funktionsreferenzen/XProfan/return/'>RETOUR texid&
endproc
|
| | | | |
| | Sebastian König | allô Peter,
Peter Bierbachh
pourquoi muss je mon Funktion : drawogl 2x hintereinander eingeben, avec cela sich cela objet dreht. mais seulement beim Compilieren avec Profan2Cpp. Ansonsten pas. qui dll braucht on avec zum le bout.
malheureusement peux je cela Problem encore pas nachvollziehen... aussi si je qui doppelten drawogl-Aufrufe auskommentiere, peux je keinen Unterschied entre XProfan- et Profan2Cpp-variante feststellen. cela objet dreht et bewegt sich comme soll.
peux es peut-être. la fois quelqu'un anders, qui ici mitliest, chez sich ausprobieren?
MfG
Sebastian |
| | | | |
| | | ici la fois sans dll. Im linken Ogl-la fenêtre dreht es sich. mais im rechten la fenêtre normalen Screen bleibt es stehen , ist mais trop voyons. j'ai sur Farbtiefe 32 et 16 bit probiert. KompilierenMarqueSéparation $H Windows.ph
declare x1!,y1!,dx!,dy!,winkel!,groesse&,handleogl&
declare hWin&,hwin1&,hintergr&,hintergr1&,tex.auto&,adresse%,groesse%
declare width&,height&,texid&,ende&
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy#
groesse%=128*128*4
dim bildxy#,groesse%
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = Create(text, %hWnd, Test1, 10, 10, 128,128)
hWin1& = Create(text, %hWnd, Test2, 250, 20, 500,500)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto_h& = Create(hnewPic,64,64,0 )
hintergr&=create(hnewpic,500,500,$00ffff)
hintergr1&=create(hnewpic,500,500,$000000)
tex.auto&=erzeugetex(auto.bmp)
drawogl
drawogl
oglzubmp
drawscene
WHILE ende&
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(81)
winkel!=winkel!+1.0
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawogl
drawogl
oglzubmp
drawscene
endif
ENDWHILE
end
proc drawogl
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 oglzubmp
DeleteObject handleogl&
handleogl&=create(hPic,0,&OGLBMP )
endproc
proc drawscene
StartPaint hintergr1&
drawpic hintergr&,0,0;0
drawpic handleogl&,100+dx!,100+dy!,-1 ;-1
EndPaint
StartPaint hwin1&
drawpic hintergr1&,0,0;0
EndPaint
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& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
endproc
proc erzeugetex
parameters namebild$
texid&=0
height&=128
width&=128
dispose bmi#
bitmap_header()
bild_umw_h& = Create(hPic, -1, namebild$)
~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
bmptex()
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, height&, width&, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
dispose bildxy#
RETURN texid&
endproc
proc bmptex
adresse%=bildxy#
P2CPP: <INLINE_CPP>
long zaehler;
long wert;
unsigned char b;
unsigned char g;
unsigned char r;
long adrr;
wert=PVAR(groesse%);
adrr=PVAR(adresse%);
char* bereich = reinterpret_cast<char*>(adrr);
for(zaehler = 0; zaehler <= wert; zaehler = zaehler + 4)
{
b=bereich[zaehler] & 255;
g=bereich[zaehler+1] & 255;
r=bereich[zaehler+2] & 255;
if ((r==0) & (b==0) & (g==0))
bereich[zaehler+3]=0;
else
{
bereich[zaehler+3]=255;
}
bereich[zaehler+2]=b;
bereich[zaehler]=r;
}
P2CPP: span class=s2>/ INLINE_CPP>
endproc
|
| | | | |
| | Sebastian König | Peter Bierbachh
ici la fois sans dll. Im linken Ogl-la fenêtre dreht es sich. mais im rechten la fenêtre normalen Screen bleibt es stehen , ist mais trop voyons. j'ai sur Farbtiefe 32 et 16 bit probiert.
alors chez mir zumindest ist cela Ergebnis juste - es dreht sich dans beiden Windows, aussi si je qui doppelten Aufrufe auskommentiere. |
| | | | |
| | Sebastian König | Nachtrag: sur einem anderen System konnte Je l' faute maintenant reproduzieren. je melde mich ici wieder, sobald je qui Ursache trouvé habe. |
| | | | |
| | | | | | | |
| | Sebastian König | Um den Fil ici abzuschließen: qui dernier Stand ist, dass es chez mir sur einem XP-System dans beiden Varianten (XProfan et Profan2Cpp) funktioniert, sur einem anderen (avec Vue) cependant grundsätzlich pas. Es scheint alors un Problem avec &OGLBMP trop donner, dass pas Profan2Cpp-spezifisch ist... Peter hat ici [...] une Alternative beschrieben, qui toujours sûrement marcher sollte. |
| | | | |
| | Sebastian König | allô Peter,
beim Testen einer neuen, sur Deinem glReadPixels()-Beispiel aufbauenden variante pour &OGLBMP stieß je vorhin sur une mysteriösen Absturz, qui unregelmäßig auftrat. je mon qui Ursache dans Deinem C++-Code trouvé trop avons: dans qui la ligne KompilierenMarqueSéparation sollte meiner attitude pour cela <= ein einfaches < sein, sonst wird die Bereichsgrenze um einige Bytes überschritten. Da ich vermute, dass der Bug auch in der DLL steckt, wollte ich hier mal darauf hinweisen...
MfG
Sebastian |
| | | | |
| | funkheld | merci.
mais cela Fenêtre im Hauptrogramm wird seulement gezeichnet si je es avec qui souris quelque chose déménagé habe.
merci. Gruss |
| | | | |
|
répondreOptions du sujet | 7.944 Views |
Themeninformationencet Thema hat 4 participant: |