Commit graph

323 commits

Author SHA1 Message Date
Bastien Bouclet
f4e3bd0424 GRIM: Take adventage of kFeatureFullscreenToggleKeepsContext 2017-09-01 09:26:57 +02:00
Vincent Pelletier
8fc17a49e2 GRIM: {T,}GL_LINES does not need to be interrupted between each line 2017-04-28 21:55:36 +00:00
Vincent Pelletier
ae6b5b8c8e GRIM: Add support for reversed 32bits color endianness.
Also, reduce differences between opengl and shader prepareMovieFrame.
2016-11-06 10:07:40 +01:00
Paweł Kołodziejski
d467980499 Merge pull request #1262 from vpelletier/tinygl_dirty2d
GRIM: Fix drawLine/Rect/Polygon in TinyGL renderer
2016-07-18 05:17:35 +02:00
Bastien Bouclet
420f19d6de GRIM: Remove useless assignments to g_driver 2016-07-12 06:16:35 +02:00
Bastien Bouclet
62bf521944 GRIM: Fix memory leaks related to the emergency built-in font 2016-07-12 06:16:35 +02:00
Vincent Pelletier
84859619f1 GRIM: Use [T]GL_LINE_LOOP to display an empty rectangle.
Reduces vertex redundancy.
In TinyGL, fixes checkbox border on Copal computer (actually, works around
yet another discrepancy between OpenGL and TinyGL on 1-pixel-thick
[T]GL_QUADS).
2016-07-11 14:52:36 +00:00
Bastien Bouclet
0362ac0dbc GRIM: Don't use OSystem::getScreenPixelBuffer in the OpenGL renderers 2016-06-11 12:07:38 +02:00
Pawel Kolodziejski
4e47c03a64 OPENGL: add checks for case when glGetString return NULL 2016-03-10 05:55:32 +01:00
Bastien Bouclet
3f295ec773 GRIM: Check at runtime that shaders are available 2016-02-06 08:53:42 +01:00
Bastien Bouclet
31715787ca SYSTEM: Add a system method for retrieving the screen framebuffer 2016-02-06 08:53:41 +01:00
Paweł Kołodziejski
f40da7598e Merge pull request #1220 from vpelletier/move_computations_out_of_renderer
Move computations out of renderer
2016-01-09 12:17:35 +01:00
Vincent Pelletier
ea8245696b GRIM,EMI: Scale intensity on change instead of for each frame
Also uniformises intensity scaling factor implementation across renderers.
Maintain saved-state compatibility by computing on restore.
2016-01-01 23:07:59 +01:00
Bastien Bouclet
8a4bada6b9 ENGINES: Also build the legacy OpenGL renderer when enabling shaders 2015-12-29 08:05:49 +01:00
Paweł Kołodziejski
0eb20ae8d5 Merge pull request #1177 from vpelletier/for_upstream
GRIM: Assorted lighting fixes
2015-08-16 08:53:18 +02:00
Christian Krause
b186c21f85 EMI: Fix wrap around of Layers/Frames
This patch makes sure, that Layer::_frame is smaller than numLayers
of the bitmap in order to prevent out-of-bounds access to
BitmapData::_layers.
2015-05-16 10:39:08 +02:00
Dries Harnie
5c813a8b64 GRAPHICS: Only manually pull pointers if USE_GLEW not defined 2015-05-11 16:57:05 +02:00
Vincent Pelletier
faad6a1fe3 GRIM: Disable quadratic attenuation for spotlights.
Enabling quadratic atenuation, even with values as low as 0.1, reduces spot
lighting too much in (at least) sets "do" (see Domino), "al" (see Manny when
walking along the garage door), "hq" (see Salvador).
Disabling is not perfect either, as attenuation can be seen (at least) in
set "tu" (see fire extinguisher), but it should be overall better.

Also, it should be noted that perfect fidelity cannot be achieved with openGL
fixed pipeline, as DirectX spotlight have two angles (0 <= phi <= theta <= pi),
atenuation being null below phi, full above theta, transitioning with a
configurable exponent between both (defaults to angle-linear). OpenGL would
correspond to phi=0 and theta=pi (ie, transition is always done between fixed
angles), plus a configurable hard cutoff.
2015-05-06 19:49:42 +02:00
Vincent Pelletier
351a4efa8a GRIM: Tweak attenuation.
Determined by enabling a single omnidirectional light (newlight9 in set
"ce", which stands at set entrance toward elevator) and comparing
luminosity level on Manny at several locations in that scene with original
software renderer.
This set is quite convenient for this comparison, as Manny position can be
easily controlled: stick to the wall with the red arrow pointing at the
stairs, making movements one-dimensional.

For spotlight, set "tu" was used with the single spotlight on, walking
from the fire extinguisher to server door, confirming similar attenuation.

From these tests, it seems only quadratic attenuation is used, which makes
sense as it gives a realistic effect.
2015-05-06 19:49:42 +02:00
Vincent Pelletier
06e7aa68b0 GRIM: Correct diffuse reflectance.
Determined by keping a single directional light source enabled, as they are
not subject to attenuation (having no position), and comparing with
original software renderer.
Default DirectX material reflects all diffuse light, so 1.0f coefficient is
likely correct.
2015-05-06 19:49:42 +02:00
Vincent Pelletier
f36d2b62f8 GRIM: Drop TinyGL-only intensity divisor.
Also, divide intensity once instead of once per component.
2015-05-06 19:49:42 +02:00
Vincent Pelletier
6e996d145b GRIM: Disable specular lighting.
My initial idea that GRIM would use specular likely came from a difference
between DirectX and OpenGL lighting for spotlights: DirectX allows for an
extra penumbra angle, allowing stronger center spots while maintaining a
smooth fade (which I emulated with a fixed 2.0 exponent).
Also, specular involves an extra light color value and material definition
for specular reflection, which are not visible in game data files.
All this making the use of specular very unlikely to match original renderer.
2015-05-06 19:48:18 +02:00
Christian Krause
d7e7ee214d GRAPHICS: Enable drawing of bitmaps/tiles with just one sub-image
Instead of using the number of sub-images to decide whether bitmaps
should be drawn using TIL information, better use the existance
of texture coordinates which are distinctive for tiles.
2015-05-05 23:19:16 +02:00
Christian Krause
a8460f4f3f EMI: Check bit in mesh face flags to disable lighting
Use bit 0x20 in the mesh face flags to disable ligthing. This
fixes the problem that once a previous screen is used as
texture (e.g. in the intro or for the transition effects
in set kab when walking eastwards or westwards), it is shown
too dark due to the applied static lighting for overworld
actors.
2015-02-24 22:49:48 +01:00
Christian Krause
6d226501b5 EMI: Implement mesh-specific alpha values
- if Lua_V2::SetActorGlobalAlpha() is called with a mesh name,
  set a mesh-specific alpha value / mode
- use this alpha value in drawEMIModelFace()
- fixes the problem that the whole actor vanishes in some scenes
  (e.g. when entering or leaving the porch of the of LUA bar)
2015-02-17 01:57:07 +01:00
Christian Krause
ad2ce4a87e EMI: Fix memleaks caused by specialtyTextures
- delete screenshot after texture is created
- free _data[] entries in BitmapData::freeData()
- destroy _specialtyTextures[] entries in
  graphic driver's destructors
2014-12-31 15:47:36 +01:00
Pawel Kolodziejski
4166e1f4f5 GRIM: fixed compilation on AmigaOS4 2014-12-28 08:54:59 +01:00
Pawel Kolodziejski
91725ce54f GRIM: improve drawing X on Don's computer in OpenGL driver 2014-12-28 08:49:15 +01:00
Einar Johan Trøan Sømåen
f756848928 Merge pull request #1097 from somaen/emiMac
EMI: A first set of patches to improve Mac-support (German only)
2014-12-03 13:17:45 +01:00
Einar Johan Trøan Sømåen
2412047c14 GRIM/EMI: Handle 32bpp BGR in gfxOpenGL::prepareMovieFrame
This fixes the display of the Aspyr Logo in OpenGL.
2014-12-02 17:38:31 +01:00
Christian Krause
1c43404192 GRAPHICS: Reset GL's current color in drawDimPlane()
Per convention, in residualvm the default GL current color
should be (1.0f, 1.0f, 1.0f). If a function changes the color,
it is required to reset it before returning.

This fixes the issue that some videos were not correctly displayed
until the next glColor call (e.g. when drawing the sub-titles) was
issued.
2014-11-05 20:59:56 +01:00
Christian Krause
11fee3d1d4 EMI: Enable alpha blending for global alpha values of actors
This fixes the problem, that all actors with a global alpha
value < 1.0f were not drawn with the correct transparency.
2014-09-17 20:59:50 +02:00
Christian Krause
56e13b52ca EMI: Use half-transparent plane to implement dimScreen (OpenGL)
- instead of re-calculating the color values when dimming the screen,
  better draw a half-transparent plane after drawing all non-overworld
  characters
- fixes the issue that overworld actors were dimmed and that the
  pause screen is transparent when the inventory is open
2014-09-13 10:43:33 +02:00
Paweł Kołodziejski
639076bc12 Merge pull request #974 from JoseJX/BigEndian
EMI: Big endian fixes
2014-09-09 17:56:03 +02:00
Christian Krause
e2eee80716 EMI: Implement Lua_V2::SetActorLocalAlpha
- sets the alpha mode and the alpha value for single vertices
2014-09-08 09:00:21 +02:00
Joel Teichroeb
9c54ff5795 Merge pull request #1053 from Akz-/emi-shadow-fixes
EMI: Shadow fixes
2014-08-23 21:44:51 -07:00
Joel Teichroeb
6a852161c7 Merge pull request #999 from JoseJX/Camera
EMI: Keep camera as a rotation matrix and add Lua functions for changing it.
2014-08-19 17:21:43 -07:00
Joel Teichroeb
32364faacf EMI: Fix the background color when running the debugger
Fixes #982
2014-08-19 17:11:34 -07:00
Joseph Jezak
ff9f26981c EMI: Refactor to use a matrix for the camera. 2014-08-19 18:35:26 -04:00
Joni Vähämäki
851d78362d EMI: Reset color when drawing shadow planes. 2014-08-19 15:46:00 +03:00
Joni Vähämäki
915e12321c GRIM: Enable alpha test when drawing sprites. 2014-08-18 13:09:42 +03:00
Pawel Kolodziejski
e539b27af8 MATH: improve type support for viewport argument 2014-08-15 12:25:48 +02:00
Christian Krause
cbbf60d155 EMI: Check another bit in the mesh face flags to enable blending.
Bit 0x40000 in the mesh face flags (set only in the intro) should
enable blending, too. This fix lets the various screens of the intro
fade into each other.
2014-08-14 03:01:12 +02:00
Joni Vähämäki
3df07c384e EMI: Fix parsing of sprite flags. Fixes #960 2014-08-12 17:46:47 +03:00
Joni Vähämäki
6b7b6fa6e5 EMI: Do not disable writing to color buffer if an actor's sort order is >= 100.
Fixes invisible Guybrush in the set unc.
2014-08-12 17:46:46 +03:00
Joni Vähämäki
398f2afa98 EMI: Always write sprites to the depth buffer. 2014-08-12 17:46:45 +03:00
Joni Vähämäki
ee24b2c12f EMI: Parse sprite Z offset. 2014-08-12 17:46:44 +03:00
Joni Vähämäki
055f742ccc EMI: Enable alpha blending if the mesh face flags has the 16th bit set.
This fixes drawing of the shadow mesh in the set unc when Guybrush is under the lights.
2014-08-12 17:46:43 +03:00
Joni Vähämäki
9a87fa5d51 EMI: Parse per-texture blending mode from model data. 2014-08-12 17:46:42 +03:00
Joni Vähämäki
6e96d962f8 EMI: Parse tex coords from sprite files. Fixes #978 2014-08-10 18:51:31 +03:00