freelancer-hd-edition/EXE/dgVoodooReadMe.html
2021-08-04 16:08:16 +02:00

1255 lines
59 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<style>
p
{
max-width:1000px;
word-wrap:break-word;
text-align:justify
}
table, th, td {
width:1000px;
border: 1px solid #C0C0C0;
border-collapse: collapse;
text-align: center;
}
li {
max-width:1000px;
text-align:justify
}
</style>
<head>
<meta name="google-site-verification" content="4JMbYsGNl4-uZV9FEQvq56CQDND5NHcIPtMblynaH-Q" />
<title>dgVoodoo2 Main Readme</title>
</head>
<body bgcolor="#D97600">
<font color = "#FFFF00">
<h2 align="left">
===============================================================================<br>
<font color = "#FFFFFF">dgVoodoo 2.54</font>: Glide, DirectDraw/Direct3D and D3D8 to Direct3D11 Wrapper<br>
Released: <font color = "#FFFFFF">April 25, 2017</font><br>
Author: <font color = "#FFFFFF">Dege</font><br>
<br>
Copyright (c) 2013-2017<br>
===============================================================================<br>
</h2>
<p>
<h2><font color = "#FFFFFF"><u>
Table of contents
</u></font></h2>
<h3><b>
1. Redistribution rights<br>
2. Features<br>
3. Requirements<br>
4. Test results<br>
5. Usage<br>
6. Configuring<br>
7. Resolution overriding<br>
8. General Control Panel (CPL) options<br>
9. General tips and known issues<br>
10. Change log<br>
</b></h3>
===============================================================================<br>
</p>
<br>
<h2><font color = "#FFFFFF"><u>
1. Redistribution rights
</u></font></h2>
<p>
Files of dgVoodoo can be redistributed freely as far as they are kept together,
remain unmodified and unrenamed. Namely, only the full package can be
redistributed in the form as it is!
</p>
<p>
If you would like to utilize them in publicly available custom solutions or
packages, like game patches or anything else, then <font color = "#FFFFFF">PLEASE</font> ask me for permission,
furthermore mention its original source in your package along with the following
download link:
</p>
<a href="http://dege.fw.hu/">http://dege.fw.hu/</a>
<p>
Official dgVoodoo forum where you can contact me and the dgVoodoo community is at:
</p>
<a href="http://www.vogons.org/viewforum.php?f=59/">http://www.vogons.org/viewforum.php?f=59/</a><br>
<br>
Tip: See topic <font color = "#FFFFFF">"WIP versions"</font> for checking out new dgVoodoo versions that are not officially released.
<br><br>
<font color = "#FFFFFF">
<table bgcolor = "#C96600">
<tr><td>---------------------- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ----------------------</td></tr>
<tr><td>
<p>
Very BIG THANKS must go to the community of Vogons for helping me a lot in
testing during the development! Thanks Guys, I couldn't have proceed so far
without such a great quality assurance!
</p>
</tr></td>
<tr><td>
<p>
And I append a new sentence here to emphasize it again, especially for testing
my DX8 implementation and supplying me with ideas, tips and various informations
on several games!!!
</p>
</tr></td>
<tr><td>---------------------- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ----------------------</td></tr>
</table>
</font>
<br>
<h2><font color = "#FFFFFF"><u>
2. Features
</u></font></h2>
<p>
dgVoodoo 2 is a wrapper for old graphics API's for Windows Vista/7/8/10.
<br><br>
This wrapper can use Direct3D 11 with different device types as wrapping output:
<ul>
<li>Hardware rendering at GPU feature level 10.1 (recommended)</li>
<li>Hardware rendering at GPU feature level 10.0 (there are some restrictions)</li>
<li>Software rendering through Microsoft WARP renderer</li>
</ul>
The API's it currently can wrap are:
<ul>
<li>Glide 2.11, Glide 2.45, Glide 3.1 and Glide 3.1 Napalm</li>
<li>DirectX 1-7 (all versions of DirectDraw and Direct3D up to version 7)</li>
<li>Direct3D 8.1</li>
</ul>
<p>
For both Glide and DirectX, dgVoodoo pushes as many emulation work to the GPU as
possbile. Thus, the entire internal 3Dfx GPU logic is mapped to pixel shaders
for Glide emulation, and all the fixed function vertex & pixel processing
pipeline is implemented by shaders for DirectX emulation (when possible).<br>
dgVoodoo basically can work in two ways:
<ul>
<li>Using its precompiled shaders - it is the less efficient mode (legacy) and doesn't provide DX8-level vertex/pixel pipeline functionality</li>
<li>Using an external HLSL shader compiler - this is the most efficient and recommended mode and referred as 'dynamic shader compiling'</li>
</ul>
</p>
<p>
If dynamic shader compiling is available (see Usage) then dgVoodoo can work
with specialized shaders requiring much less GPU power, providing much better
performance, especially on weaker video cards.<br>
</p>
<br>
<h2><font color = "#FFFFFF"><u>
3. Requirements
</u></font></h2>
<ul>
<li>Operating system: Windows Vista/7/8/10</li>
<li>Hardware: GPU supporting DirectX feature level 10.0.</li>
</ul>
Optional and recommended:
<ul>
<li>GPU supporting DirectX <font color = "#FFFFFF">feature level 10.1</font></li>
<li>HLSL shader compiler <font color = "#FFFFFF">(D3DCompiler_43 or D3DCompiler_47)</font><br>(note that D3DCompiler_47 is part of Windows 10)</li>
</ul>
<br>
<h2><font color = "#FFFFFF"><u>
4. Test results
</u></font></h2>
<p>
We can examine this in two aspects:
</p>
<ul>
<li><font color = "#FFFFFF"><b>Used hardware and performance</b></font><br>
I've tested and run different versions of dgVoodoo2 on the following GPU's:
<font color = "#FFFFFF"><ul>
<li>Intel HD 2000 (feature level 10.0 only)</li>
<li>GeForce 8600 GT (feature level 10.0 only)</li>
<li>Intel HD 4000</li>
<li>Geforce GT 610</li>
<li>AMD HD 6450</li>
<li>Intel HD Graphics 530</li>
<li>GeForce GTS 450</li>
<li>AMD HD 7850</li>
<li>GeForce GTX Ti560 (RIP)</li>
<li>AMD R7 360</li>
<li>GeForce GTX 1060</li>
</ul></font>
If dynamic shader compiling is utilized then dgVoodoo generally performs quite well on all hardware except
integrated chips (like Intel HD 2000 and 4000).<br>
Using only precompiled shaders requires a mid-class video card at least, and the low-end ones (intended for office-like usage) like
Geforce GT 610 and AMD HD 6450 are not recommended.
</li>
<br><li><font color = "#FFFFFF"><b>Accuracy of the emulation, individual games and applications</b></font><br>
Of course it's not perfect but I think I got very nice results in general. I maintain expanding lists for games and demos, for DirectX emulation:<br>
<a href="http://dege.fw.hu/Gallery/DXGamesGallery.html">Games</a><br>
<a href="http://dege.fw.hu/Gallery/DXDemosGallery.html">Demos</a><br>
</li>
</ul>
<br>
<h2><font color = "#FFFFFF"><u>
5. Usage
</u></font></h2>
<p>
There is no installer for dgVoodoo beacuse you can copy its dlls anywhere
you want (to use). If u like it and want to use as the only global Glide
wrapper on your machine then copy Glide dlls to the system folder.
For DirectX emulation only a local installation is possible since the
DirectX dlls CANNOT be copied to the system folder (see DirectX readme).
</p>
<p>
A Glide wrapped application can start up either in windowed or full screen
mode (it is controlled by the <font color = "#FFFFFF">Control Panel</font>, see later). Also, you can switch between
them during the gameplay by Alt-Enter. See 'Known issues' for more.
</p>
<p>
The same is true for wrapped DirectX applications, but it is a more
complicated case, see DirectX readme.
</p>
<p>
Glide and DirectX dlls can co-work inside a process so the same versions
of them have to be used within a folder. If one of them detects the other
with different version then it refuses to initialize and work.
Co-work is useful for applications that use DirectDraw for some initial
in-game menu and Glide for 3D rendering.
</p>
<p>
If you use dgVoodoo on Windows 10 then dynamic shader compiling is automatically
available because D3DCompiler_47 is part of the operating system.<br>
For preceding Windows versions (Vista, 7, 8) you need to download it manually and
then, you can copy this dll into each game folder next to the wrapper dlls but the
best practice is to copy it into
</p>
<ul>
<li><font color = "#FFFFFF">Windows\System32 folder for 32 bit operating systems</font></li>
<li><font color = "#FFFFFF">Windows\SysWOW64 folder for 64 bit operating systems</font></li>
</ul>
<p>
if it is not already there by the result of the installation of some
other software.<br>
Note that dgVoodoo supports both D3DCompiler_43 and D3DCompiler_47.
_43 is supported only because of compatibility with users having it
downloaded and copied into their system folder previously.
</p>
<p>
Utilizing dynamic shader compiling is strongly recommended and
even unavoidable to get all DX8 level features to work.
If dgVoodoo cannot find D3DCompiler then it can use only its
generalized precompiled shaders just like versions before 2.5.
If dgVoodoo finds a supported compiler dll then it can adapt to the current
circumstances and compile specialized shaders providing maximum GPU
performance.
</p>
<br>
<h2><font color = "#FFFFFF"><u>
6. Configuring
</u></font></h2>
<p>
As different options might wanted to be used for particular applications,
I kept the concept of local/global configurations (might be familiar from old dgVoodoo).
The configuration data is not stored in the dlls themself anymore.
It is in a separate file named 'dgVoodoo.conf'. All of the Glide and DirectX
dlls uses this file.
</p>
<p>
When the Glide or DirectX wrapped application starts, dgVoodoo tries to read
config data. The search paths and the order for the config file are the following:
<ul>
<li>Folder of the wrapper DLL</li>
<li>Folder of the application (EXE)</li>
<li>User application data folder</li>
</ul>
If the config file can be found in none of them then the default config is used.
</p>
<p>
For modifying config files, you have <font color = "#FFFFFF">dgVoodoo Control Panel (dgVoodooCpl)</font>.
In dgVoodooCpl you can choose a folder where you can load (from) and save the current
configuration. After you chose a folder, it remains in the list permanently.
If the CPL application finds a valid config file in its own folder (where the app itself
is located) then it automatically places the folder into the list and selects the folder.
Otherwise the user's application data folder is selected, by default.
</p>
<p>
If an application tolerates losing focus without closing/minimizing itself,
you can configure it dynamically: when the CPL starts up it builds
a list of detected running Glide/DirectX wrapped applications and insert it
into the folder selector combobox. When you select such a running instance
then the current state of the application is read as config and most of the
options can also be changed. So, you can set resolution, msaa, brightness,
etc on the spot without restarting the application (configurable items depend
on emulation type). When an option changes, it takes effect at once. If the
dialog gets cancelled or an other config folder/instance is selected, all the
changes gets cancelled as well.
</p>
<p>
You can always use the <font color = "#FFFFFF">'Apply' button</font> to save the current config to the
selected folder or running application without exiting the CPL application.
Important to note:
</p>
<ul>
<li><p>
If the wrapped app and the CPL runs on different privilege levels
(admin/nonadmin) then the app won't appear in the instance list or they
cannot communicate to each other. Sorry for the inconvenience.</p>
</li>
<li><p>
Switching resolution or MSAA can only be performed perfectly if the
application re-renders everything on each frame. If it uses or keeps
previously (once-)rendered things like cockpits or similars then they will
be missing as will not get re-rendered. (Glide only)</p>
</li>
</ul>
<p>A folder inserted formerly into the list can be removed. Also, list of the
running instances can be refreshed.</p>
<p>
(Why configuration is still needed at all? Well, now it's not for choosing from
millions of technical options due to weak implementation but for fancy things,
see chapter 'General Control Panel (CPL) options' as well as Glide and DirectX readme.)
</p>
<br>
<h2><font color = "#FFFFFF"><u>
7. Resolution and refresh rate overriding
</u></font></h2>
<p>
You can override the application resolution and refresh rate both for
Glide and DirectX rendering.<br>
There are three types of resolution overriding, and, the 'Resolution'
comboboxes contain two types of elements in the enumerated list:
</p>
<ul>
<li>
<font color = "#FFFFFF">Static resolutions</font>
<p>
Those are enumerated by your videocard for the selected display output.
Select any of them, and the wrapper will force that one (along with the selected refresh rate),
no matter what resolution the application wants to set.<br>
Resolution 'Unforced' means always using the current application resolution, so there is no overriding at all.
</p>
</li>
<br>
<li>
<font color = "#FFFFFF">Dynamic resolutions</font>
<p>
First, a little explanation on what the practical problems are with static
resolutions (especially for DirectX applications).
</p>
<ul>
<li><p>
The application may use multiple resolutions for different parts like movies,
menus and ingame. The statically chosen resolution may not have the same
aspect ratio as those of them. For app-resolutions with different aspect
ratios like 4:3 vs 16:9 it's a problem because one of them will be displayed
hugely distorted.</p>
<li><p>
Even if the app uses only one resolution, and you can select or type another
one with the same aspect ratio, then selecting the proper resolution is still
not an easy task:<br>
a) you don't necessarily know what resolution the app uses<br>
b) you don't necessarily know what the max resolution your display is capable
of<br>
c) even if you know both of them, you may have to calculate manually the
desired resolution.</p>
</li>
</ul>
<p>
(My own problem was the following: I sat down in front of a new computer with
a 4K monitor and wanted to try out some stuffs through dgVoodoo. I faced the
fact that I didn't know the exact monitor resolution, I also didn't know what
res the stuffs to try were using. I just wanted the maximum available
resolution to be forced that keeps the aspect ratio.)
</p>
<p>
Dynamic resolution is the synonim of "let the wrapper choose the current
resolution for you". The maximum, and also the base used for calculating the
current resolution, is your desktop resolution. The base rule is that the
wrapper always calculates the maximum available resolution for the given
scaling mode, but
</p>
<ul>
<li><p>you can restrict the base maximum to <font color = "#FFFFFF">FullHD (1920x1080) or QHD (2560x1440)</font>
for weaker GPUs (like low-end cards or maybe, integrated chips) with large-res display outputs, and</p></li>
<li><p>you can restrict the scale factor to integer numbers.<br>
<font color = "#FFFFFF">(ISF - integer scale factor)</font></p></li>
</ul>
So, dynamic resolutions are the following:
<ul>
<li><font color = "#FFFFFF">Max:</font> Maximum resolution available</li>
<li><font color = "#FFFFFF">Max ISF:</font> Maximum resolution with integer scale factor available</li>
<li><font color = "#FFFFFF">Max FHD:</font> Maximum resolution available
(but restricted to 1920x1080)</li>
<li><font color = "#FFFFFF">Max FHD ISF:</font> Maximum resolution with integer scale factor available
(but restricted to 1920x1080)</li>
<li><font color = "#FFFFFF">Max QHD:</font> Maximum resolution available
(but restricted to 2560x1440)</li>
<li><font color = "#FFFFFF">Max QHD ISF:</font> Maximum resolution with integer scale factor available
(but restricted to 2560x1440)</li>
</ul>
<p>
By default, dynamic resolutions don't have refresh rate even if enumerating refresh rates is enabled.
When working with a dynamic resolution, then the refresh rate is undefined and it is up to the wrapper and the
video card that what rate will be used (probably the one at which desktop is driven).
</p>
<li>
<font color = "#FFFFFF">Custom resolutions</font>
<p>
A custom resolution is either a static one that is not in the enumerated list, or one that is partially overridden.
Defining a custom resolution is about typing the string -manually into the combo box- describing the resolution/refresh rate pair.<br>
Resolution and refresh rate can be overridden independently on each other. Here are some examples (don't type quotation marks):
<ul>
<li>"128x128, 60" - means static resolution 128x128 at forced rate of 60Hz</li>
<li>"128x128, 0" or just "128x128" - means static resolution 128x128 without overridden refresh rate</li>
<li>"0x0, 75" or "unforced, 75" - means unforced (static) resolution with forced 75Hz</li>
<li>"max isf, 83" - means Max ISF dynamic resolution with forced 83Hz</li>
</ul><br>
If your resolution and refresh rate is in the list then it is better to select it from there than typing it manually.
It is because e.g. 60Hz is not exactly 60Hz in practice but 60.01Hz or 59.95Hz or so, depending on your display hardware.
dgVoodoo always handles the refresh rates in their exact rational form but it cannot do that with manually typed ones.<br>
When displaying a refresh rate in the combo box, dgVoodoo truncates the value. So, for example, 59.95Hz will appear as 59Hz
in the list, while the display manufacturer probably claims that your display supports 60Hz. Don't let it mislead you. It is all
about truncating or rounding the values.
</p>
</li>
</ul>
If you are terribly interested in how the current dynamic resolution is calculated then
a little technical part comes here. Otherwise you can skip this section.
<br><br>
<table bgcolor = "#C96600">
<tr><td>D:</td><td>desktop resolution</td></tr>
<tr><td>F:</td><td>FullHD resolution (1920x1080)</td></tr>
<tr><td>Q:</td><td>QHD resolution (2560x1440)</td></tr>
<tr><td>A:</td><td>application resolution</td></tr>
<tr><td>AS (x, y):</td><td>stretched from x to y, with aspect ratio</td></tr>
<tr><td>IAS (x, y):</td><td>stretched from x to y, with aspect ratio, integer scale factor</td></tr>
</table>
<br>
<table border = 1 bgcolor = "#C96600">
<tr>
<th></th>
<th>Unspecified</th>
<th>Centered</th>
<th>Stretched</th>
<th>Stretch with AR</th>
</tr>
<tr>
<th>Max</th>
<td>AS (A, D)</td>
<td>AS (A, D)</td>
<td>D</td>
<td>AS (A, D)</td>
</tr>
<tr>
<th>Max ISF</th>
<td>IAS (A, D)</td>
<td>IAS (A, D)</td>
<td>* remarks</td>
<td>IAS (A, D)</td>
</tr>
<tr>
<th>Max FHD</th>
<td>AS (A, min (D,F))</td>
<td>AS (A, min (D,F))</td>
<td>min (D,F)</td>
<td>AS (A, min (D,F))</td>
</tr>
<tr>
<th>Max FHD ISF</th>
<td>IAS (A, min (D,F))</td>
<td>IAS (A, min (D,F))</td>
<td>* remarks</td>
<td>IAS (A, min (D,F))</td>
</tr>
<tr>
<th>Max QHD</th>
<td>AS (A, min (D,Q))</td>
<td>AS (A, min (D,Q))</td>
<td>min (Q,F)</td>
<td>AS (A, min (D,Q))</td>
</tr>
<tr>
<th>Max QHD ISF </th>
<td>IAS (A, min (D,Q))</td>
<td>IAS (A, min (D,Q))</td>
<td>* remarks</td>
<td>IAS (A, min (D,Q))</td>
</tr>
</table>
<br>
Remarks:
<ul>
<li><p>
Resolution is calculated in the same way for scaling mode 'Unspecified', 'Centered' and 'Stretch with AR'.<br>
</p></li>
<li><p>
Stretched scaling mode with ISF tries to stretch to min([D|F|Q]) and the
scale factor for both direction is the integer part of the minimum of<br>
<font color = "#FFFFFF">min ([Dx|Fx|Qx])/Ax</font> and <font color = "#FFFFFF">min ([Dy|Fy|Qy])/Ay</font>
(ratios of X/Y directions).
</p></li>
</ul>
<p>
I'd like to say some words about what happens on multimonitor systems with
dynamic resolution forcing:
</p>
<ul>
<li><p>
Glide: when switching from windowed mode to fullscreen then a new forced
resolution is calculated by the wrapper, based on the native res of the
display on which the full screen output will appear.
</p></li>
<li><p>
DX: It's not so flexible at all, unfortunately. Since DX impl doesn't
support changing resolution during its working, it cannot do the same
as Glide when switching into fullscreen. Also, since display outputs
are enumerated to the application, resolution calculation can rely only
on the native res of the output on which DX is initialized (so changing
the output of a running DX emulated app from the CPL application is without avail,
won't affect the next resolution calculation).
</p></li>
</ul>
<br>
<h2><font color = "#FFFFFF"><u>
8. General Control Panel (CPL) options
</u></font></h2>
<br>
Options on the General tab affects all wrapped APIs, that is, currently
Glide and DirectX.
<ul>
<li><font color = "#FFFFFF"><b>Output API</b></font><br>
Three output API's are available:<br>
<ul>
<li><p><font color = "#FFFFFF">Direct3D11 feature level 10.1</font></p></li>
<li><p><font color = "#FFFFFF">Direct3D11 feature level 10.0</font></p></li>
<li><p><font color = "#FFFFFF">Direct3D11 Microsoft WARP renderer</font><br><br>
D3D11 with FL10.0 is designed to be used with late
DX 10.0 hardware and has some limitations:
<ul>
<li>No mipmapping in Glide rendering</li>
<li>Limited operations on Z-buffers</li>
<ul>
<li>Buffers <font color="#FFFFFF">with forced MSAA can only be rendering targets;</font></b> they cannot be used as
<ul>
<li>depth textures</li>
<li>source of copy operations (Blit in DDraw)</li>
<li>locked for CPU-access (Lock in DDraw/ LockRect in D3D8)</li>
</ul>
</li>
<li>Faces of 3D-rendered cube-depth buffers cannot be
<ul>
<li>source of copy operations (Blit in DDraw)</li>
<li>locked for CPU-access (Lock in DDraw/ LockRect in D3D8)</li>
</ul>
</li>
</ul>
</ul>
<p>
WARP is a software renderer, I intended it to be
kind of a reference driver but I experienced some
rendering errors with it unfortunately.
</p>
</p></li>
</ul>
</li>
<li><p>
<font color = "#FFFFFF"><b>Video card (adapter)</b></font><br>In case you have more than one, then
<ul>
<li>
Glide:
<font color = "#FFFFFF">which one to use</font> for rendering. Option 'All of them' is equivalent to selecting the first video card in the list.</li>
<li>DirectX: it is a multi-device capable API so you can
choose <font color = "#FFFFFF">which adapter(s) are to be enabled</font> for the emulation.</li>
</ul>
</p></li>
<li><p>
<font color = "#FFFFFF"><b>Monitor (output)</b></font><br>
If you have multiple monitors then you can choose
which one(s) (connected to the selected adapter):
<ul>
<li>
<font color = "#FFFFFF">Glide: which monitor is used for fullscreen output.</font> When 'Default'
is selected then switching from windowed to fullscreen
during playing a game selects the monitor containing
the largest part of the game window.<br>
It can be overridden dynamically on a running Glide wrapped application and it also affects
dynamic resolution calculating (see resolution overriding).
</li>
<li>
<font color = "#FFFFFF">DirectX: which monitor(s) to enable to appear as DX devices to the application.</font>
'Default' enables all the monitors connected to the selected adapter. When the game or
application goes into fullscreen then it always happens on the monitor (device) that the
game/application selected for use. In case of a multidevice environment games and applications
often (and silently) selects the first available device which generally corresponds to the primary monitor,
but advanced apps allows the user to configure it through the app itself.
<br>
It can be overridden dynamically on a running DirectX-wrapped application however it only
affects the output, it is all about pure visuality. It doesn't affects dynamic resolution
calculating (see resolution overriding) and also, the application shall continue to see the
corresponding device in it original state (keep in mind that it can conflict with the app).
</li>
</ul>
</p></li>
<li><p><font color = "#FFFFFF"><b>Full Screen / Windowed</b></font><br>
See section "Usage".</p></li>
<li><p><font color = "#FFFFFF"><b>Unspecified/Centered/Scaled/Scaled with Aspect Ratio kept, for full screen</b></font><br>
If the current resolution the wrapped app using does not
match any natural resolution your adapter supports
then the display can be strethed out to fit all the
screen or its size can be left unchanged but centered.
<font color = "#FFFFFF">NOTE that if your video card supports overriding the scaling
method of applications, and you'd like to apply a scaling
with aspect ratio then it is recommended to set dgVoodoo's
scaling method to 'Unspecified' + set the scaling mode <b>on your
video card control panel</b> because dgVoodoo's internal scaling
is unfortunately not a sterling one.</font> It implies that you may
experience various problems like wrong mouse cursor or
glitches in rendering in certain applications. Scaling can
only be done well (transparently) on the GPU/display side.
<br>
C64-like output: well, if you are not a former C64 owner and fan, don't even try it,
I'm sure you won't like it at all. As dgVoodoo is my main hobby programming playground
these times I tried some algorhytms as part of it. It's not really a feature,
but the result of some former experimenting and can be funny for some scene demos.
</p></li>
<li><p><font color = "#FFFFFF"><b>Progressive scanline order</b></font><br>
Default scanline order is interlaced or progressive. It is
up to the output display device which one to choose altough
it chooses progressive when it is possible, I think, so
that when the device is capable of displaying a given
resolution with a given refresh rate with progressive order.
Otherwise it might choose interlaced order with halved
physical refresh rate.
If this option is enabled, you can only see enumerated
resolutions that are displayable with progressive order.
However, if a custom resolution is defined then it may
causes the output device to use lower physical resolution
than the wrapper set.
</p></li>
<li><p><font color = "#FFFFFF"><b>Enumerate refresh rates</b></font><br>
Enables the CPL application to enumerate refresh rates for
each resolution and enables the wrapper to override the
default refresh rate of the application.
<font color = "#FFFFFF">However using other than the app default can cause heavy
animation lagging or glitches!</font>
</p></li>
<li><p><font color = "#FFFFFF"><b>Color adjustments</b></font><br>
Brightness, color intensity (saturation) and contrast can be finetuned here.
The defaults are good in general so treat this as a
cool extra. (I'm using it in some cases for making colors
more vital to get a bit cartoon-like effect.)
</p></li>
<li><p><font color="#FFFFFF"><b>Inherit Color Profile in full screen mode</b></font><br>
When this option is enabled then dgVoodoo won't change the physical
gamma ramp of the screen but instead it solves the color adjustments
just like in windowed mode and so your pre-configured color profile(s)
for the given monitor(s) remain(s) preserved. Color adjustments are
relative to the predefined color profile in that case.
</p></li>
<li><p><font color = "#FFFFFF"><b>Keep window aspect ratio</b></font><br>
In windowed mode, when sizing the window, you can keep
the aspect ratio of the current resolution.
</p></li>
<li><p><font color = "#FFFFFF"><b>Capture mouse</b></font><br>
It's useful mainly (but not only) for multimonitor systems. If this is enabled then the mouse cursor
is forced into the application window to prevent accidental mis-clicks outside of it.
</p></li>
<li><p><font color = "#FFFFFF"><b>Center app window</b></font><br>
When a game controlling the mouse input is being run in windowed mode then
it's a pain to move it's window into the screen, so I thought it's a valuable option (was a request too),
but it can conflict with the mouse input or the app itself.
</p></li>
</ul>
<br>
<h2><font color = "#FFFFFF"><u>
9. General tips and known issues
</u></font></h2>
<ul>
<li>Forcing things (like resolution, antialiasing, texture filtering, etc) is
not a healthy thing. If an application or game uses low resolution or point
sampled textures or anything dissonant to the eye then it has reasons for
that. It is not because the programmers were so lame but of avoiding artifacts
that would otherwise get brought in (typical example is a bilinear filtered
texture with colorkey based transparency). If you force anything then
potentially get one of those artifacts. If you can live with it then it is ok,
use the wrapper in forced mode. If not then disable all forcings and use the
particular game or application in the mode it was designed for, because no
general method exists to fix such type of artifacts.</li>
<li>Controlling antialiasing cannot be done on per-primitive basis in Direct3D 11
when feature set larger than 10.0 is used. That is why antialiased drawing
is not emulated in Glide automatically in this version in any way (per-primitive or
per-edge). It can only be forced globally in the CPL application.</li>
<li>Fullscreen gamma ramp may not be supported by your card. nVidia and ATI seem
to handle it as expected but (e.g.) Intel does not.</li>
<li>When an application is being run in compatibility mode (Win98/XP etc) then
<font color = "#FFFFFF">the user's application data folder is different than the OS default.</font>
Therefore dgVoodoo cannot read the global config file and the default
config gets applied if no local config file is present. The preferred way
is creating a local config for such cases if other than the default needed.
(Perhaps using the user's appdata folder is not a too good idea after all,
I might change it later.)</li>
<li>If you have a multimonitor system then always try a game to run on the primary
one for the first time. Some games lock the mouse cursor to the screen area
where game window is assumed to be (the left-top corner of the desktop).
If such a game is being forced onto another monitor then clicking in the game
causes application focus loss because its window is not under the mouse cursor.</li>
<li>I don't know why but overriding refresh rates by arbitrary values (in the resolution selector combo box) does not
seem to work for DirectX emulation. It is still subject to investigation because the code
handling this is common for both Glide and DirectX. :(
</li>
</ul>
<br>
<h2><font color = "#FFFFFF"><u>
10. Change log
</u></font></h2>
<ul>
<li>
<font color = "#FFFFFF">2.54</font>
<ul><li>Windows input issues caused by the wrapper are fixed (Outlaws, GTA1 DDraw mode, etc.)</li>
<li>Rendering transition between Glide/DDraw is fixed (Outlaws)</li>
<li>Concept of setup application is replaced with concept of Control Panel (CPL)</li>
<li>Control Panel App:</li>
<ul>
<li>Contrast as a new color adjustment option is added</li>
<li>Preserving predefined monitor color profile(s) for fullscreen mode as an option is added</li>
<li>A general option for centering the application/game window is added</li>
<li>DirectX texture filtering options are changed, possibility of forcing anisotropic filtering is introduced</li>
<li>New scaling mode with C64-like output (it's not a feature but more like an experimenting code)</li>
<li>Visual cosmetics</li>
</ul>
<li>DirectX:</li>
<ul>
<li>Some of the DDraw code is guarded to avoid the unexpected worst-way DLL unloading<br>
Now LithTech engine games (Blood2, NOLF, Kiss Psycho Circus, ...) should tolerate Alt-Tab on Win10</li>
<li>Some other extra guarding to prevent crashes, Virtua Cop2 now works in D3D mode</li>
<li>Blit bug and clipper incompatibility fixed in DDraw (D3DRM, Tokipazu, tech demo Final Reality)</li>
<li>Minor issue in DDraw and bad L6V5U5 format descriptor is fixed (Kyro tech demos)</li>
<li>Adding support for plain surface format A8L8 (DDraw) (Matrox G400 Tech Demo)</li>
<li>D3D3 fog fixed (Shadows of The Empire patched to 1.1)</li>
<li>Execute buffer bug fixed in D3D (D3DRM)</li>
<li>Some D3D5 incompatibilities are fixed (crash and texture handling with Space Bunnies Must Die)</li>
<li>Fixing D3D6 bugs and calculations of old software-only lighting and other incompatible things (DX6 SDK sample applications (Immediate/Retained) + Fog City/Tirtanium demos)</li>
<li>Unexpected way of texture compression is implemented (D3D7, Soulbringer)</li>
<li>Adding support for Q8W8V8U8 texture format (D3D8) (3DMark 2001 SE, Nature, Pixel shader and Advanced Pixel shader test)</li>
<li>D3D8 device handling bug is fixed (multimonitor environment)</li>
<li>D3D8 compatibility fixings, now handling managed textures is compatible with Phantasy Star Online Blue Burst
(corrupt mipmapping)</li>
<li>Issue with D3D8 device capabilities and SYSTEMMEM vertex buffers are fixed (LKCC demos)</li>
<li>D3D8 DrawIndexedPrimitive bug fixed (Syberia 2)</li>
<li>Adding support for depth buffer format D24X4S4 (D3D8) (Matrox Parhelia Reef Tech Demo)</li>
<li>Adding support for volume textures (D3D8), though with limited number of formats
(Matrox Parhelia Coral Reef Tech Demo + DX8 SDK VolumeTexture sample + general)</li>
<li>Lower resource usage is partly included in this version.
For the time being, only the usage of GPU accessible system memory.</li>
<li>General bugfixing, like unexpected forced windowed mode (Soulbringer movies), vertex shader (missing fog in Colin McRae Rally), non-perspective polygon drawing bug,
fixed (Zanzarah The Hidden Portal), and a lot other</li>
<li>Handling depth buffers had some bugs at FL 10.0, fixed (D3D11)</li>
<li>Potential bad driving of D3D11 at FL10.1 when no resolution and MSAA is forced (D3D11) (Gorky17)</li>
<li>Some (regression and other) bugs in the D3D11 renderer are fixed</li>
<li>GeForce 4 profile is slightly modified to match a real GF4</li>
<ul>
<li>Now light beams in Splinter Cell 1 should be rendered correctly through the GF4 card type (unblurred lights with occlusion)</li>
</ul>
<li>2 new videocard types are added:</li>
<ul>
<li>GeForce FX 5700 Ultra (keeps the soft shadows for Splinter Cell 1 (because I like it :D) and will hopefully be feasible to provide place for new features later)</li>
<li>Matrox Parhelia-512 (for Matrox Coral Reef Demo 1.1 and other Matrox tech demos)</li>
</ul>
</ul>
<li>Glide:</li>
<ul>
<li>Glide fix (far background in front of the 3D world: Mig29, Uprising)</li>
<li>Texture memory report is modified to match that of a real 3Dfx driver (Slave Zero)</li>
</ul>
<li>Tons of code changing for new features that are not ready yet and so not included in this version</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.53</font>
<ul><li>Support for 'dynamic resolutions' (see section 'Resolution overriding')</li>
<li>Added support for 'd3dcompiler_47.dll', so Win10 users don't have to
download and mess with d3dcompiler dll, 47 is part of the Win10 OS.</li>
<li>Linear filtering was applied for upscaling the output-image even if the
scale ratio was 1.0, fixed</li>
<li>Some modifications on the CRT-like shader were done for correct CRT-like
appearance on high-res displays like a 4K monitor</li>
<li>Glide mode 'Compare to bias' is fixed (Esoteria demo)</li>
<li>Some other Glide rendering issues are fixed (Hype - The Time Quest)</li>
<li>DDraw system memory surface pitch is fixed to match that of DIBs
(Snow Wave Avalanche)</li>
<li>A DX8 bug is fixed, so Mafia now works, altough I experience z-buffer
glitches here and there (to be fixed)</li>
<li>Lot of general D3D/D3D8 bugs are fixed, too</li>
<li>GeForce4-style shadow buffering is reverse engineered and implemented in
the 'Geforce Ti4800' preset</li>
<li>Floating point arithmetic differences (incompatibilities) between vs1.x
and vs4.x are resolved, Splinter Cell 1 now works in shadow buffer mode</li>
<li>New dynamic vertex buffering algorhythm for removing rendering performance
bottleneck, better usage of GPU</li>
<li>The config application is now per-monitor DPI-aware, to have sharp
appearance</li>
<li>MSAA option name 'Auto' is changed to 'App driven'</li>
<li>New option for DirectX emulation is added (No texture filtering)</li>
<li>Changes in the default config:</li>
<ul>
<li>Capture mouse is on</li>
<li>MSAA is app driven</li>
</ul>
<li>Doc format is changed from txt to html and content is revised</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.52</font>
<ul><li>Support for new output APIs are added</li>
<ul>
<li>Direct3D11 at feature level 10.0 (there are some restrictions)</li>
<li>Direct3D11 Microsoft WARP renderer</li>
</ul>
<li>Support for rendering DirectShow movie playback</li>
<li>Resolution overriding for DirectX emulation is now available</li>
<li>New scaling mode (forced 4:3 aspect ratio) with/without CRT-like
appearance is added</li>
<li>MSAA support for DX8</li>
<li>Lot of DX8 bugfixings</li>
<li>A few DDraw/D3D bugfixings</li>
<li>Making 'VertexLayout' functionality be compatible with a real 3Dfx
driver (Glide3)</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.51</font>
<ul><li>Point sprite support for DX8 is added</li>
<li>New texture formats (A8, L8, A8L8) for DX7/DX8 are added</li>
<li>Tons of DX8 bugfixings, more compatibility</li>
<li>More DirectDraw compatibility in object handling + bugfixing</li>
<li>Regression bugs in Glide fixed</li>
<li>Capabilities of GeForce Ti 4800 and ATI Radeon 8500 are changed to be much
closer to the real ones (see the technical details in the DX readme)</li>
<li>AMD driver bug causing driver crash with Glide rendering is workarounded
now dgVoodoo should work on all AMD cards properly</li>
<li>'Fast video memory access' is now compatible with Unreal engines</li>
<li>Emulated method of stretching the display output with keeping aspect ratio
is added</li>
</ul>
<br>
<li>
<font color = "#FFFFFF">2.5</font>
<ul><li>First version of D3D8 implementation is added</li>
<li>Lot of bugs fixed during general DirectX code refactoring, I don't want
to detail them all here</li>
<li>Dynamic shader compiling for all API components for better performance
(see Usage and DirectX readme for details, you'll need D3DCompiler_43.dll
for this feature)</li>
</ul>
</li>
</br>
<li>
<font color = "#FFFFFF">2.45</font>
<ul><li>Heavily refactored DirectX emulation code for certain planned features</li>
<li>Full cooperating between Glide and DirectX</li>
<br>
<li>DirectDraw emulation:
<ul>
<li>True multidevice support, more robust DDraw emulation</li>
<li>OLE interface support for DirectDraw</li>
<li>DXTC (S3TC) block compression encoder is added, full support for
possible alpha-format conversions</li>
<li>Two new video card types are added with slightly different properties
(GeForce4 Ti 4800, ATI Radeon 8500)</li>
<li>DirectDraw emulation-only mode could fail, fixed</li>
<li>Various DirectDraw bugs/incompatibilities are fixed</li>
<li>Blitting bugs fixed + full support for blitting from primary surface</li>
</ul>
<br>
<li>Direct3D emulation:</li>
<ul>
<li>New colorkeying method added and existing colorkeying related bugs
are fixed</li>
<li>Bugs in rendering from execute buffers (points/lines), fixed</li>
<li>Bug in handling state blocks, fixed</li>
</ul>
<br>
<li>Glide rendering</li>
<ul>
<li>Resolution extension support (idea and technical concept by VEG and Zeus)</li>
</ul>
</ul>
</li>
</br>
<li>
<font color = "#FFFFFF">2.44</font>
<ul>
<li>DirectX emulation:</li>
<ul>
<li>Some surface/D3D device related bugs are fixed</li>
<li>Mirrored blitting was broken, fixed</li>
<li>24bit software surface support is added</li>
<li>support for DXT1-5 compressed textures is added but an S3TC encoder is
still missing for the cases when a compressed texture is the blitting
target</li>
<li>Transforming normal vectors was incompatible with MS D3D, fixed
This fix includes enabling/disabling of normalizing them, default was
wrong for older than DX7 interfaces</li>
<li>Colorkey blend capability is added</li>
<li>support is added for old mode-X display modes</li>
<li>Various other small bugs fixed that I can't remember of</li>
</ul>
</ul>
</li>
</br>
<li>
<font color = "#FFFFFF">2.43</font>
<ul>
<li>DirectX emulation:</li>
<ul>
<li>3D support for 8 bit surfaces is added (Colin McRae Rally)</li>
<li>Improved surface blitting, more optimal resource consuming for 3D
surfaces
<li>First version of fast surface video memory CPU-access is added
<li>Introducing 'lost' state into the default DX behavior, with additional
automatic self-restore mechanism for buggy DX applications
<li>3D TL vertex rendering incompatibilites, fixed
<li>Various small 3D/caps related bugs, fixed
<li>Several other bugfixes that I don't want to word here
</ul>
<li>Other:</li>
<ul>
<li>Some problems related to the window procedures and message handling
are fixed</li>
<li>Names of the wrapped running DX applications were displayed incorrectly,
fixed</li>
</ul>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.42</font>
<ul>
<li>Direct3D3 renderstate handling bugfixes (some of them were disabled)</li>
<li>Various DirectDraw bugfixes like object/structure version handling,</li>
surface blitting, basic ROP codes are added, and others</li>
<li>Compatibility fixings in DirectDraw surface creation functionality</li>
<li>Compatibility fixings in DirectDraw surface locking functionality</li>
<li>Compatibility fixings in Direct3D device creating</li>
<li>Fixing/refactoring light handling in general; now software vertex
processing can handle any number of them, and also, they can be added at
any index in Direct3D7</li>
<li>32 bit z-buffer support added</li>
<li>Minor Direct3D rendering bugs</li>
<li>Bad return code in an empty (but necessary) function on IDirect3DTexture,
fixed</li>
<li>Missing multithreading guarding in some Direct3D3 methods, fixed</li>
</ul>
</li>
<br>
</li>
<font color = "#FFFFFF">2.41</font>
<ul>
<li>Direct3D 3 support is added;
that is all Direct3D interface is supported now</li>
<li>Bug in the resolution enumerator in DirectDraw, fixed
(classic and all other resolutions are now enumerated with all bit depths.)</li>
<li>Resolution combo box was buggy in the setup; couldn't enumerate anything
when too much resolutions were available, fixed</li>
<li>Logic of selecting the refresh rate when unspecified rate is requested
by the application is changed</li>
<li>Overridable refresh rates</li>
<li>Bugfixings and improvement for blitting to the primary surface in
DirectDraw</li>
<li>Bugfixings for other general surface locking/blitting functionality</li>
<li>Minor DrawPrimitive bug fixed (missing triangles in Diablo II with
Direct3D renderer)</li>
<li>Bug with monochrome lighting is fixed
(discovered with Jedi Knight - Mysteries of the Sith)</li>
<li>Bug in surface blitting, fixed (The Settlers IV)</li>
<li>Bug/incompatibility fixings in surface handling in:
GetAttachedSurface, EnumerateSurfaces, SetSurfaceDesc and loading
textures from system memory surfaces to texture surfaces in video memory</li>
<li>DX wrapper is now more noshutdown-proof when unexpectedly pulled out from
the process memory area; LithTech engine based games now should work
(tested with Blood2 and Shogo Mobile Armor Division)</li>
<li>Various other small bugs fixed that I came across</li>
<li>Introducing 'unspecified' scaling mode. If you want to apply
'scaling but keeping aspect ratio' then select it on your graphics driver
control panel and select 'unspecified' mode in dgVoodoo Setup.
If it does not work then your only chance is forcing it through the
graphics control panel (it all seems to be a Windows issue).</li>
<li>Disabling 'Bilinear blit stretch' in the default configuration.
I've seen a few games where it caused more 'harm' than coolness that is
why I decided to disable it by default.</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.4</font>
<ul>
<li>DirectX rendering:</li>
<ul>
<li>New, improved version of DirectDraw. It fully supports creating and
blitting to/from textures, Z-buffers and 3D-renderable surfaces with
several pixel formats. Also, general API-behavioring is more accurate
to the original one because of lot of bugfixings and heavy reverse
engineering.</li>
<li>Gammacontrol interfaces is added to DirectDraw</li>
<li>First version of Direct3D implementation is added and (almost) fully
supports DirectX5, DirectX6 and DirectX7. For more and technical details,
see the DirectX readme. Direct3D interfaces are also as carefully reverse
engineered as DirectDraw ones.</li>
</ul>
<li>Glide rendering:</li>
<ul>
<li>Bug in handling utility textures, fixed (missing textures in South Park)</li>
<li>Bug with PALETTE6666 extension fixed
(unreadable menu text in Need For Speed - Porsche 2000 with a Voodoo2
or higher)</li>
<li>Bug with tripebuffering fixed (missing 3D elements in The Tainted)</li>
<li>Adapting Glide3 to 3Dfx mini GL driver (3Dfxvgl.dll),
(American McGee's Alice):</li>
<li>Lowering gamma bitnum to 8 (3Dfx didn't follow his own rules...)</li>
<li>Some init/exit code could get stuck because they can get called from
DLLMain, fixed</li>
</ul>
<li>Setup</li>
<ul>
</li>'Apply' button in the setup is added
(I got bored to OK'ing and reopening the setup each time I want to
modify the config of more folders or running instances)</li>
</ul>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.32</font>
<ul>
<li>Possibility of overriding the application resfresh rate is added</li>
<li>Small Glide3 fix (bug with Turok 2)</li>
<li>Minor Glide3 shader modification (SurfDemo)</li>
<li>Glide lib is made thread-safe at the needed (minimal) level
(means avoiding crashes at certain circumstances where the original
3Dfx driver survived beause of its architecture; a Turok 2 issue again,
using background threads)</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.31 - It is a slight patch version for 2.3:</font>
<ul>
<li>Fixing Glide 3DF reader for various line ending types (Crazy Marbles)</li>
<li>A bug found in one of Glide state setting functions, fixed (Crazy Marbles)</li>
<li>Hidden/shown cursor glitch is (seems to be) fixed in windowed mode</li>
<li>Possibility of forcing progressive scanline order on output display is
now available in the setup</li>
<li>Fixing some DirectDraw bugs thanks to other pending developments
(what I don't want to release yet)</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.3 - This won't be easy because I suspended developing for a few months, but:</font>
<ul>
<li>First I refactored the code in order to any new driver component or
renderer could be added easily</li>
<li>Fixed some issues with multiple video cards/monitors. Now it works OK
in a multi-videocard system (not so frequent usecase but I like if
something is done well)</li>
<li>Added first version of DirectDraw component to the driver</li>
<li>Minor Glide shader modifications</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.2</font>
<ul>
<li>Napalm build added</li>
<li>Glide3 fixings: erroneous clip coord space handling</li>
<li>Small bug related to lfb write with active pipeline, fixed</li>
<li>Setup got revamped a bit</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.15</font>
<ul>
<li>Full support for texture buffers via Glide3 extension 'TEXTUREBUFFER'
All 16 bit texture formats are supported as rendering format except for
paletted ones</li>
<li>Bad color order for delta0 color, fixed
(seems I'm not in luck with RGBA order in general)</li>
<li>Some bugs are fixed I found through my own tests: unwritten alpha values
to the aux buffer, bogus Glide3 viewport handling</li>
<li>More optimization in LFB lock handling to avoid slowdowns on locking
patterns/usage like in King's Quest: Mask of Eternity
(Thanks for the feedback & help, Andrew!!)</li>
<li>A lot of code changed thanks to other developments, so I hope I have
not broken anything</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.14</font>
<ul>
<li>Unified Memory Architecture (UMA) along with TEXUMA Glide3 extension
is supported</li>
<li>Some Voodoo hardware properties are changed according to UMA/non-UMA
architecture<br>
(Now Extreme Assault works with Gulikoza's latest patch, but see Tips
for more)</li>
<li>Optimizations for lfb read/write region (including 3Dfx watermark)</li>
<li>A missing thing from PCI emulation is implemented for perfect lfb
access with active pixel pipeline</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.13</font>
<ul>
<li>Improved PCI emulation for LFB access: heavy lfb-lockers like Carma1
and Pyl SHOULD run much smoother now (see Tips for more)</li>
<li>Glide3 fixings: bad color order with packed RGBA, uninitialized
texchroma state</li>
<li>General glide fixings: bug in glide setstate and clip rectangle</li>
<li>Missing feature "fog with iterated z" is implemented along with minor
shader modifications</li>
<li>Support for splash screen and shameless plug: dgVoodoo needs the 3Dfx
splash dlls to get it working (3DfxSpl2.dll, 3DfxSpl3.dll, all with
version 1.0.0.4), however I did not include them in the core dgVoodoo
pack</li>
<li>Minor modification for DosBox</li>
<li>TMUnum selector combobox is fixed, I fcked it down last time</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.12</font>
<ul>
<li>More shader optimizations: most critical ones are reduced to 90% in
size again (So, by now, their size are 65% of the original. I hope I
have not messed up anything with them.)</li>
<li>Optional 16 bit depth buffer (see Tips for why is that)</li>
<li>Some fixings in Glide3 thanks to some unexpected API-driving
(scene demo Virhe)</li>
<li>Some bugs related to maintaining/switching/handling windowed/fullscreen
state are fixed</li>
<li>Voodoo2 with 1 TMU is no longer selectable in the setup; A Voodoo2
always have 2 TMUs and it is the default now because shaders are
optimal enough now to handle 2 TMUs</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.11</font>
<ul>
<li>Refactoring GPU querying to get it to work with ATI drivers
(ATI does not seem to handle them correctly, my code was always fooled
into infinite loop at a certain point)</li>
<li>Further shader optimizations: most critical ones are reduced to 90% in
size</li>
<li>Minor cursor-issue related to losing window focus, fixed</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.1</font>
<ul>
<li>Potential stalling rendering (even on fast GPUs) when switching screen
modes, fixed</li>
<li>Shader optimizations: most critical ones are reduced to ~80% in size</li>
<li>Ability to configure running Glide wrapped applications dynamically
(see section 'Configuring')</li>
<li>Different exposed capabilities according to the selected card type</li>
<li>More Dosbox compatibility</li>
<li>Bug in gammaramp handling, fixed</li>
<li>Bug in fogtable generating code, fixed</li>
<li>Bug in PCI access emulation, fixed</li>
<li>Forced vSync is enabled by default to avoid overkilling the GPU with
wild-rendering applications</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.01</font>
<ul>
<li>Undrawn polygons when updating TMU memory, fixed</li>
<li>Potentially bad drawing of strip-primitives in Glide3, fixed</li>
<li>Malfunctioning LFB lock with 32bit formats when PCI emulation is
enabled, fixed</li>
<li>Fullscreen/Windowed state was not always remembered between
Glide-initializings, fixed</li>
</ul>
</li>
<br>
<li>
<font color = "#FFFFFF">2.0 - The original version</font>
</li>
</ul>
Have luck,<br>
Dege
<hr></hr>
<font>
</body>
</html>