Assembler Foro | | | | | Hier kommt jetzt die Fehlermeldung von XPIA : Error: Fehlende Headerfile : GL_BGRA Procnaehe: ERZEUGETEX
Was muss hier umgeändert werden? Ich kann keinen eingesetzten ASM-Code compilieren.
mfg peter KompilierenMarkierenSeparieren $H Windows.ph
If 0
AsmStart rgb_umwandlung
Parameters bildxy#,a&
LOCAL r :BYTE
LOCAL g :BYTE
LOCAL b :BYTE
LOCAL w :DWORD
mov eax,para2
mov w,eax
mov ecx,0
mov ebx,para1
.while ecx<=w
mov al,[ebx+ecx]
mov b,al
mov al,[ebx+ecx+1]
mov g,al
mov al,[ebx+ecx+2]
mov r,al
and b,255
and g,255
and r,255
mov al,b
.if al>0
jmp wandle
.endif
mov al,g
.if al>0
jmp wandle
.endif
mov al,r
.if al>0
jmp wandle
.endif
mov al,0
mov [ebx+ecx+3],al
mov al,b
mov [ebx+ecx+2],al
mov al,r
mov [ebx+ecx],al
jmp weiter
wandle:
mov al,255
mov [ebx+ecx+3],al
mov al,b
mov [ebx+ecx+2],al
mov al,r
mov [ebx+ecx],al
weiter:
add ecx,4
.endw
AsmEnd
EndIf
declare bild1$
declare x1!,y1!,dx!,dy!,winkel!
declare hWin&
declare width%,height%
declare bild_h&,a&,bild_h1&
declare bmi#,bildxy# ,ogl_rgb#
var groesse%=128*128*4
dim ogl_rgb#,groesse%
var texid%=0
var ende%=1
Window 20,20-600,450
Cls @RGB(220,220,220)
hWin& = @Create("text", %hWnd, "Test1", 220, 10, 350, 350)
oGL("Init", hwin&, 0,0, 0, 0)
oGL("PosMode", 1)
ogl("glReadBuffer",~GL_Back)
bild1$="auto.bmp"
var tex.auto%=erzeugetex(bild1$)
var tex.grund%=OGL("loadtexturebmp","tile1.bmp",3)
height%=128
width%=128
dispose bmi#
bitmap_header()
mcls 128,128,0
bild_h1& = Create("hPic", 0,"&MEMBMP" )
WHILE ende%
sleep 1
if isKey(81)
winkel!=winkel!+0.4
endif
if isKey(69)
winkel!=winkel!-0.4
endif
if isKey(87)
y1!=Sin(winkel!/180.0*pi())*0.02
x1!=Cos(winkel!/180.0*pi())*0.02
dx!=dx!-x1!
dy!=dy!-y1!
endif
if isKey(83)
y1!=Sin(winkel!/180.0*pi())*0.02
x1!=Cos(winkel!/180.0*pi())*0.02
dx!=dx!+x1!
dy!=dy!+y1!
endif
drawglscene()
StartPaint %hwnd
DrawText 20,160,(Format$("######0 ",byte(ogl_rgb#,2)))
DrawText 60,160,(Format$("#####0 ",byte(ogl_rgb#,1)))
DrawText 100,160,(Format$("######0 ",byte(ogl_rgb#,0)))
EndPaint
ENDWHILE
proc drawglscene
OGL("Clear")
ogl("push")
OGL("origin",dx!,dy!,-3)
OGL("texture",tex.auto%,1)
OGL("rotate",0,0,winkel!)
OGL("quad",0.7,0.7)
ogl("pop")
ogl("glReadPixels",140,140,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_h1&,0,128,ogl_rgb#,bmi#,0)
drawpic bild_h1&,10,10,0
OGL("move",0,0,-3)
OGL("texture",tex.grund%,10)
OGL("move",0,0,0)
OGL("quad",8,8)
OGL("origin",dx!,dy!,-3)
OGL("texture",tex.auto%,1)
OGL("rotate",0,0,winkel!)
OGL("quad",0.7,0.7)
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& = 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$
mcls 0,0,0
startpaint -1
mloadbmp namebild$,0,0
endpaint
height%=%bmpx
width%=%bmpy
dispose bmi#
bitmap_header()
bild_h& = Create("hPic", -1, namebild$)
a&=bmi#.biSizeImage&
dim bildxy#,a&
~GetDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
Call(xpia_getprocaddressm(xpia_hmodule&,"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, height%, width%, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
dispose bildxy#
RETURN texid%
endproc
|
| | | | |
| | | Du solltest langsam xpse und xpia auseinanderhalten können - das sind immer xpse-Meldungen und keine von XPIA.
Die Meldung ist selbsterklärend, erzeuge hierzu ein Minimalbeispiel und poste es im XPSE-Foro. |
| | | | |
| | Frank Abbing | Die Fehlermeldung kommt nicht von XPIA! GL_BGRA ist unbekannt, darum der Fehler. Der Wert per die Variable ist 32993.
Da du XPIA benutzen willst, musst du auch XPSE (der Precompiler) installiert haben. Und das necessario keine Windows.ph. Ich habe deinen Code umgestellt, so funktioniert er bei mir (jedenfalls wird das Fenster geöffnet, das benötigte Bild fehlt mir). Aber daran denken, XPSE im Editor aufzurufen, nicht den Profan-Compiler. Hier der umgestellte Code: KompilierenMarkierenSeparieren {$cleq}
If 0
AsmStart rgb_umwandlung
Parameters bildxy#,a&
LOCAL r :BYTE
LOCAL g :BYTE
LOCAL b :BYTE
LOCAL w :DWORD
mov eax,para2
mov w,eax
mov ecx,0
mov ebx,para1
.while ecx<=w
mov al,[ebx+ecx]
mov b,al
mov al,[ebx+ecx+1]
mov g,al
mov al,[ebx+ecx+2]
mov r,al
and b,255
and g,255
and r,255
mov al,b
.if al>0
jmp wandle
.endif
mov al,g
.if al>0
jmp wandle
.endif
mov al,r
.if al>0
jmp wandle
.endif
mov al,0
mov [ebx+ecx+3],al
mov al,b
mov [ebx+ecx+2],al
mov al,r
mov [ebx+ecx],al
jmp weiter
wandle:
mov al,255
mov [ebx+ecx+3],al
mov al,b
mov [ebx+ecx+2],al
mov al,r
mov [ebx+ecx],al
weiter:
add ecx,4
.endw
AsmEnd
EndIf
declare bild1$
declare x1!,y1!,dx!,dy!,winkel!
declare hWin&
declare width%,height%
declare bild_h&,a&,bild_h1&
declare bmi#,bildxy# ,ogl_rgb#
var groesse%=128*128*4
dim ogl_rgb#,groesse%
var texid%=0
var ende%=1
Window 20,20-600,450
Cls @RGB(220,220,220)
hWin& = @Create("text", %hWnd, "Test1", 220, 10, 350, 350)
oGL("Init", hwin&, 0,0, 0, 0)
oGL("PosMode", 1)
ogl("glReadBuffer",GL_Back)
bild1$="auto.bmp"
var tex.auto%=erzeugetex(bild1$)
var tex.grund%=OGL("loadtexturebmp","tile1.bmp",3)
height%=128
width%=128
dispose bmi#
bitmap_header()
mcls 128,128,0
bild_h1& = Create("hPic", 0,"&MEMBMP" )
WHILE ende%
sleep 1
if isKey(81)
winkel!=winkel!+0.4
endif
if isKey(69)
winkel!=winkel!-0.4
endif
if isKey(87)
y1!=Sin(winkel!/180.0*pi())*0.02
x1!=Cos(winkel!/180.0*pi())*0.02
dx!=dx!-x1!
dy!=dy!-y1!
endif
if isKey(83)
y1!=Sin(winkel!/180.0*pi())*0.02
x1!=Cos(winkel!/180.0*pi())*0.02
dx!=dx!+x1!
dy!=dy!+y1!
endif
drawglscene()
StartPaint %hwnd
DrawText 20,160,(Format$("######0 ",byte(ogl_rgb#,2)))
DrawText 60,160,(Format$("#####0 ",byte(ogl_rgb#,1)))
DrawText 100,160,(Format$("######0 ",byte(ogl_rgb#,0)))
EndPaint
ENDWHILE
proc drawglscene
OGL("Clear")
ogl("push")
OGL("origin",dx!,dy!,-3)
OGL("texture",tex.auto%,1)
OGL("rotate",0,0,winkel!)
OGL("quad",0.7,0.7)
ogl("pop")
ogl("glReadPixels",140,140,128,128,32993,GL_UNSIGNED_BYTE,ogl_rgb#)
setDIBits(%hdc,bild_h1&,0,128,ogl_rgb#,bmi#,0)
drawpic bild_h1&,10,10,0
OGL("move",0,0,-3)
OGL("texture",tex.grund%,10)
OGL("move",0,0,0)
OGL("quad",8,8)
OGL("origin",dx!,dy!,-3)
OGL("texture",tex.auto%,1)
OGL("rotate",0,0,winkel!)
OGL("quad",0.7,0.7)
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& = 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$
mcls 0,0,0
startpaint -1
mloadbmp namebild$,0,0
endpaint
height%=%bmpx
width%=%bmpy
dispose bmi#
bitmap_header()
bild_h& = Create("hPic", -1, namebild$)
a&=bmi#.biSizeImage&
dim bildxy#,a&
GetDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
Call(xpia_getprocaddressm(xpia_hmodule&,"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, height%, width%, GL_RGBA, GL_UNSIGNED_BYTE, bildxy#)
dispose bildxy#
RETURN texid%
endproc
P.S.: Die erste Zeile steuert XPSE und sagt ihm, er soll den Code compilieren, linken und ausführen. |
| | | | |
| | | @Frank: Wie oben schon erwähnt handelt es sich hierbei um eine xpse-Meldung. |
| | | | |
| | | Ich hatte in "Optionen/Allgemeine Einstellungen/Interpreter den xpse.exe eingeben. Hatte ja gestern schon die anderen Programme conmpiliert mit BMP-Tex usw.
Habe aber die Windows.ph nicht rausgenommen.
mfg |
| | | | |
| | | Dieser Befehl kann noch nicht umgesetzt werden : GL_BGRA Kommt bald eine Cambiamento, das auch diese Variable anerkannt wird statt der Ziffer: 32993 ?
mfg peter |
| | | | |
| | Jac de Lad | | | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 20.08.2008 ▲ |
| |
| | | Das wäre unsinnig da er xpse nutzt erst zur Laufzeit die Konstante zu definieren.
const GL_BGRA=32993
wäre performanter. Ebenso sollte er im xpse Foro im Thread der fehlenden Konstanten diese Konstante posten... |
| | | | |
| | Frank Abbing | Und immer den Link dazu angeben... |
| | | | |
| | | Wo muss denn die GL_BGRA reingepackt werden. Habe es mal in der gl.inc ergänzt im Ordner XPIA,/include wo die GL_RGBA liegt mit dem Wert : GL_BGRA EQU 32993. Es wird aber immer noch gemeckert. Wo muss dieses Variable denn noch eingetargen werden?
mfg |
| | | | |
| | | root:
iF
Du solltest langsam xpse und xpia auseinanderhalten können - das sind immer xpse-Meldungen und keine von XPIA.
jmp root |
| | | | |
| | | Mein Wunsch ist der, diese Variable GL_BGRA da anzulegen, wo sie hingehört, ohne das ich eine Ersatzzahl dafür suchen muss wenn ich xpse benutze.
mfg |
| | | | |
|
AnswerThemeninformationenDieses Thema hat 4 subscriber: |