BambooBasic

Version History, and general rambling! ;)

v1_2Lc

	- THE BIG ONE: the 3D engine is gone, and everything that survived it is now b2d*.
	  b3dGraphics3D -> b2dGraphics, b3dCls3D -> b2dCls, b3dFlip3D -> b2dFlip,
	  b3dEnd -> b2dEnd, and the whole screen shader family (b3dLoadScreenShader,
	  b3dApplyScreenShader, b3dSetShaderFloat and friends) are b2d* too. Existing
	  programs need renaming - it is names only, the behaviour is unchanged.
	- Added b2dDrawQuad(), a four-cornered polygon given as four screen points, filled
	  or outlined. b2dDrawRect can only do axis-aligned boxes; this does the wonky ones,
	  which is what a projected 3D face or a pseudo-3D road actually is. No backface
	  culling - both windings draw, deliberately.
	- Added b2dSetDepth() and a real depth buffer, so 2D PRIMITIVES can be depth-tested
	  and drawn in any order. Images and text are never depth-tested, so a HUD still sits
	  on top the way it always did, and code that never calls it behaves exactly as before.
	- Added b2dDrawQuadDepth(), the same quad but with a depth per CORNER, interpolated
	  across the face. That is what lets two faces of the same solid intersect properly
	  instead of one popping through the other. One gotcha and it is yours, not the
	  runtime's: feed it PROJECTIVE depths of the form a + b/z, not raw view-Z, or a flat
	  face creases along its diagonal. See docs/3d_in_2d.html.
	- Added b2dSetClipRect() / b2dClearClipRect() - a 2D scissor. Affects primitives,
	  images AND text, applies only to draws made after the call, and is cleared at the
	  start of each frame so a forgotten one cannot leak into the next.
	- Added b2dGetFPS(), which the Windows side already had.
	- 2D images now get a full mipmap chain, so sprites stop shimmering when drawn small.
	  No API change. Sprite sheets and font atlases deliberately do NOT get one - a mip
	  level would average across the boundaries between frames or glyphs and bleed the
	  neighbours in.
	- Added b2dLoadTTF(), which loads a TrueType/OpenType font (.ttf/.otf) at a pixel size
	  you choose and hands back an ORDINARY font handle. b2dDrawText, b2dDrawTextEx,
	  b2dGetStringWidth/Height, b2dGetFontWidth/Height and b2dFreeFont all take it, so the
	  only line that changes in your program is the one that loads the font. Glyphs are
	  rasterised from the outlines on first use and cached, and text is now decoded as
	  UTF-8, so you get whatever the font actually contains rather than the 256 characters
	  a bitmap font can hold - accents, Greek, Chinese. b2dLoadFont and the bitmap path are
	  untouched, and existing programs render identically.
	  Two things that are deliberate rather than oversights: each size is its OWN
	  b2dLoadTTF call, because stretching one set of glyphs to another size is exactly what
	  makes text look mushy; and the glyph cache has a ceiling, so a program putting many
	  thousands of DIFFERENT characters on screen at once will eventually stop caching new
	  ones and leave gaps rather than slow down. Neither bites normal use.
	  See examples/Runtime/28 - TTF Fonts - TTFTest.bam to look at it, TTFCheck.bam to
	  check it (it prints the measurements and saves the frame it drew).
	- Fixed a nasty one in the mouse: the reported cursor position had become dead-reckoned
	  from movement events, so anything that happened while the pointer was off the window
	  was lost for good, and the clamp turned it into a ratchet - every trip off the window
	  left the position permanently further adrift. Symptom was menu buttons lighting up
	  while the cursor was somewhere else entirely. It now reads the real pointer unless
	  the program is driving the cursor itself (mouse-look), which is the only case that
	  needs dead reckoning.
	- Fixed mouse coordinates under fullscreen letterboxing - they were being handed over in
	  surface pixels as though they were your coordinate space, with no fit applied.
	  inpGetMouseX/Y and inpMoveMouse now both map through it.
	- Fixed sysUpdateEvents sampling the mouse BEFORE pumping the event queue, so every
	  reading was one pump out of date.
	- Fixed inpMoveMouse moving the OS pointer but not the reported cursor, so a program
	  that warped and read straight back got the old value for a frame.
	- Fixed the second-F1 detailed help lookup, which said "No documentation found" for most
	  of the runtime - it guessed the docs folder from the function name prefix and only
	  knew four of them. It now searches all the categories, so all 363 functions resolve.
	- Fixed folder links in the IDE's documentation (the Examples link on the index) doing
	  nothing on Linux - it shelled out to Windows Explorer. Now uses whatever file manager
	  the desktop provides.
	- Docs: pages for everything above, the 3D-in-2D guide, and the category indexes are
	  generated from what is on disk now, so they cannot drift. 363 of 363 documented.
	- make dist tidied up: no more stale manifests, no more files from the Windows share
	  arriving marked executable, and .linkflags is no longer shipped with this machine's
	  absolute paths baked into it.

v1_2L
	
	- Another one for the codgers amongst us; Palette Cycling & Indexed Colour functions (see docs)
	- Fixed a few editor loose ends
	- Fixed FileCopy bug that would always return 0, even if the file was copied successfully
	- Added "PreCalc" block, this runs at build time, inside the transpiler, and bakes its 
	  results into your program as an array literal. (See docs) 
	- Added "AutoCall", which calls a function once/every specified amount of milliseconds... Think
	  Amstrad CPC's software interrupt mechanism... Sorry, I had to do it! ;)
	- Added With...EndWith block, for adding data to type and element fields (syntax sugar really),
	  again, see docs.
	- Added string interpolation for string variables/objects fields e.g. 
		
		Local age:Int = 49
		Print "My age is {%age}"
		
		Output: My age is 49
		
	- Added "Sequence"'s, which are BambooBasic's version of proper list containers (See docs)
	- Added Elements, which can we used with Sequence lists (Like Types, but not, again, see docs) 
	- Hopefully fixed intergrated/discrete combo GPU device crashes (and stop Window
	  updates breaking settings), also, a fall back to WARP, so the app shouldnt die when opened
	  on less-spec'd machines, though, it will probably run like shit! :D

v1_1
	
	- Added "Experimental" web target
	- Fixed screen shader code as I had hardcoded values in them when testing with the CRT shader
	- Fixed mid-frame GPU buffer resizing when dynamically adding entities.
	- Transpiler fix, detects unclosed blocks (If, Select etc etc)
	- Fixed type iteration crash when removing objects from the internal list in a For Each loop
	- Fixed jsonGetArrayCount returning the wrong value.
	- Added b3dCenterMesh(), b3dOpenFileDialog(), b3dSaveFileDialog and b3dOpenFolderDialog.
	- Fixed b3dCountTriangles for GPU meshes
	- Fixed DXGI shutdown crash (Cheers Amon)
	- Fixed b3dLoadBRSFile() function in regards to rotation.

v1_0

	- Full release... To much to add since I added 3D (Windoews) stuff, but, this IS the baseline now!
