Commit graph

167 commits

Author SHA1 Message Date
Johannes Schickel
ed6689d4fc OPENGL: Do not allow direct access to Context::activePipeline. 2016-03-16 20:29:27 +01:00
Johannes Schickel
b17c035642 OPENGL: Implement texture drawing in Pipeline instead of Surface. 2016-03-16 20:29:27 +01:00
Johannes Schickel
0fe580d10c OPENGL: Make shader/framebuffer part of pipeline state. 2016-03-16 20:29:27 +01:00
Johannes Schickel
0b46af2f0e OPENGL: Don't prefix maxTextureSize variable for consistency. 2016-03-16 20:29:27 +01:00
Johannes Schickel
c4e65732be OPENGL: Introduce abstraction for framebuffer.
This allows us to use various framebuffer settings easily. Now the GPU
accelerated CLUT8 surface implementation does not need to query former
framebuffer state anymore.
2016-03-16 20:29:26 +01:00
Johannes Schickel
5498982a37 OPENGL: Introduce ShaderManager to handle builtin shaders. 2016-03-16 20:29:26 +01:00
Johannes Schickel
f5f1b6eba0 OPENGL: Introduce pipeline abstraction to cleanup code. 2016-03-16 20:29:26 +01:00
Johannes Schickel
08553a09cf OPENGL: Support GLSL based CLUT8 look up for GLES2+. 2016-03-16 20:29:26 +01:00
Johannes Schickel
18306ee206 OPENGL: Simplify shader support checks. 2016-03-16 20:29:26 +01:00
Johannes Schickel
2319fcd228 OPENGL: Handle GLES2 and GL shaders uniformly.
GLES2 requires precision qualifiers to be set and allows use of precision
qualifiers. For GLES2 we define a default precision now. Since precision
qualifiers are not supported in the GLSL version we use for GL, we
introduce compatibility #defines.
2016-03-16 20:29:26 +01:00
Johannes Schickel
e66e9e44d3 OPENGL: Accelerate palette lookups with shaders.
This currently is limited to GL contexts.
2016-03-16 20:29:26 +01:00
Johannes Schickel
de3846923c OPENGL: Introduce simple abstraction for surfaces.
This is basically an interface extracted from Texture without any knowledge
about any actual implementation, except for copyRectToTexture, fill, and
dirty rect handling. These are convenient helpers.
2016-03-16 20:29:26 +01:00
Johannes Schickel
618adec7b0 OPENGL: Move color key handling for CLUT8 to TextureCLUT8. 2016-03-16 20:29:26 +01:00
Johannes Schickel
db2917dde5 OPENGL: Fix texture format for BGR565. 2016-03-16 20:29:26 +01:00
Johannes Schickel
9844d89231 OPENGL: Move max texture size information to Context. 2016-03-16 20:29:26 +01:00
Johannes Schickel
8a3eecb73a OPENGL: Unify shader implementation for GL and GLES2. 2016-03-16 20:29:25 +01:00
Johannes Schickel
c7c870bf7f OPENGL: (Partly) move context specific handling to Context.
This does not include (most) shader setup, and projection matrices yet.
2016-03-16 20:29:25 +01:00
Johannes Schickel
5752f125e1 OPENGL: Make Context::reset explicitly reset state. 2016-03-16 20:29:25 +01:00
Johannes Schickel
fee1aa5502 OPENGL: Add support for shaders with GL contexts. 2016-03-16 20:29:25 +01:00
Johannes Schickel
19abd8ccbb OPENGL: Reset context description on context destroy. 2016-03-16 20:29:25 +01:00
Johannes Schickel
fe88375ff3 OPENGL: Support GLES2 contexts. 2016-03-16 20:29:25 +01:00
Johannes Schickel
e931018673 OPENGL: Typo. 2016-03-16 20:29:25 +01:00
Johannes Schickel
c5ce812711 OPENGL: Simplify orthogonal projection setup. 2016-03-16 20:29:25 +01:00
Johannes Schickel
af727afe0c OPENGL: Simplify context type setting. 2016-03-16 20:29:25 +01:00
Johannes Schickel
2277144623 OPENGL: Support RGB555 for OpenGL ES output.
This mode should *not* be used by any new engines/code. If someone is going
to use it and says it works with the OpenGL output, please make them wear a
red uniform and beam them onto a remote planet.
2016-03-16 20:29:25 +01:00
Johannes Schickel
d6d3e17d53 OPENGL: Allow runtime specification of OpenGL mode.
Formerly, we required that the OpenGL mode was fixed at compile time. Now we
allow the code to work with whatever it is given at runtime.

It is still possible to force a context type on compile time.
2016-03-16 20:29:25 +01:00
Johannes Schickel
9816e4f350 OPENGL: Remove support for ARGB8888.
This used to be used by Sword25. Since it is not supported by GLES and no
engine code uses it we drop support. Hopefully, this helps people to realize
they should not use that format in their engine.
2016-03-16 20:29:24 +01:00
Johannes Schickel
e11f4df111 OPENGL: Rename GLCALL to GL_CALL. 2016-03-16 20:29:24 +01:00
Johannes Schickel
4a781737c1 OPENGL: Resolve OpenGL functions on run-time.
Formerly we relied on static linkage. However, in the presense of modern
OpenGL (ES) implementations it is not easily identifable which library to link
against. For example, on Linux amd64 with nVidia drivers and SDL2 setup to
create a GLES 1.1 context one would need to link against libGL.so. However,
traditionally GLES 1.1 required to link against libGLESv1_CM.so. To prevent a
huge mess we simply resolve the OpenGL functions on run-time now and stop
linking against a static library (in most cases).

GLES support needs to be enabled manually on configure time for now.

Tizen changes have NOT been tested.
2016-03-16 20:29:24 +01:00
Johannes Schickel
b3b3d37e3b OPENGL: Define GLCALL in opengl-sys.h.
debug.h is now always included and all calls should be made through GLCALL.
2016-03-16 20:29:24 +01:00
Johannes Schickel
e5e234b864 OPENGL: Refactor GL extension handling slightly. 2016-03-16 20:29:24 +01:00
Johannes Schickel
64f9c902dd OPENGL: Smooth mouse experience when black bars are visible.
This gets rid of the feeling of the mouse sticking to black borders by using
the full output resolution as area for tracking game mouse movement. The same
behavior is present in plain SDL output with SDL2.
2015-12-14 20:26:05 +01:00
Johannes Schickel
942d0fdad4 OPENGL: Limit scissor override to invisible overlay.
This fixes some corner cases which caused black bars to appear for a few screen
updates when the overlay is visible.
2015-12-13 21:30:25 +01:00
Johannes Schickel
693834e8c6 OPENGL: Implement black borders using scissor test. 2015-12-12 22:40:20 +01:00
Johannes Schickel
f65a8b2689 OPENGL: Only redraw screen when actual changes happened. 2015-12-12 22:31:35 +01:00
Johannes Schickel
fe2ee9ecf5 OPENGL: Refactor screen refresh handling.
Subclasses of OpenGLGraphicsManager are now supposed to supply a refreshScreen
function which handles actual screen updating (for example, buffer swapping).
2015-12-12 22:31:35 +01:00
Johannes Schickel
1124d1db31 OPENGL: Fix truncation issue resulting in wrong mouse coordinates. 2015-01-07 20:38:20 +01:00
Johannes Schickel
f879f8af04 OPENGL: Limit mouse cursor drawing to inside game screen when no overlay is visible. 2015-01-07 20:38:17 +01:00
Filippos Karapetis
d2c69a79fe BACKENDS: Remove trailing whitespace 2014-10-28 15:38:51 +02:00
Torbjörn Andersson
da57eeeeb2 OPENGL: Fix building with --disable-16bit 2014-02-25 00:09:16 +01:00
Johannes Schickel
5d78542ab8 OPENGL: Always support RGBA8888 (memory layout). 2014-02-12 18:06:29 +01:00
Johannes Schickel
2cab30ee80 OPENGL: Move RGBA8888 (logical layout) to OpenGL specific formats.
The reason here is that GL_UNSIGNED_INT_8_8_8_8 is not supported by the GLES
standard. Thus we cannot use it outside OpenGL specific code paths.
2014-02-12 18:06:29 +01:00
Johannes Schickel
ac5907a804 OPENGL: Use frac_t for cursor scaling. 2014-02-12 17:15:07 +01:00
Johannes Schickel
6576dd758b OPENGL: Simplify shake offset application. 2014-02-12 17:15:07 +01:00
Johannes Schickel
abcadb5d87 OPENGL: Fix cursor regression when defaultFormat doesn't have an alpha channel. 2014-02-11 12:19:30 +01:00
Johannes Schickel
16898486fa OPENGL: Properly setup full game palette on video mode change if required. 2014-02-11 11:10:49 +01:00
Johannes Schickel
1f4638fe82 OPENGL: Refactor texture instantiation. 2014-02-11 11:10:49 +01:00
Johannes Schickel
0063568484 OPENGL: Rename notifyContextChange to notifyContextCreate. 2014-02-11 11:10:49 +01:00
Johannes Schickel
8be41e4f2c OPENGL: Add notification function about context destruction. 2014-02-11 11:10:48 +01:00
Johannes Schickel
2094bd31ec OPENGL: Fix >1Bpp mouse cursors which do not require format conversion. 2013-11-17 20:28:16 +01:00