Ian Curtis
40c8259130
Rewrite the whole project for GL4+. I figured if we removed the limitation of a legacy rendering API we could improve things a bit. With GL4+ we can do unsigned integer math in the shaders. This allows us to upload a direct copy of the real3d texture sheet, and texture directly from this memory given the x/y pos and type. This massively simplifies the binding and invalidation code. Also the crazy corner cases will work because it essentially works the same way as the original hardware.
...
The standard triangle render requires gl 4.1 core, so should work on mac. The quad renderer runs on 4.5 core. The legacy renderer should still work, and when enabled a regular opengl context will be created, which allows functions marked depreciated in the core profiles to still work. This will only work in windows/linux I think. Apple doesn't support this.
A GL 4.1 GPU is now the min required spec. Sorry if you have an OLDER gpu. GL 4.1 is over 12 years old now.
This is a big update so I apologise in advance if I accidently broke something :]
2022-11-07 21:33:01 +00:00
Ian Curtis
b2e5a200da
Fix build for linux (just missing header)
2022-10-17 09:34:11 +01:00
Ian Curtis
f0872cc998
Upgrade the glsl shader class a bit. Add a const char* comparitor so we can use a map with a simple "string" key. Fine to use when performance is not critical.
2022-10-16 21:03:41 +01:00
toxieainc
e644751f01
after clarifications, minor cleanup
2022-10-10 16:35:02 -07:00
toxieainc
75771b3d14
remove 2 dupe function calls, where ProcessLos should actually be rather costly
2022-10-10 16:35:02 -07:00
Fernando Casas Schössow
412e9232d7
Fix new 3D engine texture2DLod function missing error on Linux/MESA. MESA requires needed extensions to be explicitly declared in code otherwise it will not enable them.
2022-10-10 16:30:09 -07:00
toxieainc
5f97e5af6c
address review
2022-10-03 17:59:59 -07:00
toxieainc
519d695f57
address review and move bit casts to new header
2022-10-03 17:59:59 -07:00
toxieainc
1b0e3be8dc
use correct slash
2022-10-03 17:59:59 -07:00
toxieainc
22ffb5cc19
Harmless math warning fixes. map->unordered_map in CNew3D::CacheModel. Avoid general aliasing problems (using bit_cast or the recommended/optimized-away memcpy).
2022-10-03 17:59:59 -07:00
toxieainc
d7041a83c9
fix missing version GLSL compiler warnings on startup
...
happens (at least) on Intel drivers
2022-08-19 08:41:22 -07:00
toxieainc
6c24bf7c8f
Optimize quad rendering by replacing the double computations for the area computation with the equivalent shoelace algorithm along with kahans algorithm to compute the cross products. In addition pull out the /w to the end, which increases precision even more.
...
Thus making the result similar to the fp64 version, tested e.g. with harleys first person mode (all artifacts still gone as before).
Improves perf on low end boards (e.g. Intel) dramatically (10fps with harley before, now 70 on my laptop), and even on higher end (e.g. NVIDIA laptop, quads are now faster than tri pipeline on my laptop).
2022-08-16 21:34:31 -07:00
toxieainc
4961951a89
fix a real error (m68kdasm) and some harmless performance warnings and use modern headers
2022-07-11 18:10:41 +02:00
Ian Curtis
0ef90899e1
Double buffer the line of sight values. Should allow the correct values to be returned if GPU threading is enabled.
2022-01-02 12:48:09 +00:00
Matthew Daniels
9ffce8b92a
Getting rid of most of the includes from Supermodel.h; each file now explicitly includes the header files it needs.
...
Making changes to a header file should no longer force the entire project to recompile.
2021-11-22 17:15:06 +00:00
Ian Curtis
e3374256ff
Just a few compile warnings
2021-02-20 22:19:16 +00:00
Ian Curtis
75f8ee61a3
fix missing polys with quad renderer
2020-09-14 20:01:52 +00:00
Ian Curtis
38c3ff61f9
Clip scroll fog to viewport, instead of filling entire screen. Fixes fog bug in Daytona credits.
2020-09-08 09:10:24 +00:00
Ian Curtis
aaa26f678c
Update scroll fog logic. Should fix the credits in virtua fighter and daytona that have fogging applied to the background layer and shouldn't.
2020-09-07 16:25:18 +00:00
Ian Curtis
ba917aca6d
Update glew version
2020-07-31 19:18:51 +00:00
Ian Curtis
6f6c98c671
The translator map seems to work with paletted colour values too, and the result is not clamped. Colours are passed to the GPU as unsigned bytes to multiplying by 16 will overflow, so we do the logic in the shader. If we passed floats we could skip the shader logic.
2020-05-11 09:05:46 +00:00
Ian Curtis
e2ad593e88
When the translator map is enabled the colour values seem to use 4 bits, 0-16. Why not 0-31 I don't know. Anyway virtua on is overflowing these values for some of the smoke effects. For us the numbers were wrapping around. Clamping is enough to fix this. (Thanks model123)
2020-05-07 19:34:22 +00:00
Ian Curtis
5ace960f14
tweak value so the map indicator still works at the start of spikeout
2020-01-04 18:15:30 +00:00
Ian Curtis
6b8a29105a
Sutherland-Hodgeman clipping only works for planar primitives. Scud is rendering non planar quads and this breaks our algorithm a little when using the quad renderer. Stretching the near plane a few % is enough to fix it.
2020-01-04 13:48:14 +00:00
Ian Curtis
d711afade1
Only need to clip against 4 planes for poly culling
2020-01-04 13:45:55 +00:00
Ian Curtis
605dad2c02
Fix the sky in harley in first person mode where pixels in the sky are culled when they shouldn't be with the quad renderer. Basically we were running out of precision in a rare corner case. Doing the maths with double precision and casting back to float was enough to fix the issue.
2019-12-27 21:36:46 +00:00
Ian Curtis
a5858e635d
To calculate the mipmap value the opengl needs to calculate the difference in the texture coordinates between adjacent pixels. If there are no adjacent pixels the hw may need to spawn invisible fragments outside of the visible polygon. Our algorithm was culling these out so the mipamp calculation failed for edge pixels. Anyway this fixes quad rendering looking broken with the latest nvidia drivers.
2019-12-10 11:40:39 +00:00
Ian Curtis
06688de5fc
Really should cull against 5 frustum planes.
2019-11-15 20:00:25 +00:00
Ian Curtis
06b43c45b3
Ocean hunter in the middle of the game is passing a few matrices with FLT_MAX inside them, which blows apart our near/far calculation. The hardware must have some method to sanitize the near/far for instance if you render something extremely close to the origin you will also blow apart any near/far calc.
2019-11-02 20:11:48 +00:00
Ian Curtis
714f6a123a
skip invalid culling nodes
2019-07-28 12:14:13 +00:00
Ian Curtis
17f4103123
A culling node must follow immediately after a viewport.
2019-07-26 16:39:58 +00:00
Ian Curtis
f634d19fdc
Fix shader. Why this worked on my nvidia card .. I'm not sure.
2019-01-24 19:11:26 +00:00
Ian Curtis
8094c2e2b7
Composite the alpha layers at the end of rendering. To do this we need to mask the alpha pixels with the opaque pixels from the next priority layer. Fixes some overlapping shadows in vf3tb that have different priority layers. I assume that was a game bug, but it works on the real h/w.
2019-01-21 14:30:42 +00:00
Ian Curtis
864bb36b5a
Technically backface culling should cull polys when the dot product = 0, since when it equals 0 the polys is perpendicular to the camera and thus invisible. When you complete sega rally2 (if you can get that far lol) the champagne is invisible. The reason is because all the face normals are 0. So when multiplied by the model matrix they are still 0 and get culled. Tweaking the condition to only cull polys when greater than 0 fixes this, and allows these 'bad' polys to render as they do on the model3.
2019-01-16 01:07:56 +00:00
Ian Curtis
6075352868
Optimise depth calculation for quad shader.
2018-11-27 20:43:27 +00:00
Ian Curtis
538a714086
Fade out microtextures with higher textures LODs. Fixes incorrectly applied microtextures in LA machineguns.
2018-10-23 00:16:23 +00:00
Ian Curtis
bf4d725970
Smooth texture repeat makes no sense for alpha/contour textures with pixel dilate. HW seems to treat them as non smooth anyway. Also implement some line of sight stuff, used by Scud. Really need to check the threading/synchronisation of the register reads but it basically works.
2018-10-19 20:59:46 +00:00
Ian Curtis
42eaa7f3d8
fix copy paste error :]
2018-10-14 10:05:24 +00:00
Ian Curtis
3eeec35e7c
Correctly emulate the real3d pro-1000 texture modes in our shader.
2018-10-13 13:29:45 +00:00
Ian Curtis
7bcc70a170
Update makefile
2018-10-01 17:42:45 +00:00
Ian Curtis
3dbfa73734
Both lemans24 and dirt devils are rendering some totally transparent objects as the first model in each viewport. The HW seems to skip these entirely, and including them breaks our near/far plane calculations leading to Z fighting.
2018-09-19 20:43:41 +00:00
Ian Curtis
e3255e45f3
Tweak the ratio for the near plane. Fixes missing text on the map indicator at the start of spikeout. The vertices are 0.003 units apart so a tonne of precision is required at the near plane to not depth test out.
2018-09-18 21:46:38 +00:00
Ian Curtis
c5b156d95d
remove debug code
2018-09-18 21:20:15 +00:00
Ian Curtis
5dab9910e2
avoid double matrix load
2018-09-16 08:43:13 +00:00
Ian Curtis
b5f9ad9651
Quad rendering engine. Set QuadRendering = 1 in the ini file to use, or -quad-rendering at the end of the command line to use.
2018-09-13 12:50:34 +00:00
Ian Curtis
e4f5f0bcaf
Sega bass fishing is starting some off the meshes with a shared vertex. Without having a previous vertex to share with, the values were just uninitialised and junk. The hardware itself seems to hold the value from the previous mesh, and sega bass fishing relies on this undefined behaviour to function correctly. Storing the cached vertices as member variables instead of locally to the function means it holds the values from the last mesh, and uses those values instead of random garbage.
2018-09-02 21:36:24 +00:00
Ian Curtis
c1c2dedcfa
remove dead variable
2018-08-09 21:57:51 +00:00
Ian Curtis
9f5a19a04a
Use correct PCI IDs (Harry Tuttle)
2018-07-09 08:06:06 +00:00
Ian Curtis
73ff32a10d
fix cast, and remove extra ; that had snuck into the shaders
2018-06-18 10:24:46 +00:00
Ian Curtis
f9be1259c0
Opaque polys definitely depth test with less than or equal. Virtua striker is drawing co-planar polys for the bar gfx
2018-06-17 11:30:01 +00:00