Commit graph

107 commits

Author SHA1 Message Date
Magnus Norddahl
d3d8180f57 Resize framebuffer in windowed mode to match the client area 2016-09-12 13:04:36 +02:00
Christoph Oelckers
a827bab576 - refactored the use of tag lists so that they do not have to be passed around between functions.
This means that the varargs functions themselves are now responsible for parsing them into DrawParms.
This was done because DrawTextV made a blanket assumption that every single vararg has the size of a 32 bit integer and caused crashes when anything else was passed. It also failed to eliminate any tag that is incompatible with text display. These will now abort DrawText and trigger an assert.
2016-04-09 20:47:54 +02:00
Christoph Oelckers
e2ae7d8f5d - removed the unused x and y parameters from DrawTextureParms. 2016-04-09 12:59:50 +02:00
Christoph Oelckers
43dd759859 - changed DrawTexture so that the parameters get parsed in the varargs function directly and that the virtual function that is getting called gets the fully prepared data.
In order to avoid passing around tag lists, DrawTextV needs to parse everything itself and then pass a fully initialized structure to DrawTexture. This cannot be done if all variants require a varargs tag list.
Apparently the only reason for the old approach was the 'hw' parameter which was never used.
2016-04-09 12:55:12 +02:00
Christoph Oelckers
66929cbaff - floatified p_trace, p_slopes and p_udmf.cpp.
- major cleanup of unused code.
2016-03-30 16:30:22 +02:00
Christoph Oelckers
dabed04d2a - floatification of p_3dfloors, p_3dmidtex and p_acs.cpp plus some leftovers.
- removed all references to Doom specific headers from xs_Float.h and cmath.h.
2016-03-26 12:36:15 +01:00
Christoph Oelckers
41387622f2 - changed angle parameter of FillSimplePoly. 2016-03-24 16:36:43 +01:00
Christoph Oelckers
1eb106e2c5 - floatification of some alpha parameters. 2016-03-22 13:35:16 +01:00
Randy Heit
55142078d8 Normalize line endings 2016-03-01 09:47:10 -06:00
Randy Heit
09a17c2198 Quiet some narrowing conversion warnings from VS2015 2016-02-05 22:18:53 -06:00
Randy Heit
42e9a6a711 Make atlas size a macro definition and default it to 512x512 (was 256x256) 2016-01-10 22:14:35 -06:00
Randy Heit
aaac5ac7a1 Use not so brilliant backgrounds for allocated atlas backgrounds 2016-01-10 22:01:29 -06:00
Randy Heit
4f0046105d Change texture atlas display to show allocated rectangles 2016-01-10 21:09:16 -06:00
Randy Heit
bf31d66d31 Use a better packing algorithm for the texture atlases
- The old algorithm is something I threw together that produced decent,
  but not spectacular results since it had a tendency to waste space by
  forcing everything onto "shelves".
  The new packer is the Skyline-MinWaste-WasteMap-BestFirstFit algorithm
  described by Jukka Jylanki in his paper *A Thousand Ways to Pack the Bin - A
  Practical Approach to Two-Dimensional Rectangle Bin Packing*, which can
  currently be read at http://clb.demon.fi/files/RectangleBinPack.pdf
  This is minus the optimization to rotate rectangles to make better fits.
2016-01-08 22:37:06 -06:00
Randy Heit
f330a81909 Rename packing textures to texture atlases for the D3D code
- I figure since I now know the "proper" name for these things, I should
  call them by it.
2016-01-08 20:08:10 -06:00
Randy Heit
4f04fb4fbd Don't use AdjustWindowRectEx to determine window sizes
- GetSystemMetrics can lie about the window border sizes, so we can't
  trust it if the executable is flagged as Vista-targetting
  (default behavior for VS2012/2013).
2015-03-11 13:59:51 -05:00
Braden Obrzut
d8ff4ec281 - Fixed: All clang 5.0 warnings.
- Renamed autostart/autozend since Xcode’s build process links in strictly alphabetical order.
2014-01-05 19:50:09 -05:00
Randy Heit
be0845acf1 - Moved all BorderNeedRefresh and SB_state updating code into separate functions that won't crash if screen is NULL.
SVN r4167 (trunk)
2013-02-27 03:10:25 +00:00
Randy Heit
11ca707485 - Added vid_maxfps cvar to limit the frame rate to some arbitrary rate between 35 and 1000 FPS. It
defaults to 200. Setting it to 0 will restore the previous behavior of having no frame rate
  limit. Note that vid_maxfps 35 is NOT the same as cl_capfps 1. cl_capfps caps the frame rate
  by tying the video update directly to the game timer. With vid_maxfps 35, the video update and
  game timer are running on separate timers, and results will not be as good as with cl_capfps 1,
  which uses only one timer.

SVN r3872 (trunk)
2012-09-16 04:40:56 +00:00
Christoph Oelckers
814ce3d39c - fixed: The D3D FlatFill function ignored the alpha channel, unlike its counterpart in the paletted renderer.
SVN r3702 (trunk)
2012-06-21 08:54:50 +00:00
Randy Heit
0d302269bb - Fix GCC errors in fb_d3d9.cpp.
SVN r3492 (trunk)
2012-03-30 04:03:46 +00:00
Randy Heit
162ad601ba - Fixed bug introduced in r3412: The SetStyle() call needs to come after the scissoring check,
because the latter can flush the quads, including the one SetStyle() just set a style for.

SVN r3429 (trunk)
2012-03-12 01:22:19 +00:00
Randy Heit
76b5e7ef60 - Fixed: D3DFB::DrawTextureV() did not disable the scissor test if it was needed but SetStyle()
decided there was nothing to draw. In practical terms, this means that if your weapon is
  completely invisible, the game would not draw anything outside of the main play area because
  the scissor test would be left on for the entire frame and not just the weapon's quad.

  Making the call to SetStyle() before the scissor check is enough to fix this.

SVN r3412 (trunk)
2012-03-09 00:12:04 +00:00
Christoph Oelckers
fbff5ca932 - moved r_interpolate.cpp and r_translate.cpp to r_data.
- merged r_jpeg.h into jpegtexture.cpp because that's the only place where it's ever used.


SVN r3255 (trunk)
2011-07-06 08:50:15 +00:00
Christoph Oelckers
5c6fd66ed5 - rename src/resources to src/r_data.
SVN r3254 (trunk)
2011-07-06 07:35:36 +00:00
Christoph Oelckers
4626492f50 - separated all colormap related code from v_palette.cpp and r_data.cpp into its own file.
SVN r3245 (trunk)
2011-07-03 10:47:35 +00:00
Randy Heit
4b78b07aca - Fixed: D3DFB::Draw3DPart() treated the screen's pitch as if it always equaled the width.
Considering this hasn't been guaranteed since before the D3DFB class was even written, this
  should have never made it in as-is.

SVN r3241 (trunk)
2011-06-18 05:18:28 +00:00
Randy Heit
59b6c5ef5c - Removed a couple warnings about implicit vector truncation reported by fxc. (Apparently, it
also decided to compile some other shaders slightly differently, too.)
- Fixed: The InGameColormap had been designed without taking alpha into consideration.
  As the least likely parameter to be used, desaturation has been moved into a constant
  register to make room for the alpha parameter to live in the vertex's color value.

SVN r3208 (trunk)
2011-05-15 22:30:20 +00:00
Randy Heit
619634c1f8 - Move the call to DrawLetterbox() into D3DFB::Flip() so that it is the last thing that happens
before the scene is presented. Now it properly obscures 2D graphics.

SVN r3183 (trunk)
2011-04-17 04:04:34 +00:00
Christoph Oelckers
231e7a1c6d - added a new render style 'Shadow'. Essentially it's just a black translucent stencil with an alpha of 0.3. The purpose of this style is to be used as a software renderer approximation of GZDoom's spectre effect.
- allow setting 'Shadow' as default fuzz effect
- changed CVAR conversion that strings 'false' and 'true' get evaluated as integers 0 and 1 respectively so that changing boolean CVARs to int does not destroy their values.


SVN r3076 (trunk)
2010-12-25 23:27:26 +00:00
Christoph Oelckers
7e503d2f70 - fixed: D3DFB::Clear used the palette index even when a valid color was passed to it.
SVN r3045 (trunk)
2010-12-16 00:21:13 +00:00
Christoph Oelckers
ec0b07b5e2 - added Entryway's AM_Rotate optimization.
SVN r2739 (trunk)
2010-09-10 13:49:08 +00:00
Christoph Oelckers
9a4abe0915 - merged automap branch into trunk.
SVN r2609 (trunk)
2010-08-27 15:20:05 +00:00
Randy Heit
8d5ca6501a - Add a NULL FrontCopySurface check to D3DFB::GetCurrentScreen, because this can apparently
be NULL when starting with -timedemo or -playdemo. (But it never happened for me in the
  debugger.)

SVN r2474 (trunk)
2010-07-30 03:21:13 +00:00
Christoph Oelckers
545a892faa - added Firebrand's patch to rename 'swap' due to naming conflicts in newer MSVC compilers.
SVN r2449 (trunk)
2010-07-23 21:19:59 +00:00
Randy Heit
e379658143 - Added multimonitor support, as per Tom Seddon's code. vid_adapter controls which one to use,
and vid_listadapters prints them.

SVN r2417 (trunk)
2010-07-08 23:59:45 +00:00
Randy Heit
2090c03d88 - Fixed: D3DFB::GetScreenshotBuffer() must not offset the buffer pointer for letterboxed modes,
since the screenwipe speedup fixes also mean that this function no longer operates directly
  with the front buffer, but rather with a copy that is not letterboxed.

SVN r2355 (trunk)
2010-06-06 04:53:19 +00:00
Randy Heit
e9bbe4f1ff - Added more logging for D3DFB CreateDevice() attempts.
SVN r2329 (trunk)
2010-05-14 04:13:59 +00:00
Randy Heit
24f23718b7 - Added GetHR support to D3DFB for querying the error code when device creation fails.
- Should still check for a NULL device when CreateDevice() returns D3DERR_DEVICELOST.

SVN r2328 (trunk)
2010-05-14 04:06:30 +00:00
Randy Heit
b2a4ffc718 - Fixed: IDirect3D9::CreateDevice() can return D3DERR_DEVICELOST if you want exclusive mode and
some other application already has it. While technically this is a failure, the device is
  still created, so we can continue using it anyway.

SVN r2326 (trunk)
2010-05-14 03:54:35 +00:00
Randy Heit
88b4ab52ad - For windowed and pixel doubled modes, use a chain of two TempRenderTextures and
swap between them each frame. The one that's not the TempRenderTexture is used
  as the FrontCopySurface without the need for a copy operation. This removes the
  performance penalty the previous commit introduced for these modes.

SVN r2014 (trunk)
2009-12-02 05:49:45 +00:00
Randy Heit
d924575b1e - Fixed: After the previous screenwipe changes, the melt type no longer worked
properly in letterboxed modes.
- Added another surface to receive a copy of the top back buffer immediately
  before it is presented. This effectively produces a copy of the front
  buffer without the performance penalty of GetFrontBufferData, so fullscreen
  wipe preparation and screenshots are faster now. At lower resolutions,
  always copying the backbuffer does incur a slight FPS hit, but it's
  practically free at higher resolutions.


SVN r2013 (trunk)
2009-12-02 05:02:40 +00:00
Randy Heit
80034135ef - The initial wipe screen is now kept in video memory. I had previously
assumed that since the wipes only run at 35 FPS, the time spent DMA'ing
  it from system to video memory would be acceptable. Apparently I was wrong.
  In particular, updating the same surface several times probably has to
  synchronize between each one, making melt particularly slower than it
  needs to be.


SVN r2012 (trunk)
2009-12-01 03:15:00 +00:00
Randy Heit
a5c8b33f10 - Initialize TempRenderTexture and the back buffer to black upon creation.
SVN r2008 (trunk)
2009-11-29 02:42:20 +00:00
Randy Heit
cdb26a9b28 - Fixed: Windowed mode always needs to draw to the temporary surface, even
when not gamma correcting, so that D3DFB::GetCurrentScreen() can read from
  it.


SVN r2007 (trunk)
2009-11-29 02:33:52 +00:00
Christoph Oelckers
d14faa5f98 - fixed: Morph weapons weren't destroyed because the code checked for
them in the unmorphed player class.
- fixed: With padding the largest texture to fit into a page is 254x254.


SVN r2005 (trunk)
2009-11-28 07:46:30 +00:00
Randy Heit
2b5f765982 - Added padding around packed textures to compensate for apparent NVidia
texture coordinate imprecision.


SVN r1988 (trunk)
2009-11-19 01:49:19 +00:00
Randy Heit
de8ec46c06 - Fixed: R_GetOneSkyColumn() and R_GetTwoSkyColumns are mulscaling an
unsigned integer that can use all 32 bits. They must therefore use
  the unsigned mul instruction rather than the signed imul instruction.
- Fixed several signed/unsigned comparison and possibly uninitialized
  variable warnings flagged by GCC.


SVN r1965 (trunk)
2009-11-08 02:51:22 +00:00
Randy Heit
4ebfdac887 - Changed all coordinates for DrawTexture() to floating point so that the
player sprites will retain the same precision they had when they were
  rendered as part of the 3D view. (needed for propery alignment of flashes
  on top of weapon sprites) It worked just fine for D3D, but software
  rendering was another matter. I consequently did battle with imprecisions
  in the whole masked texture drawing routines that had previously been
  partially masked by only drawing on whole pixel boundaries. Particularly,
  the tops of posts are calculated by multiplying by spryscale, and the
  texture mapping coordinates are calculated by multiplying by dc_iscale
  (where dc_iscale = 1 / spryscale). Since these are both 16.16 fixed point
  values, there is a significant variance. For best results, the drawing
  routines should only use one of these values, but that would mean
  introducing division into the inner loop. If the division removed the
  necessity for the fudge code in R_DrawMaskedColumn(), would it be worth it?
  Or would the divide be slower than the fudging? Or would I be better off
  doing it like Build and using transparent pixel checks instead, not
  bothering with skipping transparent areas? For now, I chop off the
  fractional part of the top coordinate for software drawing, since it was
  the easiest thing to do (even if it wasn't the most correct thing to do).


SVN r1955 (trunk)
2009-11-01 01:27:33 +00:00
Randy Heit
09866b2cff - Reinstated the off-by-one check in D3DFB from r399. I thought I could get by
at just fixing it at a specific value, since the supply of SM14 cards isn't
  all that diverse and all from ATI, but apparently Radeon 8500s and 9000s
  have different precision levels in their pixel shaders. See bug report
  <http://forum.zdoom.org/viewtopic.php?p=444523>
- Removed unused variables FBFormat and PalFormat.

SVN r1901 (trunk)
2009-10-08 23:44:50 +00:00