UnderwareDESIGN

PlayBASIC => Show Case => Topic started by: baggey on May 29, 2018, 12:31:17 PM

Title: Direct 2D Buffer Writting at 256 x 192
Post by: baggey on May 29, 2018, 12:31:17 PM
Finally a Respectable 60 FPS a second! That's 49152 pixels Being Drawn in realtime.

       Now can we gain anymore from Pallette Mapping!??!

Example Code:
[pbcode]
PROJECT : 2dDirectBufferWriting
; CREATED : 29/05/2018
; EDITED  : 29/05/2018
; Made By Lee Chatt @ "DWARFWARE"
; ---------------------------------------------------------------------

openscreen 800,600,16,2
 Cls RGB(0,0,0)
 
 scalex=2.8
 scaley=2.6
 width=256
 height=192
 CreateFXImageEx 1,width,height,16    

 do
 
 Xpos=13
 Ypos=10
 lockbuffer
 rendertoscreen
 fillimage(1)
 DrawrotatedImage 1,Xpos,Ypos,0,scalex,scaley,1,1,true
   
 xx=xpos+30
 yy=ypos+15
   
 Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
 Text Xx,Yy+20,"  Pitch:"+Str$(GetImagePitch(1))
 Text Xx,Yy+40,"  Depth:"+Str$(GetImageDepth(1))
 text xx,yy+60,"  Fps:" +str$( FPS())
   
 unlockbuffer
 Sync
 loop
 
 WaitKey
 
 
 
 
 
Function FillImage(ThisImage)
 
 RenderToImage ThisImage
 
 LockBuffer
 
 Address     =GetImagePtr(ThisImage)
 Pitch          =GetImagePitch(ThisIMage)
 Depth          =GetImageDepth(ThisImage)
 
 imgheight=getimageheight(thisimage)
 imgwidth=getimagewidth(thisimage)
 
 For ylp=0 To imgheight-1
   
    For xlp=0 To imgwidth-1
   
      pokeword Address+(ylp*pitch)+(xlp*2), rgb(rnd(255),rnd(255),rnd(255))
       
    Next
   
 Next
 UnLockBuffer
 RenderToScreen
 
EndFunction
 
[/pbcode]

Please don't point me anywhere! Im on a very steep learning curve and miss the obvious! Im struggling as it is!


There is slight tearing on the edge's thou.


Been playing a little more tonight.

Managed to get another 2 FPS from this version! Thats 62 FPS 49152 pixels on the fly.

Example Code:
[pbcode]
; PROJECT : 2dDirectBufferWriting2
; CREATED : 29/05/2018
; EDITED  : 29/05/2018
; Made By Lee Chatt @ "DWARFWARE"
; ---------------------------------------------------------------------

openscreen 800,600,16,2
 Cls RGB(0,0,0)
 
 scalex=2.8
 scaley=2.6
 width=256
 height=192
 CreateFXImageEx 1,width,height,16    

 do
 
 Xpos=13
 Ypos=10
 lockbuffer
 
 fillimage(1)
 
             Scalex=float (800/getimageWidth(1))
           Scaley=float (600/getimageHeight(1))
            
            lockbuffer
            
            drawrotatedimage 1,xpos,ypos,0,scalex,scaley,0,0,false
                
 xx=xpos+30
 yy=ypos+15
   
 Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
 Text Xx,Yy+20,"  Pitch:"+Str$(GetImagePitch(1))
 Text Xx,Yy+40,"  Depth:"+Str$(GetImageDepth(1))
 text xx,yy+60,"  Fps:" +str$( FPS())
   
 unlockbuffer
 Sync
 loop
 
 WaitKey
 
   
Function FillImage(ThisImage)
 
 RenderToImage ThisImage
 
 LockBuffer
 
 Address     =GetImagePtr(ThisImage)
 Pitch          =GetImagePitch(ThisIMage)
 Depth          =GetImageDepth(ThisImage)
 
 imgheight=getimageheight(thisimage)
 imgwidth=getimagewidth(thisimage)
 
 For ylp=0 To imgheight-1
   
    For xlp=0 To imgwidth-1
   
      pokeword Address+(ylp*pitch)+(xlp*2), rgb(rnd(255),rnd(255),rnd(255))
       
    Next
   
 Next
 UnLockBuffer
 RenderToScreen
 
EndFunction
[/pbcode]  

Still tearing on the edges thou?

FINALLY Tonight ive added a ZX Spectrum ink index and got 94 FPS! on the Fly 49152 pixels! However.
Distortion on the edges and colour is off now!?

I Know it's something to do with rgb to index??? and surfaces with different pitches! But my head hurts now!

All i need to todo now is tidy up the edges sort colour and revisit My Emulator.

94 FPS Thou!  :o

Any MODS Greatly appriciated.

Example Code:
[pbcode]
; PROJECT : 2dDirectBufferWriting2_PLUS_inkindex
; CREATED : 29/05/2018
; EDITED  : 29/05/2018
; ---------------------------------------------------------------------

; Made By Lee Chatt @ "DWARFWARE"
; ---------------------------------------------------------------------

openscreen 800,600,16,2
 Cls RGB(0,0,0)
 
 dim inkindex(15)
 
 scalex=2.8
 scaley=2.6
 width=256
 height=192
 CreateFXImageEx 1,width,height,16    

InitColorArrays()

 do
 
 Xpos=13
 Ypos=10
 lockbuffer
 
 fillimage(1)
 
             Scalex=float (800/getimageWidth(1))
           Scaley=float (600/getimageHeight(1))
           
           lockbuffer
           
           drawrotatedimage 1,xpos,ypos,0,scalex,scaley,0,0,false
               
 xx=xpos+30
 yy=ypos+15
   
 Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
 Text Xx,Yy+20,"  Pitch:"+Str$(GetImagePitch(1))
 Text Xx,Yy+40,"  Depth:"+Str$(GetImageDepth(1))
 text xx,yy+60,"  Fps:" +str$( FPS())
   
 unlockbuffer
 Sync
 loop
 
 WaitKey
 
   
Function FillImage(ThisImage)
 
 RenderToImage ThisImage
 
 LockBuffer
 
 Address     =GetImagePtr(ThisImage)
 Pitch          =GetImagePitch(ThisIMage)
 Depth          =GetImageDepth(ThisImage)
 
 imgheight=getimageheight(thisimage)
 imgwidth=getimagewidth(thisimage)
 
 For ylp=0 To imgheight-1
   
    For xlp=0 To imgwidth-1
   
      pokeword Address+(ylp*pitch)+(xlp*2),inkindex(rnd(15))  
         
    Next
   
 Next
 UnLockBuffer
 RenderToScreen
 
EndFunction

PSub InitColorArrays()
   
// Ive set the colors up here in RGB but using the palletindex(0)
// We have standard colors so we can make our own pallets!
// select color

// Standard Spectrum colors

   // Normal
      inkindex(0) = rgb(0, 0, 0); Black
      inkindex(1) = rgb(0,0,192); Blue
      inkindex(2) = rgb(192,0,0); Red   
      inkindex(3) = rgb(192,0,192); Magenta
      inkindex(4) = rgb(0,192,0); Green
      inkindex(5) = rgb(0,192,192); Cyan
              inkindex(6) = rgb(192,192,0); Yellow
      inkindex(7) = rgb(192,192,192); White

   // Bright
      inkindex(8)  = rgb(0, 0, 0); Black
      inkindex(9)  = rgb(0,0,255); Blue
      inkindex(10) = rgb(255,0,0); Red   
      inkindex(11) = rgb(255,0,255); Magenta
      inkindex(12) = rgb(0,255,0); Green
      inkindex(13) = rgb(0,255,255); Cyan
              inkindex(14) = rgb(255,255,0); Yellow
      inkindex(15) = rgb(255,255,255); White

EndpSub

[/pbcode]

Now all i need is to be able to use that Dll tool thingy! Maybe this will go faster?? ::)

Kind Regards Baggey
Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: baggey on May 31, 2018, 02:07:41 PM
So Tonight been reading Playbasic Reference Help etc and managed to sort out the colour problem!

Still running at a respectable 94 FPS Here!

Example Code:
[pbcode]
; ---------------------------------------------------------------------
; PROJECT : 2dDirectBufferWriting2_PLUS_inkindex
; CREATED : 31/05/2018
; EDITED  : 31/05/2018
; ---------------------------------------------------------------------

; Made By Lee Chatt @ "DWARFWARE"
; ---------------------------------------------------------------------

openscreen 800,600,16,2
 Cls RGB(0,0,0)
 
 dim inkindex(15)
 
 scalex=2.8
 scaley=2.6
 width=256
 height=192
 CreateFXImageEx 1,width,height,16    

InitColorArrays()

 do
 
 Xpos=13
 Ypos=10
 lockbuffer
 
 fillimage(1)
 
             Scalex=float (800/getimageWidth(1))
           Scaley=float (600/getimageHeight(1))
           
           lockbuffer
           
           drawrotatedimage 1,xpos,ypos,0,scalex,scaley,0,0,false
               
 xx=xpos+30
 yy=ypos+15
   
 Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
 Text Xx,Yy+20,"  Pitch:"+Str$(GetImagePitch(1))
 Text Xx,Yy+40,"  Depth:"+Str$(GetImageDepth(1))
 text xx,yy+60,"  Fps:" +str$( FPS())
   
 unlockbuffer
 Sync
 loop
 
 WaitKey
 
   
Function FillImage(ThisImage)
 
 RenderToImage ThisImage
 
 LockBuffer
 
 Address     =GetImagePtr(ThisImage)
 Pitch          =GetImagePitch(ThisIMage)
 Depth          =GetImageDepth(ThisImage)
 
 imgheight=getimageheight(thisimage)
 imgwidth=getimagewidth(thisimage)
 
 For ylp=0 To imgheight-1
   
    For xlp=0 To imgwidth-1
   
      pokeword Address+(ylp*pitch)+(xlp*2),inkindex(rnd(15))  
         
    Next
   
 Next
 UnLockBuffer
 RenderToScreen
 
EndFunction

PSub InitColorArrays()
 
// Ive set the colors up here in RGB but using the palletindex(0)
// We have standard colors so we can make our own pallets!
// select color

// Standard Spectrum colors

  // Normal
     inkindex(0) = RGB24ToRGB16(rgb(0, 0, 0)); Black
     inkindex(1) = RGB24ToRGB16(rgb(0,0,192)); Blue
     inkindex(2) = RGB24ToRGB16(rgb(192,0,0)); Red  
      inkindex(3) =RGB24ToRGB16(rgb(192,0,192)); Magenta
      inkindex(4) = RGB24ToRGB16(rgb(0,192,0)); Green
     inkindex(5) = RGB24ToRGB16(rgb(0,192,192)); Cyan
              inkindex(6) = RGB24ToRGB16(rgb(192,192,0)); Yellow
     inkindex(7) = RGB24ToRGB16(rgb(192,192,192)); White

  // Bright
      inkindex(8)  =RGB24ToRGB16( rgb(0, 0, 0)); Black
     inkindex(9)  = RGB24ToRGB16(rgb(0,0,255)); Blue
     inkindex(10) = RGB24ToRGB16(rgb(255,0,0)); Red  
      inkindex(11) = RGB24ToRGB16(rgb(255,0,255)); Magenta
      inkindex(12) = RGB24ToRGB16(rgb(0,255,0)); Green
     inkindex(13) = RGB24ToRGB16(rgb(0,255,255)); Cyan
              inkindex(14) = RGB24ToRGB16(rgb(255,255,0)); Yellow
     inkindex(15) = RGB24ToRGB16(rgb(255,255,255)); White

EndpSub

 
[/pbcode]

Hit a wall with the distortion / Tearing of image edges! I have a gut feeling it's something to do with scalling being a Floating point and not a nice round interger?

Anybody got the RGB pallette values for the C64? If not ill do a search on another night.
Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: kevin on June 01, 2018, 11:48:30 AM

[pbcode]


openscreen 800,600,16,2
  Cls RGB(0,0,0)
 
  dim inkindex(15)
 
  scalex=2.8
  scaley=2.6
  width=256
  height=192
  CreateFXImageEx 1,width,height,16     

InitColorArrays()

  do
 
  Xpos=13
  Ypos=10
          lockbuffer
 
                 Name$="fillimageV"+digits$(FillImageIndex+1,3)
                 if FunctionExist(Name$)
                    callfunction Name$,1
                 endif
     
              Scalex=float (800/getimageWidth(1))
            Scaley=float (600/getimageHeight(1))
           
           
               drawrotatedimage 1,xpos,ypos,0,scalex,scaley,0,0,false
                 
             unlockbuffer

  xx=xpos+30
  yy=ypos+15
     
  Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
  Text Xx,Yy+20,"    Pitch:"+Str$(GetImagePitch(1))
  Text Xx,Yy+40,"    Depth:"+Str$(GetImageDepth(1))
  text xx,yy+60,"      Fps:" +str$( FPS())
  text xx,yy+80,"   Method:" +str$( FillImageIndex)

   
      
     if rightmousebutton()
            FillImageIndex=(FillImageIndex+1)&3
            flushmouse     
      endif
     
  Sync
  loop
 
  WaitKey
 
   
Function FillImageV001(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Address     =GetImagePtr(ThisImage)
  Pitch          =GetImagePitch(ThisIMage)
  Depth          =GetImageDepth(ThisImage)
 
  imgheight=getimageheight(thisimage)
  imgwidth=getimagewidth(thisimage)
 
  For ylp=0 To imgheight-1
   
     For xlp=0 To imgwidth-1
     
       pokeword Address+(ylp*pitch)+(xlp*2),inkindex(rnd(15)) 
           
     Next
   
  Next
  UnLockBuffer
  RenderToScreen
 
EndFunction




Function FillImageV002(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Address     =GetImagePtr(ThisImage)
  Pitch          =GetImagePitch(ThisIMage)
  Depth          =GetImageDepth(ThisImage)
 
  imgheight=getimageheight(thisimage)
  imgwidth=getimagewidth(thisimage)
 
  For ylp=0 To imgheight-1
   
    RowAddress = Address+ ylp*Pitch
     For xlp=0 To imgwidth-1
          pokeword RowAddress+(xlp*2),inkindex(rnd(15)) 
     Next
   
  Next
  UnLockBuffer
  RenderToScreen
 
EndFunction
   



Function FillImageV003(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Address     =GetImagePtr(ThisImage)
  Pitch          =GetImagePitch(ThisIMage)
  Depth          =GetImageDepth(ThisImage)
 
  imgheight=getimageheight(thisimage)
  imgwidth=getimagewidth(thisimage)
 
  For ylp=0 To imgheight-1
   
    RowAddress = Address+ ylp*Pitch
    EndRowAddress = RowAddress + (imgwidth-1) *2
    For PixelAddress=RowAddress To EndRowAddress step 2
             pokeword PixelAddress,inkindex(rnd(15)) 
     Next
   
  Next
  UnLockBuffer
  RenderToScreen
 
EndFunction





Function FillImageV004(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Address     =GetImagePtr(ThisImage)
  Pitch          =GetImagePitch(ThisIMage)
  Depth          =GetImageDepth(ThisImage)
 
  imgheight=getimageheight(thisimage)
  imgwidth=getimagewidth(thisimage)
 
  For ylp=0 To imgheight-1
   
    PixelAddress = Address+ ylp*Pitch
   
      pokeword PixelAddress,inkindex(rnd(15))
      pokeword PixelAddress+2,inkindex(rnd(15))
pokeword PixelAddress+4,inkindex(rnd(15))
pokeword PixelAddress+6,inkindex(rnd(15))
pokeword PixelAddress+8,inkindex(rnd(15))
pokeword PixelAddress+10,inkindex(rnd(15))
pokeword PixelAddress+12,inkindex(rnd(15))
pokeword PixelAddress+14,inkindex(rnd(15))
pokeword PixelAddress+16,inkindex(rnd(15))
pokeword PixelAddress+18,inkindex(rnd(15))
pokeword PixelAddress+20,inkindex(rnd(15))
pokeword PixelAddress+22,inkindex(rnd(15))
pokeword PixelAddress+24,inkindex(rnd(15))
pokeword PixelAddress+26,inkindex(rnd(15))
pokeword PixelAddress+28,inkindex(rnd(15))
pokeword PixelAddress+30,inkindex(rnd(15))
pokeword PixelAddress+32,inkindex(rnd(15))
pokeword PixelAddress+34,inkindex(rnd(15))
pokeword PixelAddress+36,inkindex(rnd(15))
pokeword PixelAddress+38,inkindex(rnd(15))
pokeword PixelAddress+40,inkindex(rnd(15))
pokeword PixelAddress+42,inkindex(rnd(15))
pokeword PixelAddress+44,inkindex(rnd(15))
pokeword PixelAddress+46,inkindex(rnd(15))
pokeword PixelAddress+48,inkindex(rnd(15))
pokeword PixelAddress+50,inkindex(rnd(15))
pokeword PixelAddress+52,inkindex(rnd(15))
pokeword PixelAddress+54,inkindex(rnd(15))
pokeword PixelAddress+56,inkindex(rnd(15))
pokeword PixelAddress+58,inkindex(rnd(15))
pokeword PixelAddress+60,inkindex(rnd(15))
pokeword PixelAddress+62,inkindex(rnd(15))
pokeword PixelAddress+64,inkindex(rnd(15))
pokeword PixelAddress+66,inkindex(rnd(15))
pokeword PixelAddress+68,inkindex(rnd(15))
pokeword PixelAddress+70,inkindex(rnd(15))
pokeword PixelAddress+72,inkindex(rnd(15))
pokeword PixelAddress+74,inkindex(rnd(15))
pokeword PixelAddress+76,inkindex(rnd(15))
pokeword PixelAddress+78,inkindex(rnd(15))
pokeword PixelAddress+80,inkindex(rnd(15))
pokeword PixelAddress+82,inkindex(rnd(15))
pokeword PixelAddress+84,inkindex(rnd(15))
pokeword PixelAddress+86,inkindex(rnd(15))
pokeword PixelAddress+88,inkindex(rnd(15))
pokeword PixelAddress+90,inkindex(rnd(15))
pokeword PixelAddress+92,inkindex(rnd(15))
pokeword PixelAddress+94,inkindex(rnd(15))
pokeword PixelAddress+96,inkindex(rnd(15))
pokeword PixelAddress+98,inkindex(rnd(15))
pokeword PixelAddress+100,inkindex(rnd(15))
pokeword PixelAddress+102,inkindex(rnd(15))
pokeword PixelAddress+104,inkindex(rnd(15))
pokeword PixelAddress+106,inkindex(rnd(15))
pokeword PixelAddress+108,inkindex(rnd(15))
pokeword PixelAddress+110,inkindex(rnd(15))
pokeword PixelAddress+112,inkindex(rnd(15))
pokeword PixelAddress+114,inkindex(rnd(15))
pokeword PixelAddress+116,inkindex(rnd(15))
pokeword PixelAddress+118,inkindex(rnd(15))
pokeword PixelAddress+120,inkindex(rnd(15))
pokeword PixelAddress+122,inkindex(rnd(15))
pokeword PixelAddress+124,inkindex(rnd(15))
pokeword PixelAddress+126,inkindex(rnd(15))
pokeword PixelAddress+128,inkindex(rnd(15))
pokeword PixelAddress+130,inkindex(rnd(15))
pokeword PixelAddress+132,inkindex(rnd(15))
pokeword PixelAddress+134,inkindex(rnd(15))
pokeword PixelAddress+136,inkindex(rnd(15))
pokeword PixelAddress+138,inkindex(rnd(15))
pokeword PixelAddress+140,inkindex(rnd(15))
pokeword PixelAddress+142,inkindex(rnd(15))
pokeword PixelAddress+144,inkindex(rnd(15))
pokeword PixelAddress+146,inkindex(rnd(15))
pokeword PixelAddress+148,inkindex(rnd(15))
pokeword PixelAddress+150,inkindex(rnd(15))
pokeword PixelAddress+152,inkindex(rnd(15))
pokeword PixelAddress+154,inkindex(rnd(15))
pokeword PixelAddress+156,inkindex(rnd(15))
pokeword PixelAddress+158,inkindex(rnd(15))
pokeword PixelAddress+160,inkindex(rnd(15))
pokeword PixelAddress+162,inkindex(rnd(15))
pokeword PixelAddress+164,inkindex(rnd(15))
pokeword PixelAddress+166,inkindex(rnd(15))
pokeword PixelAddress+168,inkindex(rnd(15))
pokeword PixelAddress+170,inkindex(rnd(15))
pokeword PixelAddress+172,inkindex(rnd(15))
pokeword PixelAddress+174,inkindex(rnd(15))
pokeword PixelAddress+176,inkindex(rnd(15))
pokeword PixelAddress+178,inkindex(rnd(15))
pokeword PixelAddress+180,inkindex(rnd(15))
pokeword PixelAddress+182,inkindex(rnd(15))
pokeword PixelAddress+184,inkindex(rnd(15))
pokeword PixelAddress+186,inkindex(rnd(15))
pokeword PixelAddress+188,inkindex(rnd(15))
pokeword PixelAddress+190,inkindex(rnd(15))
pokeword PixelAddress+192,inkindex(rnd(15))
pokeword PixelAddress+194,inkindex(rnd(15))
pokeword PixelAddress+196,inkindex(rnd(15))
pokeword PixelAddress+198,inkindex(rnd(15))
pokeword PixelAddress+200,inkindex(rnd(15))
pokeword PixelAddress+202,inkindex(rnd(15))
pokeword PixelAddress+204,inkindex(rnd(15))
pokeword PixelAddress+206,inkindex(rnd(15))
pokeword PixelAddress+208,inkindex(rnd(15))
pokeword PixelAddress+210,inkindex(rnd(15))
pokeword PixelAddress+212,inkindex(rnd(15))
pokeword PixelAddress+214,inkindex(rnd(15))
pokeword PixelAddress+216,inkindex(rnd(15))
pokeword PixelAddress+218,inkindex(rnd(15))
pokeword PixelAddress+220,inkindex(rnd(15))
pokeword PixelAddress+222,inkindex(rnd(15))
pokeword PixelAddress+224,inkindex(rnd(15))
pokeword PixelAddress+226,inkindex(rnd(15))
pokeword PixelAddress+228,inkindex(rnd(15))
pokeword PixelAddress+230,inkindex(rnd(15))
pokeword PixelAddress+232,inkindex(rnd(15))
pokeword PixelAddress+234,inkindex(rnd(15))
pokeword PixelAddress+236,inkindex(rnd(15))
pokeword PixelAddress+238,inkindex(rnd(15))
pokeword PixelAddress+240,inkindex(rnd(15))
pokeword PixelAddress+242,inkindex(rnd(15))
pokeword PixelAddress+244,inkindex(rnd(15))
pokeword PixelAddress+246,inkindex(rnd(15))
pokeword PixelAddress+248,inkindex(rnd(15))
pokeword PixelAddress+250,inkindex(rnd(15))
pokeword PixelAddress+252,inkindex(rnd(15))
pokeword PixelAddress+254,inkindex(rnd(15))
pokeword PixelAddress+256,inkindex(rnd(15))
pokeword PixelAddress+258,inkindex(rnd(15))
pokeword PixelAddress+260,inkindex(rnd(15))
pokeword PixelAddress+262,inkindex(rnd(15))
pokeword PixelAddress+264,inkindex(rnd(15))
pokeword PixelAddress+266,inkindex(rnd(15))
pokeword PixelAddress+268,inkindex(rnd(15))
pokeword PixelAddress+270,inkindex(rnd(15))
pokeword PixelAddress+272,inkindex(rnd(15))
pokeword PixelAddress+274,inkindex(rnd(15))
pokeword PixelAddress+276,inkindex(rnd(15))
pokeword PixelAddress+278,inkindex(rnd(15))
pokeword PixelAddress+280,inkindex(rnd(15))
pokeword PixelAddress+282,inkindex(rnd(15))
pokeword PixelAddress+284,inkindex(rnd(15))
pokeword PixelAddress+286,inkindex(rnd(15))
pokeword PixelAddress+288,inkindex(rnd(15))
pokeword PixelAddress+290,inkindex(rnd(15))
pokeword PixelAddress+292,inkindex(rnd(15))
pokeword PixelAddress+294,inkindex(rnd(15))
pokeword PixelAddress+296,inkindex(rnd(15))
pokeword PixelAddress+298,inkindex(rnd(15))
pokeword PixelAddress+300,inkindex(rnd(15))
pokeword PixelAddress+302,inkindex(rnd(15))
pokeword PixelAddress+304,inkindex(rnd(15))
pokeword PixelAddress+306,inkindex(rnd(15))
pokeword PixelAddress+308,inkindex(rnd(15))
pokeword PixelAddress+310,inkindex(rnd(15))
pokeword PixelAddress+312,inkindex(rnd(15))
pokeword PixelAddress+314,inkindex(rnd(15))
pokeword PixelAddress+316,inkindex(rnd(15))
pokeword PixelAddress+318,inkindex(rnd(15))
pokeword PixelAddress+320,inkindex(rnd(15))
pokeword PixelAddress+322,inkindex(rnd(15))
pokeword PixelAddress+324,inkindex(rnd(15))
pokeword PixelAddress+326,inkindex(rnd(15))
pokeword PixelAddress+328,inkindex(rnd(15))
pokeword PixelAddress+330,inkindex(rnd(15))
pokeword PixelAddress+332,inkindex(rnd(15))
pokeword PixelAddress+334,inkindex(rnd(15))
pokeword PixelAddress+336,inkindex(rnd(15))
pokeword PixelAddress+338,inkindex(rnd(15))
pokeword PixelAddress+340,inkindex(rnd(15))
pokeword PixelAddress+342,inkindex(rnd(15))
pokeword PixelAddress+344,inkindex(rnd(15))
pokeword PixelAddress+346,inkindex(rnd(15))
pokeword PixelAddress+348,inkindex(rnd(15))
pokeword PixelAddress+350,inkindex(rnd(15))
pokeword PixelAddress+352,inkindex(rnd(15))
pokeword PixelAddress+354,inkindex(rnd(15))
pokeword PixelAddress+356,inkindex(rnd(15))
pokeword PixelAddress+358,inkindex(rnd(15))
pokeword PixelAddress+360,inkindex(rnd(15))
pokeword PixelAddress+362,inkindex(rnd(15))
pokeword PixelAddress+364,inkindex(rnd(15))
pokeword PixelAddress+366,inkindex(rnd(15))
pokeword PixelAddress+368,inkindex(rnd(15))
pokeword PixelAddress+370,inkindex(rnd(15))
pokeword PixelAddress+372,inkindex(rnd(15))
pokeword PixelAddress+374,inkindex(rnd(15))
pokeword PixelAddress+376,inkindex(rnd(15))
pokeword PixelAddress+378,inkindex(rnd(15))
pokeword PixelAddress+380,inkindex(rnd(15))
pokeword PixelAddress+382,inkindex(rnd(15))
pokeword PixelAddress+384,inkindex(rnd(15))
pokeword PixelAddress+386,inkindex(rnd(15))
pokeword PixelAddress+388,inkindex(rnd(15))
pokeword PixelAddress+390,inkindex(rnd(15))
pokeword PixelAddress+392,inkindex(rnd(15))
pokeword PixelAddress+394,inkindex(rnd(15))
pokeword PixelAddress+396,inkindex(rnd(15))
pokeword PixelAddress+398,inkindex(rnd(15))
pokeword PixelAddress+400,inkindex(rnd(15))
pokeword PixelAddress+402,inkindex(rnd(15))
pokeword PixelAddress+404,inkindex(rnd(15))
pokeword PixelAddress+406,inkindex(rnd(15))
pokeword PixelAddress+408,inkindex(rnd(15))
pokeword PixelAddress+410,inkindex(rnd(15))
pokeword PixelAddress+412,inkindex(rnd(15))
pokeword PixelAddress+414,inkindex(rnd(15))
pokeword PixelAddress+416,inkindex(rnd(15))
pokeword PixelAddress+418,inkindex(rnd(15))
pokeword PixelAddress+420,inkindex(rnd(15))
pokeword PixelAddress+422,inkindex(rnd(15))
pokeword PixelAddress+424,inkindex(rnd(15))
pokeword PixelAddress+426,inkindex(rnd(15))
pokeword PixelAddress+428,inkindex(rnd(15))
pokeword PixelAddress+430,inkindex(rnd(15))
pokeword PixelAddress+432,inkindex(rnd(15))
pokeword PixelAddress+434,inkindex(rnd(15))
pokeword PixelAddress+436,inkindex(rnd(15))
pokeword PixelAddress+438,inkindex(rnd(15))
pokeword PixelAddress+440,inkindex(rnd(15))
pokeword PixelAddress+442,inkindex(rnd(15))
pokeword PixelAddress+444,inkindex(rnd(15))
pokeword PixelAddress+446,inkindex(rnd(15))
pokeword PixelAddress+448,inkindex(rnd(15))
pokeword PixelAddress+450,inkindex(rnd(15))
pokeword PixelAddress+452,inkindex(rnd(15))
pokeword PixelAddress+454,inkindex(rnd(15))
pokeword PixelAddress+456,inkindex(rnd(15))
pokeword PixelAddress+458,inkindex(rnd(15))
pokeword PixelAddress+460,inkindex(rnd(15))
pokeword PixelAddress+462,inkindex(rnd(15))
pokeword PixelAddress+464,inkindex(rnd(15))
pokeword PixelAddress+466,inkindex(rnd(15))
pokeword PixelAddress+468,inkindex(rnd(15))
pokeword PixelAddress+470,inkindex(rnd(15))
pokeword PixelAddress+472,inkindex(rnd(15))
pokeword PixelAddress+474,inkindex(rnd(15))
pokeword PixelAddress+476,inkindex(rnd(15))
pokeword PixelAddress+478,inkindex(rnd(15))
pokeword PixelAddress+480,inkindex(rnd(15))
pokeword PixelAddress+482,inkindex(rnd(15))
pokeword PixelAddress+484,inkindex(rnd(15))
pokeword PixelAddress+486,inkindex(rnd(15))
pokeword PixelAddress+488,inkindex(rnd(15))
pokeword PixelAddress+490,inkindex(rnd(15))
pokeword PixelAddress+492,inkindex(rnd(15))
pokeword PixelAddress+494,inkindex(rnd(15))
pokeword PixelAddress+496,inkindex(rnd(15))
pokeword PixelAddress+498,inkindex(rnd(15))
pokeword PixelAddress+500,inkindex(rnd(15))
pokeword PixelAddress+502,inkindex(rnd(15))
pokeword PixelAddress+504,inkindex(rnd(15))
pokeword PixelAddress+506,inkindex(rnd(15))
pokeword PixelAddress+508,inkindex(rnd(15))
;pokeword PixelAddress+510,inkindex(rnd(15))
      
      
   
  Next
  UnLockBuffer
  RenderToScreen
 
EndFunction
      
         
         
         
         
         
         
         
         
PSub InitColorArrays()
   
// Ive set the colors up here in RGB but using the palletindex(0)
// We have standard colors so we can make our own pallets!
// select color

// Standard Spectrum colors

   // Normal
      inkindex(0) = RGB24ToRGB16(rgb(0, 0, 0)); Black
      inkindex(1) = RGB24ToRGB16(rgb(0,0,192)); Blue
      inkindex(2) = RGB24ToRGB16(rgb(192,0,0)); Red   
       inkindex(3) =RGB24ToRGB16(rgb(192,0,192)); Magenta
       inkindex(4) = RGB24ToRGB16(rgb(0,192,0)); Green
      inkindex(5) = RGB24ToRGB16(rgb(0,192,192)); Cyan
               inkindex(6) = RGB24ToRGB16(rgb(192,192,0)); Yellow
      inkindex(7) = RGB24ToRGB16(rgb(192,192,192)); White

   // Bright
       inkindex(8)  =RGB24ToRGB16( rgb(0, 0, 0)); Black
      inkindex(9)  = RGB24ToRGB16(rgb(0,0,255)); Blue
      inkindex(10) = RGB24ToRGB16(rgb(255,0,0)); Red   
       inkindex(11) = RGB24ToRGB16(rgb(255,0,255)); Magenta
       inkindex(12) = RGB24ToRGB16(rgb(0,255,0)); Green
      inkindex(13) = RGB24ToRGB16(rgb(0,255,255)); Cyan
               inkindex(14) = RGB24ToRGB16(rgb(255,255,0)); Yellow
      inkindex(15) = RGB24ToRGB16(rgb(255,255,255)); White

EndpSub





[/pbcode]


[plink]C64 colour palette (http://www.lemon64.com/forum/viewtopic.php?t=8718&sid=7c3f4b874210de2623abc2ebaa348847)[/plink]

[pbcode]

$RGBCOLOR0=000000
$RGBCOLOR1=ffffff
$RGBCOLOR2=882000
$RGBCOLOR3=68d0a8
$RGBCOLOR4=a838a0
$RGBCOLOR5=50b818
$RGBCOLOR6=181090
$RGBCOLOR7=f0e858
$RGBCOLOR8=a04800
$RGBCOLOR9=472b1b
$RGBCOLOR10=c87870
$RGBCOLOR11=484848
$RGBCOLOR12=808080
$RGBCOLOR13=98ff98
$RGBCOLOR14=5090d0
$RGBCOLOR15=b8b8b8

[/pbcode]
Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: stevmjon on June 01, 2018, 11:00:24 PM
i am also researching memory access at the moment.
i want to do a similar thing in my 3D engine with the z buffer.

i noticed that in this demo, in the main do - loop there is lockbuffer & unlockbuffer, and at the same time in the functions there also another lockbuffer & unlockbuffer.
it seems the first lockbuffer is the screen, and the second lockbuffer is the image.
can you have 2 buffers locked independantly, or does command unlockbuffer unlock all of them?

  stevmjon


Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: baggey on June 03, 2018, 02:52:52 AM
WoW 135 FPS here for method 4!  :o

So having read the code has kinda got me thinking. My emulator writes a line by line which is what we have here. But the Zx Spectrum has a very strange layout indeed.
I see the last line is commented out?

Ive played with it and see that 508/2=254 Pixels. What always confuses me is the 0 counts as well so this would then be +2 giving 255 Pixels.

In my emulator i used a 255 Byte Look up pixel table as only Paper and Ink can be Displayed. Im thinking now of Using this method with 32 Look ups per Line Scan.

Will make one Big Speed difference! Its the Dreaded Z80 core that put a stop on it for me as the sheer amount of time was Exponetial.

Ive seen Many cores rewritten in C,Delphi and Java Since! Im thinking of writing a program to strip the code out of a Free Z80 core, into a usable layout for my PlayBasic Emulator.
Hopefully with sucess in getting the "Flags Register" to work! That seems the crutial part for Logic to work.

I see PlayBasic has come a long way  ;D It's my favfrouite Language. Apart from Zx Spectrum basic of course. Which was very slow!

Id even like to write a program that emulates just the Basic running at "80's Speed Machine Code" that way we could write retro games for our old computer's in Basic. As if it were running on the same machine.  I wrote a few games back in the day more than 6 things happening on the screen killed It! "Speed wise i mean".


Shall have a go at the C64 Screen 320 x 200 latter. Could setup a Mode 0 and a Mode 1 depending which Screen Mode or Machine is reqired! From an Emulation point of view.


Sorry if a little off topic!

Kind Regards Baggey
Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: kevin on June 03, 2018, 12:00:08 PM


[pbcode]

dim inkindex(15)
 
  scalex=2.8
  scaley=2.6
  width=256
  height=192
  CreateFXImageEx 1,width,height,32   

InitColorArrays()

  FillImageIndex=4

  do
 
  Xpos=13
  Ypos=10
 
 
 
           lockbuffer
 
                 Name$="fillimageV"+digits$(FillImageIndex+1,3)
                 if FunctionExist(Name$)
                    callfunction Name$,1
                 endif
     
              Scalex=float (800/getimageWidth(1))
            Scaley=float (600/getimageHeight(1))
           
           
               drawrotatedimage 1,xpos,ypos,0,scalex,scaley,0,0,false
                 
             unlockbuffer

  xx=xpos+30
  yy=ypos+15
     
  Text Xx,Yy,   "  Address:"+Str$(GetImagePtr(1))
  Text Xx,Yy+20,"    Pitch:"+Str$(GetImagePitch(1))
  Text Xx,Yy+40,"    Depth:"+Str$(GetImageDepth(1))
  text xx,yy+60,"      Fps:" +str$( FPS())
  text xx,yy+80,"   Method:" +str$( FillImageIndex)


   if mousebutton()
         FillImageIndex=cliprange(FillImageIndex+1,4,5)
         flushmouse
   endif
   
     
  Sync
  loop
 
  WaitKey
 
   



   Type tRow
         Row(255)
   EndType



Function FillImageV005(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Depth          =GetImageDepth(ThisImage)
  if   depth = 32
     Address     =GetImagePtr(ThisImage)
     Pitch          =GetImagePitch(ThisIMage)
     imgheight=getimageheight(thisimage)
     imgwidth=getimagewidth(thisimage)
 
 
     dim Row as tRow pointer
 
     For ylp=0 To imgheight-1
   
   
      // Compute what 32 pixel chunk       
      for xlp=0 to  imgwidth-1 step 32
   
          Row = (Address+ ylp*Pitch) +(Xlp*4)
   

              row.Row(0)=inkindex(rnd(15))
            row.Row(0)=inkindex(rnd(15))
            row.Row(1)=inkindex(rnd(15))
         row.Row(2)=inkindex(rnd(15))
            row.Row(3)=inkindex(rnd(15))
         row.Row(4)=inkindex(rnd(15))
      row.Row(5)=inkindex(rnd(15))
      row.Row(6)=inkindex(rnd(15))
      row.Row(7)=inkindex(rnd(15))
      row.Row(8)=inkindex(rnd(15))
      row.Row(9)=inkindex(rnd(15))
      row.Row(10)=inkindex(rnd(15))
      row.Row(11)=inkindex(rnd(15))
      row.Row(12)=inkindex(rnd(15))
      row.Row(13)=inkindex(rnd(15))
      row.Row(14)=inkindex(rnd(15))
      row.Row(15)=inkindex(rnd(15))
      row.Row(16)=inkindex(rnd(15))
      row.Row(17)=inkindex(rnd(15))
      row.Row(18)=inkindex(rnd(15))
      row.Row(19)=inkindex(rnd(15))
      row.Row(20)=inkindex(rnd(15))
      row.Row(21)=inkindex(rnd(15))
      row.Row(22)=inkindex(rnd(15))
      row.Row(23)=inkindex(rnd(15))
      row.Row(24)=inkindex(rnd(15))
      row.Row(25)=inkindex(rnd(15))
      row.Row(26)=inkindex(rnd(15))
      row.Row(27)=inkindex(rnd(15))
      row.Row(28)=inkindex(rnd(15))
      row.Row(29)=inkindex(rnd(15))
      row.Row(30)=inkindex(rnd(15))
      row.Row(31)=inkindex(rnd(15))
       
       next
       
     Next
  endif
 
  UnLockBuffer
  RenderToScreen
 
EndFunction


Function FillImageV006(ThisImage)
 
  RenderToImage ThisImage
 
  LockBuffer
 
  Depth          =GetImageDepth(ThisImage)
  if   depth = 32
     Address     =GetImagePtr(ThisImage)
     Pitch          =GetImagePitch(ThisIMage)
     imgheight=getimageheight(thisimage)
     imgwidth=getimagewidth(thisimage)
 
 
     dim Row as tRow pointer
 
     For ylp=0 To imgheight-1
   
    Row = Address+ ylp*Pitch
   
        row.Row(0)=inkindex(rnd(15))
   row.Row(0)=inkindex(rnd(15))
   row.Row(1)=inkindex(rnd(15))
   row.Row(2)=inkindex(rnd(15))
   row.Row(3)=inkindex(rnd(15))
   row.Row(4)=inkindex(rnd(15))
   row.Row(5)=inkindex(rnd(15))
   row.Row(6)=inkindex(rnd(15))
   row.Row(7)=inkindex(rnd(15))
   row.Row(8)=inkindex(rnd(15))
   row.Row(9)=inkindex(rnd(15))
   row.Row(10)=inkindex(rnd(15))
   row.Row(11)=inkindex(rnd(15))
   row.Row(12)=inkindex(rnd(15))
   row.Row(13)=inkindex(rnd(15))
   row.Row(14)=inkindex(rnd(15))
   row.Row(15)=inkindex(rnd(15))
   row.Row(16)=inkindex(rnd(15))
   row.Row(17)=inkindex(rnd(15))
   row.Row(18)=inkindex(rnd(15))
   row.Row(19)=inkindex(rnd(15))
   row.Row(20)=inkindex(rnd(15))
   row.Row(21)=inkindex(rnd(15))
   row.Row(22)=inkindex(rnd(15))
   row.Row(23)=inkindex(rnd(15))
   row.Row(24)=inkindex(rnd(15))
   row.Row(25)=inkindex(rnd(15))
   row.Row(26)=inkindex(rnd(15))
   row.Row(27)=inkindex(rnd(15))
   row.Row(28)=inkindex(rnd(15))
   row.Row(29)=inkindex(rnd(15))
   row.Row(30)=inkindex(rnd(15))
   row.Row(31)=inkindex(rnd(15))
   row.Row(32)=inkindex(rnd(15))
   row.Row(33)=inkindex(rnd(15))
   row.Row(34)=inkindex(rnd(15))
   row.Row(35)=inkindex(rnd(15))
   row.Row(36)=inkindex(rnd(15))
   row.Row(37)=inkindex(rnd(15))
   row.Row(38)=inkindex(rnd(15))
   row.Row(39)=inkindex(rnd(15))
   row.Row(40)=inkindex(rnd(15))
   row.Row(41)=inkindex(rnd(15))
   row.Row(42)=inkindex(rnd(15))
   row.Row(43)=inkindex(rnd(15))
   row.Row(44)=inkindex(rnd(15))
   row.Row(45)=inkindex(rnd(15))
   row.Row(46)=inkindex(rnd(15))
   row.Row(47)=inkindex(rnd(15))
   row.Row(48)=inkindex(rnd(15))
   row.Row(49)=inkindex(rnd(15))
   row.Row(50)=inkindex(rnd(15))
   row.Row(51)=inkindex(rnd(15))
   row.Row(52)=inkindex(rnd(15))
   row.Row(53)=inkindex(rnd(15))
   row.Row(54)=inkindex(rnd(15))
   row.Row(55)=inkindex(rnd(15))
   row.Row(56)=inkindex(rnd(15))
   row.Row(57)=inkindex(rnd(15))
   row.Row(58)=inkindex(rnd(15))
   row.Row(59)=inkindex(rnd(15))
   row.Row(60)=inkindex(rnd(15))
   row.Row(61)=inkindex(rnd(15))
   row.Row(62)=inkindex(rnd(15))
   row.Row(63)=inkindex(rnd(15))
   row.Row(64)=inkindex(rnd(15))
   row.Row(65)=inkindex(rnd(15))
   row.Row(66)=inkindex(rnd(15))
   row.Row(67)=inkindex(rnd(15))
   row.Row(68)=inkindex(rnd(15))
   row.Row(69)=inkindex(rnd(15))
   row.Row(70)=inkindex(rnd(15))
   row.Row(71)=inkindex(rnd(15))
   row.Row(72)=inkindex(rnd(15))
   row.Row(73)=inkindex(rnd(15))
   row.Row(74)=inkindex(rnd(15))
   row.Row(75)=inkindex(rnd(15))
   row.Row(76)=inkindex(rnd(15))
   row.Row(77)=inkindex(rnd(15))
   row.Row(78)=inkindex(rnd(15))
   row.Row(79)=inkindex(rnd(15))
   row.Row(80)=inkindex(rnd(15))
   row.Row(81)=inkindex(rnd(15))
   row.Row(82)=inkindex(rnd(15))
   row.Row(83)=inkindex(rnd(15))
   row.Row(84)=inkindex(rnd(15))
   row.Row(85)=inkindex(rnd(15))
   row.Row(86)=inkindex(rnd(15))
   row.Row(87)=inkindex(rnd(15))
   row.Row(88)=inkindex(rnd(15))
   row.Row(89)=inkindex(rnd(15))
   row.Row(90)=inkindex(rnd(15))
   row.Row(91)=inkindex(rnd(15))
   row.Row(92)=inkindex(rnd(15))
   row.Row(93)=inkindex(rnd(15))
   row.Row(94)=inkindex(rnd(15))
   row.Row(95)=inkindex(rnd(15))
   row.Row(96)=inkindex(rnd(15))
   row.Row(97)=inkindex(rnd(15))
   row.Row(98)=inkindex(rnd(15))
   row.Row(99)=inkindex(rnd(15))
   row.Row(100)=inkindex(rnd(15))
   row.Row(101)=inkindex(rnd(15))
   row.Row(102)=inkindex(rnd(15))
   row.Row(103)=inkindex(rnd(15))
   row.Row(104)=inkindex(rnd(15))
   row.Row(105)=inkindex(rnd(15))
   row.Row(106)=inkindex(rnd(15))
   row.Row(107)=inkindex(rnd(15))
   row.Row(108)=inkindex(rnd(15))
   row.Row(109)=inkindex(rnd(15))
   row.Row(110)=inkindex(rnd(15))
   row.Row(111)=inkindex(rnd(15))
   row.Row(112)=inkindex(rnd(15))
   row.Row(113)=inkindex(rnd(15))
   row.Row(114)=inkindex(rnd(15))
   row.Row(115)=inkindex(rnd(15))
   row.Row(116)=inkindex(rnd(15))
   row.Row(117)=inkindex(rnd(15))
   row.Row(118)=inkindex(rnd(15))
   row.Row(119)=inkindex(rnd(15))
   row.Row(120)=inkindex(rnd(15))
   row.Row(121)=inkindex(rnd(15))
   row.Row(122)=inkindex(rnd(15))
   row.Row(123)=inkindex(rnd(15))
   row.Row(124)=inkindex(rnd(15))
   row.Row(125)=inkindex(rnd(15))
   row.Row(126)=inkindex(rnd(15))
   row.Row(127)=inkindex(rnd(15))
   row.Row(128)=inkindex(rnd(15))
   row.Row(129)=inkindex(rnd(15))
   row.Row(130)=inkindex(rnd(15))
   row.Row(131)=inkindex(rnd(15))
   row.Row(132)=inkindex(rnd(15))
   row.Row(133)=inkindex(rnd(15))
   row.Row(134)=inkindex(rnd(15))
   row.Row(135)=inkindex(rnd(15))
   row.Row(136)=inkindex(rnd(15))
   row.Row(137)=inkindex(rnd(15))
   row.Row(138)=inkindex(rnd(15))
   row.Row(139)=inkindex(rnd(15))
   row.Row(140)=inkindex(rnd(15))
   row.Row(141)=inkindex(rnd(15))
   row.Row(142)=inkindex(rnd(15))
   row.Row(143)=inkindex(rnd(15))
   row.Row(144)=inkindex(rnd(15))
   row.Row(145)=inkindex(rnd(15))
   row.Row(146)=inkindex(rnd(15))
   row.Row(147)=inkindex(rnd(15))
   row.Row(148)=inkindex(rnd(15))
   row.Row(149)=inkindex(rnd(15))
   row.Row(150)=inkindex(rnd(15))
   row.Row(151)=inkindex(rnd(15))
   row.Row(152)=inkindex(rnd(15))
   row.Row(153)=inkindex(rnd(15))
   row.Row(154)=inkindex(rnd(15))
   row.Row(155)=inkindex(rnd(15))
   row.Row(156)=inkindex(rnd(15))
   row.Row(157)=inkindex(rnd(15))
   row.Row(158)=inkindex(rnd(15))
   row.Row(159)=inkindex(rnd(15))
   row.Row(160)=inkindex(rnd(15))
   row.Row(161)=inkindex(rnd(15))
   row.Row(162)=inkindex(rnd(15))
   row.Row(163)=inkindex(rnd(15))
   row.Row(164)=inkindex(rnd(15))
   row.Row(165)=inkindex(rnd(15))
   row.Row(166)=inkindex(rnd(15))
   row.Row(167)=inkindex(rnd(15))
   row.Row(168)=inkindex(rnd(15))
   row.Row(169)=inkindex(rnd(15))
   row.Row(170)=inkindex(rnd(15))
   row.Row(171)=inkindex(rnd(15))
   row.Row(172)=inkindex(rnd(15))
   row.Row(173)=inkindex(rnd(15))
   row.Row(174)=inkindex(rnd(15))
   row.Row(175)=inkindex(rnd(15))
   row.Row(176)=inkindex(rnd(15))
   row.Row(177)=inkindex(rnd(15))
   row.Row(178)=inkindex(rnd(15))
   row.Row(179)=inkindex(rnd(15))
   row.Row(180)=inkindex(rnd(15))
   row.Row(181)=inkindex(rnd(15))
   row.Row(182)=inkindex(rnd(15))
   row.Row(183)=inkindex(rnd(15))
   row.Row(184)=inkindex(rnd(15))
   row.Row(185)=inkindex(rnd(15))
   row.Row(186)=inkindex(rnd(15))
   row.Row(187)=inkindex(rnd(15))
   row.Row(188)=inkindex(rnd(15))
   row.Row(189)=inkindex(rnd(15))
   row.Row(190)=inkindex(rnd(15))
   row.Row(191)=inkindex(rnd(15))
   row.Row(192)=inkindex(rnd(15))
   row.Row(193)=inkindex(rnd(15))
   row.Row(194)=inkindex(rnd(15))
   row.Row(195)=inkindex(rnd(15))
   row.Row(196)=inkindex(rnd(15))
   row.Row(197)=inkindex(rnd(15))
   row.Row(198)=inkindex(rnd(15))
   row.Row(199)=inkindex(rnd(15))
   row.Row(200)=inkindex(rnd(15))
   row.Row(201)=inkindex(rnd(15))
   row.Row(202)=inkindex(rnd(15))
   row.Row(203)=inkindex(rnd(15))
   row.Row(204)=inkindex(rnd(15))
   row.Row(205)=inkindex(rnd(15))
   row.Row(206)=inkindex(rnd(15))
   row.Row(207)=inkindex(rnd(15))
   row.Row(208)=inkindex(rnd(15))
   row.Row(209)=inkindex(rnd(15))
   row.Row(210)=inkindex(rnd(15))
   row.Row(211)=inkindex(rnd(15))
   row.Row(212)=inkindex(rnd(15))
   row.Row(213)=inkindex(rnd(15))
   row.Row(214)=inkindex(rnd(15))
   row.Row(215)=inkindex(rnd(15))
   row.Row(216)=inkindex(rnd(15))
   row.Row(217)=inkindex(rnd(15))
   row.Row(218)=inkindex(rnd(15))
   row.Row(219)=inkindex(rnd(15))
   row.Row(220)=inkindex(rnd(15))
   row.Row(221)=inkindex(rnd(15))
   row.Row(222)=inkindex(rnd(15))
   row.Row(223)=inkindex(rnd(15))
   row.Row(224)=inkindex(rnd(15))
   row.Row(225)=inkindex(rnd(15))
   row.Row(226)=inkindex(rnd(15))
   row.Row(227)=inkindex(rnd(15))
   row.Row(228)=inkindex(rnd(15))
   row.Row(229)=inkindex(rnd(15))
   row.Row(230)=inkindex(rnd(15))
   row.Row(231)=inkindex(rnd(15))
   row.Row(232)=inkindex(rnd(15))
   row.Row(233)=inkindex(rnd(15))
   row.Row(234)=inkindex(rnd(15))
   row.Row(235)=inkindex(rnd(15))
   row.Row(236)=inkindex(rnd(15))
   row.Row(237)=inkindex(rnd(15))
   row.Row(238)=inkindex(rnd(15))
   row.Row(239)=inkindex(rnd(15))
   row.Row(240)=inkindex(rnd(15))
   row.Row(241)=inkindex(rnd(15))
   row.Row(242)=inkindex(rnd(15))
   row.Row(243)=inkindex(rnd(15))
   row.Row(244)=inkindex(rnd(15))
   row.Row(245)=inkindex(rnd(15))
   row.Row(246)=inkindex(rnd(15))
   row.Row(247)=inkindex(rnd(15))
   row.Row(248)=inkindex(rnd(15))
   row.Row(249)=inkindex(rnd(15))
   row.Row(250)=inkindex(rnd(15))
   row.Row(251)=inkindex(rnd(15))
   row.Row(252)=inkindex(rnd(15))
   row.Row(253)=inkindex(rnd(15))
   row.Row(254)=inkindex(rnd(15))
      row.Row(255)=inkindex(rnd(15))
       
     Next
  endif
 
  UnLockBuffer
  RenderToScreen
 
EndFunction
     
         
         
         
         
         
         
         
         
PSub InitColorArrays()
   
// Ive set the colors up here in RGB but using the palletindex(0)
// We have standard colors so we can make our own pallets!
// select color

// Standard Spectrum colors

   // Normal
      inkindex(0) = RGB24ToRGB16(rgb(0, 0, 0)); Black
      inkindex(1) = RGB24ToRGB16(rgb(0,0,192)); Blue
      inkindex(2) = RGB24ToRGB16(rgb(192,0,0)); Red   
       inkindex(3) =RGB24ToRGB16(rgb(192,0,192)); Magenta
       inkindex(4) = RGB24ToRGB16(rgb(0,192,0)); Green
      inkindex(5) = RGB24ToRGB16(rgb(0,192,192)); Cyan
               inkindex(6) = RGB24ToRGB16(rgb(192,192,0)); Yellow
      inkindex(7) = RGB24ToRGB16(rgb(192,192,192)); White

   // Bright
       inkindex(8)  =RGB24ToRGB16( rgb(0, 0, 0)); Black
      inkindex(9)  = RGB24ToRGB16(rgb(0,0,255)); Blue
      inkindex(10) = RGB24ToRGB16(rgb(255,0,0)); Red   
       inkindex(11) = RGB24ToRGB16(rgb(255,0,255)); Magenta
       inkindex(12) = RGB24ToRGB16(rgb(0,255,0)); Green
      inkindex(13) = RGB24ToRGB16(rgb(0,255,255)); Cyan
               inkindex(14) = RGB24ToRGB16(rgb(255,255,0)); Yellow
      inkindex(15) = RGB24ToRGB16(rgb(255,255,255)); White

EndpSub

[/pbcode]
Title: Re: Direct 2D Buffer Writting at 256 x 192
Post by: kevin on June 03, 2018, 12:26:04 PM
Quote
t seems the first lockbuffer is the screen, and the second lockbuffer is the image.
can you have 2 buffers locked independantly, or does command unlockbuffer unlock all of them?


Lock/Unlock relate to only the current surface, but you can get way with this on FX/AFX surfaces but I suspect it would run into problems with video surfaces.  



Quote

Id even like to write a program that emulates just the Basic running at "80's Speed Machine Code" that way we could write retro games for our old computer's in Basic. As if it were running on the same machine.  I wrote a few games back in the day more than 6 things happening on the screen killed It! "Speed wise i mean".


  most 8bit systems only produce around 1 million cycles per second.   At 50fps that's 20K cycles per frame which isn't much espoicially when opcodes tend to execute on average in 2->4 cycles.