Commit graph

121 commits

Author SHA1 Message Date
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
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
6a040c2248 Add missing #includes to rendering backends 2019-08-01 13:32:27 +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
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
Clownacy
90ffbacd29 Put OpenGL in 'forward-compatible' mode
Disables deprecated functionality
2019-07-31 23:07:45 +00:00
Clownacy
4769397c7a Clean up OpenGL error callback print 2019-07-31 23:03:32 +00:00
Clownacy
24dcd35522 More OpenGL cleanup and tweaks 2019-07-31 23:01:14 +00:00
Clownacy
ff5a0189e0 OpenGL: Ditch index buffer
Seems completely unnecessary for 2D
2019-07-31 22:50:14 +00:00
Clownacy
350ba46f2e Some OpenGL cleanup 2019-07-31 22:48:37 +00:00
Clownacy
eb62a80956 Change references to OpenGL 2.1 to 3.2 2019-07-31 22:38:33 +00:00
Renamed from src/Backends/Rendering/OpenGL2.cpp (Browse further)