Commit graph

889 commits

Author SHA1 Message Date
Clownacy
cb4a9d40b9 Added missing GLEW headers 2019-08-15 18:45:45 +00:00
Clownacy
22dc6836c5 Shut up a warning 2019-08-14 17:57:19 +00:00
Clownacy
56adcd9dfe Convert SDLTexture glyphs to static textures
This way they don't need regenerating in the first place.
2019-08-14 17:06:16 +00:00
Clownacy
4f057dd72a Revert "Split glyph surface creation and pixel upload"
This reverts commit 5da3b72fca.
2019-08-14 16:30:48 +00:00
Clownacy
f354b84f6a Revert "Glyphs now regenerate with the rest of the game's textures"
This reverts commit aa6174b3f2.
2019-08-14 16:26:37 +00:00
Clownacy
add4e69374 Made Sound.cpp more accurate 2019-08-13 20:45:50 +01:00
Clownacy
8f5370ea81 Fix the MSVC2003 build, and add RestoreTextScript to the...
...devilution-comparer list.
2019-08-13 20:03:13 +01:00
Clownacy
e708dc3a7d Make the surface_metadata struct match the original 2019-08-13 19:48:18 +01:00
Clownacy
aa6174b3f2 Glyphs now regenerate with the rest of the game's textures
God-damn this code is ugly
2019-08-13 18:32:44 +01:00
Clownacy
5da3b72fca Split glyph surface creation and pixel upload
When DirectX-SDL2 loses its device, it doesn't lose its textures,
just their contents, so we shouldn't remake the textures when we
regenerate the glyphs (that's coming next commit).
2019-08-13 18:02:14 +01:00
Clownacy
29c84ae222 Fixes 2019-08-13 06:36:31 +00:00
Clownacy
dddf968810 Backend_SupportsSubpixelGlyph -> Backend_SupportsSubpixelGlyphs 2019-08-13 05:14:37 +00:00
Clownacy
03f797a267 Pretty sure these #includes aren't needed 2019-08-13 05:11:40 +00:00
Clownacy
59735a61e6 Minor style change 2019-08-13 05:03:43 +00:00
Clownacy
16b2f6a474 Added enums for the surface types 2019-08-13 04:42:29 +00:00
Clownacy
d47f683491 Ported the Windows version's surface regeneration
Has the same imperfections: if you regenerate the surfaces while a
text box is open (and while using Courier New I guess), the text will
regenerate with smaller spaces.
2019-08-13 04:36:05 +00:00
Clownacy
2c9fbc765e Render backend API simplification part 4: OpenGL3 2019-08-13 03:07:38 +00:00
Clownacy
1ca240d8ee Render backend simplification part 3: SDLTexture
Stripped out all the software-fallback stuff, since I'll be replacing
it soon, and the new API would require a slight refactor anyway.
2019-08-13 02:54:10 +00:00
Clownacy
1b6804bbe1 Fix BackupSurface 2019-08-13 02:52:37 +00:00
Clownacy
5f0249de98 Render backend API simplification part 2: SDLSurface 2019-08-13 01:44:36 +00:00
Clownacy
3f8ead09d6 Renderer backend simplification part 1: Draw.cpp and Software.cpp
By emulating the DirectDraw code more closely, I can simplify the
renderer backend API.
2019-08-13 01:39:08 +00:00
Clownacy
e094f2ff68 Renderer backend fixes
Surface-to-surface blits were broken (would draw to screen instead),
and the SDLSurface backend wouldn't even compile.

You know, I thought I tested each backend when I made those changes
to the API...
2019-08-11 05:22:02 +00:00
Clownacy
3a10bf57cb Fix building the OpenGL3 with the Makefile
Why can't any buildsystems just be good

Like, seriously? Why does pkg-config not have an OpenGL package,
so I don't have to deal with this stupid -lopengl32/-lGL stuff?

...Why isn't there a shim libGL that just maps straight to
opengl32.lib?

Arg
2019-08-11 00:04:11 +01:00
Clownacy
c4599bc146 Allow third-party in-source files to go in the external folder 2019-08-10 22:47:40 +01:00
Clownacy
cdbcd5f6c3 Added a local copy of GLEW 2019-08-10 21:47:06 +01:00
Clownacy
85f58d7d39 Rendering backend API naming improvements 2019-08-10 19:50:10 +01:00
Clownacy
2b86db32a0 Backend_Blit always uses a colour key 2019-08-10 19:31:45 +01:00
Clownacy
64f2a78279 OpenGL: Remove SetFramebufferTarget
It's causing state conflicts in the enhanced branch. Also, with the
new vertex batching, state changes are minimised, so this function
is redundant.
2019-08-10 19:23:29 +01:00
Clownacy
fc0653e5aa Back to OpenGL 3.2 (I really want the core profile)
In OpenGL 3.1, compatibility mode was an extension, meaning it could
never actually be disabled. 3.2 fixed that with the introduction of
profiles.
2019-08-10 18:05:01 +01:00
Clownacy
3b20c5f3b8 Implement vertex batching in the OpenGL renderer
Finally, the performance issue is fixed. I can move back up to OpenGL
3.2 now, and reenable the core profile.
2019-08-10 18:01:48 +01:00
Clownacy
d5ceed4f97 Some minor OpenGL cleanup 2019-08-09 20:04:46 +01:00
Clownacy
7146288e94 Sod it, fall back on compatibility mode if it's available
This way, I can use immediate mode, which is way faster than using
buffers for some reason. Since I'm not using profiles anymore, I
dropped the minimum requirement to OpenGL 3.1. If a driver doesn't
support Legacy GL, then it can use the slow buffer code.

But seriously, I need to figure out why using buffers is so slow.
If this was a common problem, Modern OpenGL wouldn't have made it the
only option.
2019-08-09 19:19:43 +01:00
Clownacy
4afe7f4b11 Use orphaning to slightly speed up rendering GPU-side
For some reason CPU usage is still double that of the SDLTexture
backend (SDL2 uses OpenGL 2.1, with glEnable/glDisable-style
immediate mode).

If I downgrade to OpenGL 2.1, and use VBO-less glDrawArrays, I get
great performance. I just wish I knew what the AMD driver is doing
that's so much faster.
2019-08-09 16:25:36 +01:00
Clownacy
5712c4ad63 Use an appropriate usage specifier for glBufferData
Turns out DYNAMIC was so horribly wrong that it slaughtered the GPU
performance.
2019-08-09 15:58:58 +01:00
Clownacy
b1a706c312 Call glFramebufferTexture2D as rarely as possible
Turns out performance is absolutely abysmal on my laptop's copy of
Windows 10 (AMD A9 APU).

This is only one of the weird bottleecks: glFramebufferTexture2D
is a CPU sinkhole, so don't call it often.
2019-08-09 15:55:42 +01:00
Clownacy
ac273d2d7c Make the ShiftJIS->Unicode translation table *slightly* less ugly 2019-08-08 05:22:24 +00:00
Clownacy
8acd46bce6 Move the font gamma-correction up to Font.cpp
Reduces duplicate code
2019-08-08 05:04:08 +00:00
Clownacy
7e926451de Optimise the gamma-correction
I should probably create a Common.cpp file or something
2019-08-08 02:59:02 +00:00
Clownacy
fc102cd5a5 Add subpixel font rendering to the OpenGL backend
Finally, something besides the software renderer supports it
2019-08-07 22:33:13 +00:00
Clownacy
7e04741c29 Correct the rendering backend glyph API, and add a missing #include
For some reason, FT_BITMAP's 'width' member specifies subpixels,
not pixels as the documentation says.
2019-08-07 22:31:45 +00:00
Clownacy
b56a49a1d5 Reapply SDL2 modifications
The prevents Windows builds from leaking SDL2's exports
2019-08-01 13:37:12 +00:00
Clownacy
ff61c099df Updated SDL2 to 2.0.10
Will reapply my modifications in the next commit
2019-08-01 13:36:19 +00:00
Clownacy
6a040c2248 Add missing #includes to rendering backends 2019-08-01 13:32:27 +00:00
Clownacy
6d8c5c1d75 Updated local copy of Freetype to 2.10.1 2019-08-01 13:29:28 +00:00
Clownacy
d8aec418f9 OpenGL: Use a struct for defining 2D coordinates
Makes the code a bit more readable
2019-08-01 13:11:55 +00:00
Clownacy
67b3143ed6 OpenGL: Only enable blending for glyphs
Should improve performance
2019-08-01 01:26:04 +00:00
Clownacy
cf94736cbf OpenGL: Free VAO and VBO 2019-08-01 00:38:23 +00:00
Clownacy
d8d971c459 Added another bugfix 2019-08-01 00:34:35 +00:00
Clownacy
f0c062cdc8 OpenGL: Clamp textures
This fixes this weird thing you'd see in the enhanced branch if the
screen is scaled (happens if you resize the window).

When the screen is scaled, OpenGL uses linear interpolation. This
would cause it to fetch samples from outside the texture. IIRC, by
default, the default behaviour is GL_REPEAT, which causes it to blend
with samples from the other side of the texture, creating strange
pixels at the end of the screen.
2019-08-01 00:08:23 +00:00
Clownacy
706aff0c8c Remove more redundant OpenGL code 2019-07-31 23:43:08 +00:00