GLBasic forum

Other languages => GLBasic - de => Topic started by: Heiko on 2009-Mar-20

Title: Negatives Vorzeichen bAND Berechnungen...
Post by: Heiko on 2009-Mar-20
Ich hatte erst ein anderes Topic, aber ich hab die L?sung fast schon gefunden, darum editiere ich hier mal.
Und zwar hab ich eine Funktion, an welche auch negative Parameter ?bergeben werden sollen.
Ich seh nur grad nicht, warum das nicht geht.

Code (glbasic) Select
a=-5737356
b=24

Function bla: a, b
blub
EndFunction


der negative wert wird nicht ?bernommen, sondern 0.
habs mit % # probiert, geht nicht.
innerhalb der function kommen sonst bei float noch komischere werte raus.

wenns jemanden interessiert, hier der code.ein bb like shr.
Code (glbasic) Select
FUNCTION xShr:FA,FV

   LOCAL ICount%
   LOCAL IByte1%= bAND(FA/0x1000000, 0xFF)
   LOCAL IByte2%= bAND(FA/0x10000, 0xFF)
   LOCAL IByte3%= bAND(FA/0x100, 0xFF)
   LOCAL IByte4%= bAND(FA/0x1, 0xFF)
   LOCAL ITemp1%
   LOCAL ITemp2%
   LOCAL ITemp3%

   FOR ICount=1 TO FV
      ITemp1=bAND(IByte1, 0x1)*0x80
      ITemp2=bAND(IByte2, 0x1)*0x80
      ITemp3=bAND(IByte3, 0x1)*0x80
      IByte1=(IByte1/2)
      IByte2=(IByte2/2)+ITemp1
      IByte3=(IByte3/2)+ITemp2
      IByte4=(IByte4/2)+ITemp3
   NEXT


   RETURN  IByte1*0x1000000+IByte2*0x10000+IByte3*0x100+IByte4*0x1

ENDFUNCTION


Title: Re: Negatives Vorzeichen bei Funktionsparameter
Post by: Kitty Hello on 2009-Mar-20
Geht!
Nich mein Fehler.
Code (glbasic) Select

a=-5737356
b=24
bla(a,b)
bla(-a, -b)
KEYWAIT


FUNCTION bla: a, b

STDOUT "a:"+a+" b:"+b+"\n"

ENDFUNCTION


Warum machst Du als Parameter nicht % dran? Du willst ja Integer haben.
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Heiko on 2009-Mar-20
es h?ngt mit negativen zahlen und bAND zusammen, muss das wohl Inline machen...

Ich als c++ noob.

Zwei Fragen.
Eine Funktion mit standardparameter?bergabe nach inline weitergeben und noch ein anderer fehler.

hier der code, please help....

Code (glbasic) Select
FUNCTION xTestRendered: xPoint,yPoint,alphaLevel=0,loc=0

INLINE
int res;
sFI_TestType typ;
    FI_Test.Result=typ.Result;
    FI_Test.ProjectedX=typ.ProjectedX;
    FI_Test.ProjectedY=typ.ProjectedY;
    FI_Test.RectX=typ.RectX;
    FI_Test.RectY=typ.RectY;
    FI_Test.RectU=typ.RectU;
    FI_Test.RectV=typ.RectV;
    FI_Test.TextureX=typ.TextureX;
    FI_Test.TextureY=typ.TextureY;
    FI_Test.Texture=typ.Texture;
    FI_Test.Frame=typ.Frame;
    FI_Test.Reserved1=typ.Reserved1;
    if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && alphaLevel>0 && FI_Test.Texture!=0){
if ( (xReadPixel(FI_Test.TextureX, FI_Test.TextureY, xTextureBuffer(FI_Test.Texture,FI_Test.Frame))>>24)<alphaLevel ) {
FI_Test.Result = 0;
}
  }

return(FI_Test.Result);
   
ENDINLINE


ENDFUNCTION



bzwweise w?re mir das ergebnis eines signed right bitshiftung ala ASR ausreichend.
Meine werte stimmen nie.

ein einfaches A >> B; geht da ja nicht.
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Schranz0r on 2009-Mar-20
Inline kannst du "Bitshifting" machen ... versteh das Problem nicht...
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Heiko on 2009-Mar-20
Code (glbasic) Select
FUNCTION xTestRendered: xPoint,yPoint,alphaLevel=0,loc=0

INLINE
int res;
sFI_TestType typ;
    FI_Test.Result=typ.Result;
    FI_Test.ProjectedX=typ.ProjectedX;
    FI_Test.ProjectedY=typ.ProjectedY;
    FI_Test.RectX=typ.RectX;
    FI_Test.RectY=typ.RectY;
    FI_Test.RectU=typ.RectU;
    FI_Test.RectV=typ.RectV;
    FI_Test.TextureX=typ.TextureX;
    FI_Test.TextureY=typ.TextureY;
    FI_Test.Texture=typ.Texture;
    FI_Test.Frame=typ.Frame;
    FI_Test.Reserved1=typ.Reserved1;
    if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && (int)alphaLevel>0 && FI_Test.Texture!=0){
if ( (xReadPixel(FI_Test.TextureX, FI_Test.TextureY, xTextureBuffer(FI_Test.Texture,FI_Test.Frame))>>24)<alphaLevel ) {
FI_Test.Result = 0;
}
  }

return(FI_Test.Result);
   
ENDINLINE


ENDFUNCTION


kommt immer noch diese fehlermeldung:

IncrediBuild skips: test1.gbas, GetImageInfo.gbas, Read_Funktionen.gbas, xwrap.gbas,
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::xTestRendered(DGInt, DGInt, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: expected identifier before '(' token
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: expected `;' before '(' token

problem ist dass das SHR bei bb bei nem negativen decimalwert immer das erste bit der umgewandelten bin?rzahl als 1 kennzeichnet, dass muss das rausgefiltert werden, dessen stelle in 0 gewandelt, und hinterher 1 dazu und nen minus davor, wenn der wert negativ war.
so wurde mir das erkl?rt.

oder versuch einfach bei fastimage das TestRendered nachzubauen.
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Schranz0r on 2009-Mar-20
wo hast du FI_Test deklariert?

EDIT:

if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && (int)alphaLevel>0 && FI_Test.Texture!=0){


muss sein:

if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1) && (int)alphaLevel>0 && !FI_Test.Texture){


Pass blo? bei C++ auf!
Mach bitte bitte erstmal das Grundlegende durch, bevor du hier wild Rumjonglierst.
Wird sehr schnell frust draus!
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Heiko on 2009-Mar-20
weiter oben nat?rlich:

Code (glbasic) Select
struct sFI_TestType{
   int Result,ProjectedX,ProjectedY;
   int RectX,RectY;
   float RectU,RectV;
   int TextureX,TextureY,Texture;
   int Frame,Reserved1;
};


und den normalen type nat?rlich auch
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Schranz0r on 2009-Mar-20
post dr?ber!
Title: Re: Negatives Vorzeichen bAND Berechnungen...
Post by: Heiko on 2009-Mar-20
habs ge?ndert, kommt nun
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::xTestRendered(DGInt, DGInt, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: non-lvalue in assignment
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1368: error: invalid operands of types `DGInt' and `int' to binary `operator>>'

ich w?rd kein c++ machen wenns nicht sein muss.
das testrendered wenn alphalevel 0 ist, pr?ft auf kontakt mit dem image bzw. der texture, wenn man alphalevel aber als 128 angibt, dann gibts erst kontakt wenn der tats?chlich sichtbare bereich ber?hrt wird.
das normale hab ich seit tagen, nur an dem alphalevel mist sitz ich die ganze zeit, wenn das nicht w?re, h?tt ich Fastimage sicher schon allein fertig bekommen, der rest ist nicht mehr schwer, will aber erst das fertig machen.
und wu?te halt erst nicht, da? das bitshifting bei bb halt anders ist.
glb kommt da standard nicht mit negativen werten klar.

edit: das ! warum kommt das nun woanders hin, bei dem FI c++ header ists da wo es stand, grins.
       auch ne art c++ zu lernen, oder?lol