aboutsummaryrefslogtreecommitdiff
path: root/backends/graphics/opengl/opengl-graphics.h
AgeCommit message (Collapse)Author
2017-10-15BACKENDS: Also hide mouse cursor outside game area when an engine has hidden ↵Colin Snover
the cursor The only reason we show the system cursor outside the game area is to show users where their mouse is when the window is resized and the mouse is outside the game area. If the game cannot be interacted with, then the mouse also does not need to be shown in the black areas.
2017-10-15BACKENDS: Refactor OpenGL & SDL graphics backendsColin Snover
This patch refactors the OpenGL and SDL graphics backends, primarily to unify window scaling and mouse handling, and to fix coordinate mapping between the ScummVM window and the virtual game screen when they have different aspect ratios. Unified code for these two backends has been moved to a new header-only WindowedGraphicsManager class, so named because it contains code for managing graphics managers that interact with a windowing system and render virtual screens within a larger physical content window. The biggest behavioral change here is with the coordinate system mapping: Previously, mouse offsets were converted by mapping the whole space within the window as input to the virtual game screen without maintaining aspect ratio. This was done to prevent 'stickiness' when the mouse cursor was within the window but outside of the virtual game screen, but it caused noticeable distortion of mouse movement speed on the axis with blank space. Instead of introducing mouse speed distortion to prevent stickiness, this patch changes coordinate transformation to show the system cursor when the mouse moves outside of the virtual game screen when mouse grab is off, or by holding the mouse inside the virtual game screen (instead of the entire window) when mouse grab is on. This patch also improves some other properties of the GraphicsManager/PaletteManager interfaces: * Nullipotent operations (getWidth, getHeight, etc.) of the PaletteManager/GraphicsManager interfaces are now const * Methods marked `virtual` but not inherited by any subclass have been de-virtualized * Extra unnecessary calculations of hardware height in SurfaceSdlGraphicsManager have been removed * Methods have been renamed where appropriate for clarity (setWindowSize -> handleResize, etc.) * C++11 support improved with `override` specifier added on overridden virtual methods in subclasses (primarily to avoid myself accidentally creating new methods in the subclasses by changing types/names during refactoring) Additional refactoring can and should be done at some point to continue to deduplicate code between the OpenGL and SDL backends. Since the primary goal here was to improve the coordinate mapping, full refactoring of these backends was not completed here.
2017-10-15BACKENDS: Fix some comment typosColin Snover
2017-08-05OPENGL: Always clear the whole backbufferBastien Bouclet
Previously we were clearing the whole backbuffer for 3 frames after a window size change, and then only clearing the game area. This assumes the OpenGL driver uses at most 3 render buffer and uses them in sequential order. This does not seem to be the case on Linux when using an Intel integrated GPU. Instead we now clear the whole backbuffer on each frame to make sure there are no leftovers remaining on the screen. All semi-recent GPUs should have hardware clear anyway so this should not impact negatively performance. Possibly fixes #10025.
2017-04-24SDL: Improve debug and warning messages when saving screenshotsThierry Crozat
In particular this adds a warning when failing to save a screenshot in OpenGL mode (there was already one in SurfaceSDL mode).
2016-10-29OPENGL: Remove hack to avoid issues with OSD messages from other threadsThierry Crozat
2016-10-13OPENGL: Add support for filtering featureThierry Crozat
This replaces the two graphics modes "OpenGL (No filtering)" and "OpenGL". Now there is a single "OpenGL" mode and filtering is controlled by the kFeatureFilteringMode.
2016-09-18OPENGL: Remove multithread support from displayActivityIconOnOSDBastien Bouclet
It is no longer being called by another thread.
2016-09-13SDL: Switch the OpenGL renderer to use small textures to draw the OSDBastien Bouclet
2016-08-24GUI: Add getOSDFormat() and make OSD 32 bppAlexander Tkachev
2016-08-24GUI: Add clearOSD() methodAlexander Tkachev
So one can erase everything from OSD and then blit something on it.
2016-08-24GUI: Add copyRectToOSD()Alexander Tkachev
I was lazy to implement that in OpenGLGraphicsManager and I'm not sure it's implemented correctly in SurfaceSdlGraphicsManager, but it works for me.
2016-03-16OPENGL: Introduce abstraction for framebuffer.Johannes Schickel
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-16OPENGL: Introduce ShaderManager to handle builtin shaders.Johannes Schickel
2016-03-16OPENGL: Introduce pipeline abstraction to cleanup code.Johannes Schickel
2016-03-16OPENGL: Introduce simple abstraction for surfaces.Johannes Schickel
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-16OPENGL: (Partly) move context specific handling to Context.Johannes Schickel
This does not include (most) shader setup, and projection matrices yet.
2016-03-16OPENGL: Add support for shaders with GL contexts.Johannes Schickel
2016-03-16OPENGL: Support GLES2 contexts.Johannes Schickel
2016-03-16OPENGL: Simplify context type setting.Johannes Schickel
2016-03-16OPENGL: Allow runtime specification of OpenGL mode.Johannes Schickel
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-16OPENGL: Resolve OpenGL functions on run-time.Johannes Schickel
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-16OPENGL: Add functionality to query OpenGL functions on runtime.Johannes Schickel
This can and will be used for future extension usage support. Tizen changes have been untested.
2016-03-16OPENGL: Refactor GL extension handling slightly.Johannes Schickel
2015-12-12OPENGL: Implement black borders using scissor test.Johannes Schickel
2015-12-12OPENGL: Only redraw screen when actual changes happened.Johannes Schickel
2015-12-12OPENGL: Refactor screen refresh handling.Johannes Schickel
Subclasses of OpenGLGraphicsManager are now supposed to supply a refreshScreen function which handles actual screen updating (for example, buffer swapping).
2015-01-07OPENGL: Limit mouse cursor drawing to inside game screen when no overlay is ↵Johannes Schickel
visible.
2014-08-29BACKENDS: Fix some Doxygen comments that seem wrong.Einar Johan Trøan Sømåen
2014-02-12OPENGL: Use signed types for mouse coordinates.Johannes Schickel
This adjusts for the fact that our event handling also uses signed coordinates.
2014-02-12OPENGL: Properly use signed types for cursor hotspot.Johannes Schickel
2014-02-11OPENGL: Fix cursor regression when defaultFormat doesn't have an alpha channel.Johannes Schickel
2014-02-11OPENGL: Refactor texture instantiation.Johannes Schickel
2014-02-11OPENGL: Rename notifyContextChange to notifyContextCreate.Johannes Schickel
2014-02-11OPENGL: Add notification function about context destruction.Johannes Schickel
2013-10-24SDL: Let SdlGraphicsManager inherit from GraphicsManager.Johannes Schickel
2013-10-23SDL: Do not require a static graphics mode list in OpenGL and SurfaceSDL.Johannes Schickel
2013-10-19OPENGL/SDL: Add screenshot support.Johannes Schickel
2013-10-19TIZEN: Adapt to new OpenGL code.Johannes Schickel
Thanks to Chris Warren-Smith for testing this a bit.
2013-10-19OPENGL: Add OSD support.Johannes Schickel
2013-10-19SDL: Add a OpenGL SDL backend and hook it into the SDL backend.Johannes Schickel
The hooking code is nearly exactly the old hooking code. Only the OpenGL SDL creation has been adapted since it uses a different constructor now.
2013-10-19OPENGL: Add new generic OpenGL (ES) backend.Johannes Schickel
This backend is based on ideas of the old OpenGL backend, of the Android GL backend and of the iPhone GL backend.
2013-10-05BACKENDS: Remove OpenGL and OpenGL SDL backend.Johannes Schickel
This breaks our Tizen port.
2012-06-16ALL: Let overlay related methods in OSystem take a void * and use a proper ↵Johannes Schickel
pitch values. This is a first step to get rid of OverlayColor, which is a requirement for proper 4Bpp overlay support.
2012-06-16BACKENDS: Make OSystem::setMouseCursor take a "const void *" buffer.Johannes Schickel
This is mainly for consistency with OSystem::copyRectToScreen.
2012-06-16BACKENDS: Let copyRectToScreen take a "const void *" instead of "const byte ↵Johannes Schickel
*" as buffer. This removes the need to convert the parameter to copyRectToScreen to "const byte *", which is commonly used in games, which use Graphics::Surface to store their graphics data.
2012-06-03ALL: Replace cursorTargetScale in OSystem API with a simple "do not scale" ↵Johannes Schickel
logic. All uses of the old target scale API actually wanted to disallow scaling of the mouse cursor. This commit adapts our API to this and thus simplifies backend implementations. Some backends, most notable the Wii and Android, did some implementation of the cursor target scale, which I didn't adapt yet. I added a TODO for the porters there.
2012-02-15OPENGL: Prevent access to a few more members in the SDL OpenGL code.Johannes Schickel
2012-02-15OPENGL: Use tabs instead of spaces for indentation.Johannes Schickel
2011-08-21BADA: Fix formatting and non bada host compile errorChris Warren-Smith