New vertex/tex-coord arrays only created when state changes
_BLEND enabled hardware images don't write to the depth-buffer if their alpha is 0 (strictly speaking <0.001 if represented as a SINGLE from 0 to 1)
Apart from texture on texture rendering (requires FBOs) and the tiling of non-power of two dimensioned images with _MAPTRIANGLE QB64-GL now works via remote desktop and should work responsively and reliably on most less-OpenGL capable environments (if not, report it on the forums. I've successfully run a 3D minecraft-like program and a 2D top-down shooter with hardware acceleration via remote desktop)
A new function has been added to parts/video/fonts/ttf/src.c, FontFree().
This takes an index into the fonts array, and calls FT_Done_Face() on the
handle, free() on the ttf_data then sets in_use to 0.
The sub__freefont() function calls FontFree(), and sets the appropriate font[]
element to NULL (after checking the passed font handle is valid, of course.
This way, we only include that code if its commands are called upon.
In order to do this, some other areas had to be changed as well:
- There is now a libqb.h file, which declares some routines in libqb.cpp,
in order to allow them to be called from a separately compiled unit, i.e,
the user mods part.
- common.cpp now has an #include guard, just to be on the safe side.
- The library purge routines know about the new part.
- qb64.bas is modified to handle the new part; this area is just modeled
off the code for the other parts.
- Appropriate flags were set in the hash table entires for the commands.
- The user mods, now being a separate compilation unit, #include common.cpp
and libqb.h. The former is required for important type declarations and
access to glut commmands, the latter for access to libqb routines.
- qbx.cpp #includes the src.cpp file in the user mods part, which declares the
routines.
Something to ponder: libqb does not include or rely on any of the user mod routines,
so it's probably not necessary to rebuild it like with the other parts. That exploration
is for another day, however.
Without a parameter, it clears all buffers. A numeric parameter will
clear only a specific buffer: 1 = INKEY$ buffer (and other traditional
QB input commands), 2 = _KEYHIT buffer, 3 = INP(&H60) buffer. The last
one is not actually cleared, but we pretend we've read all the data from
it.
To ensure no stray characters, use this command immediately before the
code you wish to sanitise. You never know when the user might bang on
the keyboard, and this also helps to avoid stray key release values
persisting in the _KEYHIT buffer.
Added new _STRCMP and _STRICMP commands for quick string comparisons.
Cleaned up QB64 to finish removing the QUI (quick user insert) code and folders.
Altered UCASE and LCASE routines to be faster in some situations for us.
Deleted makedat_win.txt, and created makedat_win32.txt and makedat_win64.txt which we toggle between according to compiler now.
Made change inside QB64.bas so it automatically adjusts output for DATA statements according to OS.
It's not true cross-program clipboard support, but the clipboard now functions
within a QB64 program. Importantly, this means you can copy/paste code around
in the IDE.
[{_CLOCKWISE|_ANTICLOCKWISE}][{_SEAMLESS}](?,?)-(?,?)-(?,?)[,?]{TO}(?,?[,?])-(?,?[,?])-(?,?[,?])[,[?][,{_SMOOTH|_SMOOTHSHRUNK|_SMOOTHSTRETCHED}]]
Refactor/rewrite of how OpenGL state is monitored/maintained
Critical fix to stop _MAPTRIANGLE (2D hardware version) not freeing old commands in the pipeline
Critical fix to stop intermittent QB64 crashing in 32-bit mode when screen size expanded
Removed the ad-hoc system and insert ParseCMDLineArgs$(), which
should be easily extensible. Also supports the -- option for using
a filename that looks like an option (I would have liked to just be
able to use quotes on the command line, but COMMAND$ doesn't preserve
that information unfortunately.
LINE INPUT will now use the faster method if passed a file handle
that has been opened FOR BINARY. As such, the _BLINEINPUT command
has been removed.
qb64.bas now takes advantage of this for reading from '$include files,
at least in Include Manager 1. Some tweaking of internal/source/main.txt
was required to get things into a sane state, so I'm holing off changing
the compiler any further so the auto-builder can make sure everything's
smoothed over.
Note: Everything should still compile as normal; I'm just being overcautious.
_SEAMLESS option is not available for hardware yet and will generate an Illegal Func Call error. This is due to it failing to be pixel-perfect with the non-hardware version.
Glut commands _SCREENX, _SCREENY, _SCREENMOVE, _DESKTOPHEIGHT, _DESKTOPWIDTH,
_SCREENICON now wait for the screen to be created before trying to work.
Change to QB64.bas source to use _BLINEINPUT instead of LINE INPUT for INCLUDE$.
This should make the IDE much more responsive when Includes are used from now on.
Split qb64.bas into $included components: notably settings, version, gloabal, ide (& wiki downloader), subs/functions (and extensions including user mods and opengl)
Moved 'user mods' to source\subs_functions\extensions
Removed legacy functionality of the QB64 update system (including compression functions)
QB64.BAS can be compiled independent of its IDE $includes (just comment them out)
QUI commeted out (needs minor revision)
Updated version to 1.000 (just ran out of numbers)