Commit graph

99 commits

Author SHA1 Message Date
Gabriel Ravier
9be8b9a493 Backends: Added init/de-init messages for backends
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 02:26:51 +02:00
Gabriel Ravier
65e7164c42 Backends/Rendering/OpenGL3: Use != NULL instead of implicit conversion to bool
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 00:59:02 +02:00
Gabriel Ravier
4d10c2cc21 Backends/Rendering/OpenGL3: Wrap both sides of if-else with {} equally.
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 00:58:09 +02:00
Gabriel Ravier
1a5da443d7 Backends/Rendering/OpenGL3: Fixed OpenGLES2 compile
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 00:55:12 +02:00
Gabriel Ravier
89fb2222b6 Backends/Rendering/OpenGL: Replaced printf with Backend_PrintInfo
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 00:46:05 +02:00
Gabriel Ravier
dcd4bcf1b2 Backends: Fix some of the error handling and replaced some printf calls
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-12 00:42:24 +02:00
Gabriel Ravier
f2b2c071a2 Backends/Rendering/OpenGL3: Improve error handling
Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2020-04-11 23:28:31 +02:00
Clownacy
ba069de70e Fix window resizing
If you made the window square, the screen wouldn't be centered
properly.
2020-04-10 00:45:57 +01:00
Clownacy
135035bb1a Change 'PlatformBackend' namespace to 'Backend' 2020-04-04 20:31:27 +01:00
Clownacy
4d322be866 Change render backend namespace to RenderBackend_ 2020-04-04 20:24:34 +01:00
Clownacy
40464a9fc0 Move-around Backend files
Hoping to introduce some degree of grouping
2020-04-03 14:42:11 +01:00
Clownacy
ee7cf6799b Yet another warning 2020-04-03 02:12:06 +01:00
Clownacy
5b996b3459 Give glad a CMake file
Today I learned that CMake will error if the project shares a
dependency with a nested CMake file (which could be from an
entirely-separate project that you have no control over).

I'm starting to really hate CMake.
2020-04-03 01:34:47 +01:00
Clownacy
ff70664604 Cleanup and fixes 2020-04-01 16:11:34 +01:00
Clownacy
4d8be3bc36 More refactoring
Get fullscreen mostly working in GLFW3
2020-04-01 15:21:40 +01:00
Clownacy
c4aa8e28bb More refactoring 2020-04-01 14:57:07 +01:00
Clownacy
5dbca99e19 Extremely horrible terrible nightmare refactoring
Working on ridding CSE2 of its hard SDL2 dependency.

For now, I have a rudimentary GLFW3 backend.
2020-03-31 21:56:10 +01:00
Clownacy
142bca6578 Split SDL2 code from Draw.cpp 2020-03-31 16:11:31 +01:00
Clownacy
d0b20316de Don't do -Iexternal
It pollutes the #include space.
2020-03-31 14:26:24 +01:00
Clownacy
61e708751d Apply missing OpenGL constants 2020-03-31 12:53:58 +01:00
Clownacy
60d3cc2ed6 Update cute_spritebatch.h 2020-02-09 12:40:35 +00:00
Clownacy
8edca4fb2e Style tweak 2020-02-09 12:35:38 +00:00
Clownacy
59a8c2617f Tweak some variable naming
The enhanced branch calls them the 'internal *screen* width/height',
which I think is more appropriate.
2020-02-05 15:52:43 +00:00
Clownacy
2af6a043ef Clean-up the OpenGL renderers a little 2020-02-04 16:35:42 +00:00
Clownacy
1140ab0916 Clean-up renderer backend initialisation 2020-02-04 15:51:19 +00:00
Clownacy
ba6d711d3a Tick cute_spritebatch once per frame
...As opposed to once per draw call.

This change was made because multiple draw calls can be made per
frame, or a only a handful of draw calls may be made per minute.

Since draw calls are an inconsistent metric, I just switched to
frames instead.
2020-02-04 14:57:06 +00:00
Clownacy
2e5e1994c2 Enable debug console prints in non-debug builds 2020-02-03 16:44:52 +00:00
Clownacy
53c0e8470f Add an optimisation to the OpenGL renderers
Since we track the currently-bound "source texture", we don't need
to poll the OpenGL driver for the same info.
2020-02-03 15:53:59 +00:00
Clownacy
dfacd62662 Fix text-flickering in the OpenGL renderers
This would occur in CSE2E's options menu.

It was caused by cute_spritebatch destroying a texture atlas that
was being used by the current unflushed vertex buffer. To solve
this, we now track what textures are being used by current buffer,
and flush the buffer when the texture are about to be
modified/deleted.

As you can guess, this issue doesn't affect the SDLTexture backend,
since its batching system is half-decent.
2020-02-03 15:44:09 +00:00
Clownacy
4190493fd8 More documentation 2020-02-02 00:34:03 +00:00
Clownacy
514d9f8739 Document the OpenGL renderer a bit more
This makes it easier to find things
2020-02-02 00:21:28 +00:00
Clownacy
d84f64a5a9 Tweak cute_spritebatch settings
1024x1024 seems like overkill
2020-02-02 00:10:01 +00:00
Clownacy
eb6ab89b85 Fixes and improvements
Made texture-atlasing occur immediately, notably.
2020-02-02 00:01:45 +00:00
Clownacy
1b2d4fdb4d Fix the other rendering backends
Also finished ripping-out the sub-pixel support
2020-02-01 22:57:07 +00:00
Clownacy
e3cd7ce353 Add glyph-batching to OpenGL renderer
Unfortunately, sub-pixel font rendering had to go. It wasn't portable
anyway (not every display is an LCD with R->G->B ordering).
2020-02-01 22:37:59 +00:00
Clownacy
eaf2de05b6 Add glyph-batching to the SDLTexture backend
Hope it will be this easy for the OpenGL backend
2020-02-01 17:49:26 +00:00
Clownacy
639039ce3a Added Backend_PrepareToDrawGlyphs
This is to reduce OpenGL context changes, and help pave the way for
glyph-batching
2020-02-01 16:40:23 +00:00
Clownacy
e3db7749ba Add verbose error-reporting to backends
Should fix #98
2020-02-01 12:22:44 +00:00
Clownacy
e33bd9c8f9 Fix visual artefacting on the Pi
I'm not sure why there was linear filtering when I was rendering at
1:1 pixel ratio, but it did happen. This fixes it by forcing
nearest-neighbour. The artefacting was caused by the linear filtering
blending with pixels outside the specified texture coordinates,
creating lines around everything.

Fun fact: the framebuffer technique CSE2 uses is demanding on the Pi
(1278x720 runs at 60 FPS when the framebuffer is forced to 852x480,
even though all the internal rendering is still 1278x720). I guess
rendering those extra 920160 pixels really takes its toll.
2020-01-25 14:26:15 +00:00
Clownacy
99a8b2bd18 Improve OpenGL performance on the Raspberry Pi
Apparently 2 VBOs wasn't enough. This bumped the framerate from 13FPS
to 20FPS in a stress-test (CSE2E at 1704x960 on a Raspberry Pi 3B
in X11 with the KMS OpenGL driver).
2020-01-25 14:22:50 +00:00
Clownacy
6dac8254e2 Begin merge of Backend_Init/Backend_CreateWindow
OpenGL3+OpenGLES2 backend done so far
2020-01-22 22:19:55 +00:00
Clownacy
3baba6a727 Make FlushVertexBuffer bail when buffer is empty 2020-01-22 21:56:11 +00:00
Clownacy
2fec50ff4e Use constants for attribute locations 2020-01-21 20:16:38 +00:00
Clownacy
8d92bf2004 Double-buffer the OpenGL VBO
This should reduce stalling when the OpenGL driver is still
processing the buffer when we're about to upload to it.

Hopefully, this is what was making the OpenGL ES 2.0 renderer so much
slower than the SDLTexture renderer on the Raspberry Pi 3B (SDL uses
*8* buffers). Unfortunately, I don't have access to it right now, so
I can't test this.
2020-01-21 16:43:21 +00:00
Clownacy
f8a40318a2 OpenGL fixes and optimisations
Now the VBO isn't resized constantly, and CreateSurface preserves
the currently-bound texture.
2020-01-21 15:52:33 +00:00
Clownacy
73de1adc45 Fix a memory leak 2020-01-21 13:24:30 +00:00
Clownacy
cd7ef93f5e We don't need to initialise the VBO here 2020-01-21 13:23:33 +00:00
Clownacy
1cf5df2d72 Remove a debug print 2020-01-20 14:49:18 +00:00
Clownacy
767262ed8c Handle a malloc failure better
No memory leak
2020-01-20 14:48:12 +00:00
Clownacy
0423614dca More-efficient OpenGL ES 2.0 font textures 2020-01-20 13:52:50 +00:00