* fflush is a no-op wrapper but nice to have for consistency.
* ftruncateat will take a file read-write handle and truncate it at a
given length. Useful if re-writing a file and the new data ends up
being shorter than the oldd ata.
* Move in addition to Copy, and success/fail bool return on both.
* Log is an overloaded term since it can also mean the debug log. We now
consistently refer to capture files as capture files or just captures
for short. The log is just for log messages and diagnostics.
* The user-facing UI was mostly already consistent, but many of the
public interfaces exposed to python needed to be renamed, and it made
more sense just to make everything consistent.
* We add a button with a link icon to indicate that it goes to the
resource details. We'll re-use the crosshair as a visual metaphor for
any interactive widget that goes to the resource inspector.
* To remove any possible confusion, we change the icon for the texture
list and locked tabs in the texture viewer to not include the link.
* We remove the now unneeded name fields in buffer/texture descriptions
and some of the pipeline state structs.
* A single function will give the human-readable name for a resource id.
This will look up a custom set of renames, on top of the names from
the resource descriptions.
* For Vulkan and D3D12, we now create a dummy command buffer to ensure
that there's actually a chunk available to correspond to the command
buffer that gets submitted or recorded to.
* This provides a way to find the name of any resource besides 'special'
resources like textures and buffers. In a follow-up commit, the names
will be removed from their descriptors.
* It also allows us to list which chunks in the structured file were
used to initialise the resource, giving the ability to look up and
display the initialisation parameters.
* At the same time we also list the derived/parent resources to better
allow the user to browse between related resources.
* This item delegate will forward on either to a specified other
delegate or to the base implementation. This allows chaining delegates
(i.e. having one built-in to the widget, which forwards to a user-set
delegate).
The EGL function pointer loading was scattered
in two files thus it is hard to keep track where
the symbols were loaded.
Introduced a class which holds all internally used
EGL function pointers with a helper method to
load the required pointers. Not all EGL pointers
are loaded just the used ones (just like before).
In some cases a few GL wrapper methods are called
with incorrect gl_CurChunk during serialization.
This can happen if the capturing application calls
a GL method - for which the gl_CurChunk will be set correctly -
and the wrapped method calls another wrapped GL method
but for that the gl_CurChunk will be incorrect.
Also during the ActivateContext call the gl_CurChunk
was not set.
For now do a hotfix for glDrawArrays and initial context.
* Whether there's a sensible way to define a tab closing shortcut is
unclear at the moment - there isn't a single set of tabs, so just
closing the most recently highlighted panel could be quite
unintuitive.
* For now, resource replacement implicitly means shader edits, but other
replacements could also affect the results of PostVS (e.g. buffer or
state changes). Trying to capture all this state in the cache key is
not very useful.
* The PostVS cache will be re-filled immediately after, as any
replacement does a force-refresh of the current event.
* If the external code has a NULL pointer and doesn't want to allocate
but we are exporting buffer data, we still need to read the data
somewhere so make a temporary allocation to read it into.