Working on new dll to extend Blitz3d

Blitz3D Forums/Blitz3D Userlibs/Working on new dll to extend Blitz3d

Billp(Posted 2008) [#1]
Now that blitz3d is "finalized", I am writing a dll to extend blitz3d and have added the following commands

;Distance

BP_Distance2d#(x1#,y1#,x2#,y2#) : "Distance2D@16"
BP_Distance3d#(x1#,y1#,z1#,x2#,y2#,z2#) : "Distance3D@24"
BP_PointInRect#(x1#,y1#,rx#,ry#,rw#,rh#) : "PointInRect@24"

;Camera

BP_GetCamClsMode%(camera,index$) : "GetCamClsMode@8" ; index$ = "Color" Or "Zbuffer"
BP_GetCamClsColorR%(camera) : "GetCamClsColorR@4"
BP_GetCamClsColorG%(camera) : "GetCamClsColorG@4"
BP_GetCamClsColorB%(camera) : "GetCamClsColorB@4"
BP_GetCamProjMode%(camera) : "GetCamProjMode@4"
BP_GetCamRangeNear#(camera) : "GetCamRangeNear@4"
BP_GetCamRangeFar#(camera) : "GetCamRangeFar@4"
BP_GetCamZoom#(camera) : "GetCamZoom@4"
BP_GetCamViewPortX%(camera) : "GetCamViewPortX@4"
BP_GetCamViewPortY%(camera) : "GetCamViewPortY@4"
BP_GetCamViewPortW%(camera) : "GetCamViewPortW@4"
BP_GetCamViewPortH%(camera) : "GetCamViewPortH@4"
BP_GetCamFogMode%(camera) : "GetCamFogMode@4"
BP_GetCamFogNear#(camera) : "GetCamFogNear@4"
BP_GetCamFogFar#(camera) : "GetCamFogFar@4"
BP_GetCamFogColorR%(camera) : "GetCamFogColorR@4"
BP_GetCamFogColorG%(camera) : "GetCamFogColorG@4"
BP_GetCamFogColorB%(camera) : "GetCamFogColorB@4"

;Light

BP_SetLightType%(light,style) : "SetLightType@8"
BP_SetLightDiffuse%(light,red,green,blue,alpha#) : "SetLightDiffuse@20"
BP_SetLightSpecular%(light,red,green,blue,alpha#) : "SetLightSpecular@20"
BP_SetLightAmbient%(light,red,green,blue,alpha#) : "SetLightAmbient@20"
BP_SetLightMaxRange%(light,range#) : "SetLightMaxRange@8"
BP_GetLightType%(light) : "GetLightType@4"
BP_GetLightMaxRange#(light) : "GetLightMaxRange@4"
BP_GetLightRange#(light) : "GetLightRange@4"
BP_GetLightInner#(light) : "GetLightInner@4"
BP_GetLightOuter#(light) : "GetLightOuter@4"
BP_GetLightDiffuseR%(light) : "GetLightDiffuseR@4"
BP_GetLightDiffuseG%(light) : "GetLightDiffuseG@4"
BP_GetLightDiffuseB%(light) : "GetLightDiffuseB@4"
BP_GetLightDiffuseA#(light) : "GetLightDiffuseA@4"
BP_GetLightSpecularR%(light) : "GetLightSpecularR@4"
BP_GetLightSpecularG%(light) : "GetLightSpecularG@4"
BP_GetLightSpecularB%(light) : "GetLightSpecularB@4"
BP_GetLightSpecularA#(light) : "GetLightSpecularA@4"
BP_GetLightAmbientR%(light) : "GetLightAmbientR@4"
BP_GetLightAmbientG%(light) : "GetLightAmbientG@4"
BP_GetLightAmbientB%(light) : "GetLightAmbientB@4"
BP_GetLightAmbientA#(light) : "GetLightAmbientA@4"

;Entity

BP_GetEntityAlpha#(entity) : "GetEntityAlpha@4"
BP_GetEntityScaleX#(entity) : "GetEntityScaleX@4"
BP_GetEntityScaleY#(entity) : "GetEntityScaleY@4"
BP_GetEntityScaleZ#(entity) : "GetEntityScaleZ@4"
BP_GetEntityAutoNear#(entity) : "GetEntityAutoNear@4"
BP_GetEntityAutoFar#(entity) : "GetEntityAutoFar@4"
BP_GetEntityOrder%(entity) : "GetEntityOrder@4"
BP_GetNextEntity%(entity) : "GetNextEntity@4"
BP_GetLastEntity%(entity) : "GetLastEntity@4"
BP_GetEntityHidden%(entity) : "GetEntityHidden@4"
BP_GetEntityRadiusX#(entity) : "GetEntityRadiusX@4"
BP_GetEntityRadiusY#(entity) : "GetEntityRadiusY@4"
BP_GetEntityBoxX#(entity) : "GetEntityBoxX@4"
BP_GetEntityBoxY#(entity) : "GetEntityBoxY@4"
BP_GetEntityBoxZ#(entity) : "GetEntityBoxZ@4"
BP_GetEntityBoxW#(entity) : "GetEntityBoxW@4"
BP_GetEntityBoxH#(entity) : "GetEntityBoxH@4"
BP_GetEntityBoxD#(entity) : "GetEntityBoxD@4"
BP_GetEntityPickmode%(entity) : "GetEntityPickmode@4"
BP_GetEntityObscurer%(entity) : "GetEntityObscurer@4"
BP_GetEntityColorR%(entity) : "GetEntityColorR@4"
BP_GetEntityColorG%(entity) : "GetEntityColorG@4"
BP_GetEntityColorB%(entity) : "GetEntityColorB@4"
BP_GetEntityShine#(entity) : "GetEntityShine@4"
BP_GetEntityBlend%(entity) : "GetEntityBlend@4"
BP_GetEntityFX%(entity) : "GetEntityFX@4"

;Texture

BP_GetTextureBlend%(texture) : "GetTextureBlend@4"
BP_GetTextureCoords%(texture) : "GetTextureCoords@4"
BP_GetTextureScaleU#(texture) : "GetTextureScaleU@4"
BP_GetTextureScaleV#(texture) : "GetTextureScaleV@4"
BP_GetTexturePositionU#(texture) : "GetTexturePositionU@4"
BP_GetTexturePositionV#(texture) : "GetTexturePositionV@4"
BP_GetTextureRotation#(texture) : "GetTextureRotation@4"
BP_GetTextureFlags%(texbuffer) : "GetTextureFlags@4"
BP_GetBufferDepth%(texbuffer) : "GetBufferDepth@4"


;Brush

BP_GetBrushBlend%(brush) : "GetBrushBlend@4"
BP_GetBrushColorRGB%(brush) : "GetBrushColorRGB@4"
BP_GetBrushColorR%(brush) : "GetBrushColorR@4"
BP_GetBrushColorG%(brush) : "GetBrushColorG@4"
BP_GetBrushColorB%(brush) : "GetBrushColorB@4"
BP_GetBrushFX%(brush) : "GetBrushFX@4"
BP_GetBrushShininess#(brush) : "GetBrushShininess@4"
BP_GetBrushAlpha#(brush) : "GetBrushAlpha@4"

;Color Conversion

BP_GetIntRed%(IntColor) : "GetIntRed@4"
BP_GetIntGreen%(IntColor) : "GetIntGreen@4"
BP_GetIntBlue%(IntColor) : "GetIntBlue@4"
BP_GetIntAlpha%(IntColor) : "GetIntAlpha@4"
BP_GetRGBInt%(r,g,b) : "GetRGBInt@12"
BP_GetRGBAInt%(r,g,b,a) : "GetRGBAInt@16"

;Math

BP_CurveValue#(newvalue#,oldvalue#,increments#) : "CurveValue@12"
BP_WrapValue#(value#,lo#,hi#) : "WrapValue@12"
BP_ClampValue#(value#,lo#,hi#) : "ClampValue@12"
BP_Min#(value1#,value2#) : "Min@8"
BP_Max#(value1#,value2#) : "Max@8"

;Memory

BP_PeekByte%(adress) : "PeekByte@4"
BP_PeekShort%(adress) : "PeekShort@4"
BP_PeekInt%(adress) : "PeekInt@4"
BP_PeekFloat#(address) : "PeekFloat@4"

BP_PokeByte(adress,value%) : "PokeByte@8"
BP_PokeShort(address,value%) : "PokeShort@8"
BP_PokeInt(adress,value%) : "PokeInt@8"
BP_PokeFloat(address,value#) : "PokeFloat@8"

many of these were available with previous dll's created by other members of the community but have broken with subsequent updates etc. I would like to add a few functions to manipulate images/textures and specifically am trying to determine the offset to the actual pixel data (imagebuffer + 72 no longer is correct) and would appreciate any info I can get on this or any other internals.

I will make this dll available to the community at large upon completion.

thanks, Bill


John Blackledge(Posted 2008) [#2]
Nice. Always welcome.


SabataRH(Posted 2008) [#3]
Nice looking lib.


MadJack(Posted 2008) [#4]
Should be useful. Much appreciated.


puki(Posted 2008) [#5]
Any time scale on this?


Billp(Posted 2008) [#6]
What you see listed here is already complete, have contacted a few members who have done similiar work in the past re:offsets I am having trouble resolving and am awaiting their replies, next coupla days.


markcw(Posted 2008) [#7]
Hi Bill, will you be adding the source???


Billp(Posted 2008) [#8]
If not the source itself, I will include a list of all viable offesets I have been able to find so others can build upon them


markcw(Posted 2008) [#9]
specifically am trying to determine the offset to the actual pixel data (imagebuffer + 72 no longer is correct)


I don't understand. I have b3d 1.99 and the pixel data offset is still imagebuffer+72. This code works.

Edit: you need to include MemoryAccess.bb
;Image pixel data offset

Include "MemoryAccess.bb"

Graphics 640,480,0,2
SetBuffer BackBuffer()

image=LoadImage("test.bmp") ;8x8
bufferimage=ImageBuffer(image)

WritePixel 0,0,33,bufferimage
WritePixel 1,0,44,bufferimage
WritePixel 2,0,55,bufferimage

width=PeekI(bufferimage+92) ;bufferimage+28 for Blitz+ not tested !!
height=PeekI(bufferimage+96) ;bufferimage+32
videoaddress=PeekI(bufferimage+72) ;bufferimage+76

Dim pixel(8,8)

pixel(0,0)=PeekB(videoaddress)
pixel(1,0)=PeekB(videoaddress+4)
pixel(2,0)=PeekB(videoaddress+8)

Print "bufferimage="+bufferimage
Print "width="+width
Print "height="+height
Print "videoaddress="+videoaddress
Print "pixel(0,0)="+pixel(0,0)
Print "pixel(1,0)="+pixel(1,0)
Print "pixel(2,0)="+pixel(2,0)
Print ""

For offset=0 To 12-1
 byte=PeekB(videoaddress+offset)
 Print "address="+(videoaddress+offset)+" byte="+byte
Next
Print ""

For offset=0 To 12-1 Step 4
 rgba=PeekI(videoaddress+offset)
 PokeI(videoaddress+offset,$FF0000) ;Red
 Print "address="+(videoaddress+offset)+" rgba="+rgba
Next
Print ""

Print "Let's see what we poked in"
For offset=0 To 12-1 Step 4
 rgba=PeekI(videoaddress+offset)
 Print "address="+(videoaddress+offset)+" rgba="+Hex(rgba)
Next

DrawImage image,256,16

WaitKey()
End



Billp(Posted 2008) [#10]
I was working with a loaded texture ( not an image ) at the time and +72 is 0 until the buffer has been locked/unlocked (possibly updated with other actions, I don't know)