Commit Graph

724 Commits (367dab9c5a57d65db9d9babce4b33cb0e1cbce45)

Author SHA1 Message Date
Tomasz Kapuściński 30d688c1ec Added and implemented terrain renderer 2021-09-05 16:32:19 +02:00
Tomasz Kapuściński 100be95113 Added CVertexBuffer and reimplemented vertex buffer management 2021-09-05 16:32:18 +02:00
Tomasz Kapuściński 5c037837f5 Added Vertex3D 2021-09-05 16:32:17 +02:00
Tomasz Kapuściński 12e696bf1c Added color and moved uniform data to uniform buffer block 2021-09-05 16:32:17 +02:00
Tomasz Kapuściński 55513703b2 Removed unused static buffer types 2021-09-05 16:32:16 +02:00
Tomasz Kapuściński f2eafd563e Removed interface rendering mode 2021-09-05 16:32:16 +02:00
Tomasz Kapuściński 16200bbeac Removed all dependency on interface rendering mode 2021-09-05 16:32:16 +02:00
Tomasz Kapuściński 465fe59dfb Added Renderers
Added UI Renderer
Added OpenGL 3.3 UI Renderer
Reimplemented most of UI drawing functionality to use UI Renderer
TODO: fix OpenGL errors
2021-09-05 16:32:15 +02:00
Tomasz Kapuściński 704e3f2f0d Improved code for loading and linking shaders 2021-09-05 16:32:15 +02:00
Tomasz Kapuściński fe02cf3e4b Added Vertex2D 2021-09-05 16:32:14 +02:00
Tomasz Kapuściński ec21faf15c Removed gl14 and gl21 devices 2021-09-05 16:25:38 +02:00
MrSimbax 05de2baef5 Fix crashes in SatCom on some \button characters
The issue is that the \button fragments in SatCom are replaced with
invalid UTF-8 bytes, hence those bytes need to be handled as a special
case when checking for UTF-8 character length.

When the text is processed e.g. in `Gfx::CText::Justify`, there are
generally two arrays: `text` and `format`. The second one is interpreted
as a font for a given character, e.g. `text[i]` has font `format[i]`.

Now, in the loops the index for `text` is increased by the length of
the character, e.g. 1 to 4 bytes, whereas index for `format` is
only incremented. It seems there's an assumption that `format` treats
multibyte characters as one byte, which doesn't seem to be true by
looking at the process of filling up the `format` array. This can result
in using wrong font e.g. FONT_SATCOM for the \button character which
should be FONT_BUTTON, hence the `StrUtils::Utf8CharSizeAt` method
complains about unexpected continuation byte via exception, causing
the crash.

Incrementing the index by the UTF-8 length seems to have fixed the
issue. However, I am not sure if I haven't broken anything else by this
and if I analyzed the intended behaviour correctly.
Gfx::CText needs a major refactor IMHO.
2020-09-20 21:22:05 +02:00
Jeff Law ad2e3db92f Fix more dynamic casts for gcc-11
Signed-off-by: suve <veg@svgames.pl>
Jeff's patch was written for the 0.1.12 stable release.
Adapted to work with the "dev" branch (as of commit 13098ee).
2020-09-15 10:20:24 +02:00
Jeff Law 8c6ac4cd16 Fix dynamic casts to avoid gcc-11 diagnostics 2020-09-04 11:16:45 +02:00
Emxx52 1c9f5f3f64
Merge branch 'dev' into dev-mod-manager 2020-08-21 18:21:08 +02:00
tomangelo2 4bb6f9f1b3 Remove unnecessary warning if there is no fonts.ini file 2020-08-08 15:41:07 +02:00
Tomasz Kapuściński 4c14050b27 Fixed mipmaps being outdates after texture update. 2020-07-31 22:04:47 +02:00
Tomasz Kapuściński 33b7c893cb Allow length of the light direction vector to influence strength of the light source.
This fixes the issue with objects and terrain being darker than they should be. As it turns out, most levels have not normalized light direction which happens to make light brighter and this is the expected result. To keep in line with GL14 engine, newer engines should use the length of the vector to make light brighter.
2020-07-31 22:01:33 +02:00
immibis 5eebe300fc
Support new-format text models through the same code path as old models; update Blender script (#1290) 2020-07-25 21:13:26 +02:00
MrSimbax b685d0060c Merge branch 'dev' into dev-mod-manager 2020-07-23 18:19:42 +02:00
Mateusz Przybył a5c7187017
Fix crashes on SatCom in Moon missions (#1334) 2020-07-22 00:37:37 +02:00
MrSimbax 5112bf86df Fix linter issues 2020-07-21 21:11:08 +02:00
Mateusz Przybył 2d32e3a798
Merge pull request #1255 from timgott/smooth_shadows_gl21
Smooth shadows in gl21
2020-07-21 20:55:47 +02:00
Mateusz Przybył fd2b72b296
Merge pull request #1263 from nextghost/dev
Fix OpenGL specular lighting
2020-07-21 20:55:21 +02:00
MrSimbax 7e6782a1be Try to improve font reloading 2020-07-19 16:07:27 +02:00
MrSimbax 8390d85e46 Refactor the mod manager
Moved list of mods logic to a new CModManager class.

The list of enabled mods is now managed by a flag instead of directory
names of mods.

Mods are now disabled by default.

Also general cleanup, fixing issues from the code review in
https://github.com/colobot/colobot/pull/1191 and fixing linter issues.

Regression: the state of enabled/disabled mods is now not persistent.
The plan is to use some kind of config file for this.
2020-07-18 14:30:50 +02:00
MrSimbax 4905abe30b Merge branch 'dev-mod-manager' of https://github.com/DavivaD/colobot into dev-mod-manager 2020-07-17 11:49:51 +02:00
Fiftytwo c80a816808 Merge branch 'dev' into dev-heavyduty 2020-07-13 19:51:23 +02:00
Fiftytwo a2c62a9da6 Make Heavy bots destroy bushes on contact 2020-07-13 19:44:50 +02:00
tomangelo 37e4ed8029
Updated license headers (#1317)
* Updated headers

* Updated more headers
2020-07-07 10:19:36 +02:00
Fiftytwo 373d8de7d0 Make burning and destroyed objects physical 2020-06-13 16:08:06 +02:00
Fiftytwo 7f9efea0a2 Remove unnecessary whitespaces 2020-05-15 20:29:48 +02:00
Fiftytwo 0b9673029d Merge dev into dev-builders and resolve conflicts 2020-05-15 15:06:37 +02:00
Emxx52 00d72d8d7b
Merge pull request #1265 from DavivaD/dev-thumper-patch
Thumper Patch
2020-04-24 21:09:04 +02:00
Fiftytwo ddab760624 Add rollert.png to OldModelManager 2020-04-07 14:35:59 +02:00
Fiftytwo 0c69dc8d30 Make Ants and Spiders able to destroy TargetBot 2020-04-05 16:05:57 +02:00
Martin Doucha 69aba7c352 Fix OpenGL 3.3 specular lighting 2019-12-29 14:46:39 +01:00
Martin Doucha 0d30624119 Fix OpenGL 2.1 specular lighting 2019-12-29 14:46:39 +01:00
DavivaD 190e04fdd7 Move PT_FRAGV to the end of the pyro_type.h list + Undo reordering 2019-07-26 17:33:04 +02:00
DavivaD 9c2ea5f488 Undo some changes + space fixes 2019-07-22 17:04:15 +02:00
DavivaD b8b2d32bc1 Thumper Patch 2019-07-22 01:15:11 +02:00
B-CE 17d85eb434 Translate french comments + correct typo 2019-06-19 08:50:47 +02:00
Tim Göttlicher e9a153df14 Smoother shadows on OpenGL 2.1 2019-04-28 01:27:12 +02:00
tomangelo2 0f6e1d7d4a Style fix 2019-02-18 14:43:56 +01:00
tomangelo bc3fbd21d0
Merge pull request #1231 from colobot/dev-issue-1128
Potential fix for issue #1128
2019-02-07 01:12:10 +01:00
tomangelo b50a71bde4
Merge pull request #1239 from suve/use-sizeof-in-ModelOutput-WriteOldModel
Tweak strncpy() usage in ModelOutput::WriteOldModel
2019-02-07 01:11:55 +01:00
suve 086e07168d Use sizeof() instead of magic number for strncpy in ModelOutput::WriteOldModel 2019-02-02 18:53:36 +01:00
tomangelo2 be97167994 Potential fix for issue #1128 2019-01-02 01:18:45 +01:00
Fiftytwo 723c552783 Add Heavy and Amphibious trainer bots 2018-12-23 07:04:06 +01:00
Bartosz Cieśla 7c88a6e667 Fix for #1194 2018-10-13 10:12:41 +02:00
tomangelo 9aa3773752
Merge pull request #1199 from CHmSID/fix-more-warnings
Fix another GCC 8.2.0 warning
2018-09-08 22:01:01 +02:00
tomangelo a76bbe49ed
Merge pull request #1189 from colobot/dev-msvc
Add some Visual Studio specific fixes
2018-09-08 22:00:47 +02:00
tomangelo 7d46ee762a
Merge pull request #1181 from colobot/dev-vsync
Add VSync switch to Device tab
2018-08-21 12:16:03 +02:00
Jerzy B 6f0a294048 Give space for a null character in texture name 2018-08-18 09:11:46 +01:00
DavivaD 1b47cf76d3 Implement Mod Manager 2018-08-02 07:38:32 +02:00
MrSimbax 7e19622b85 Allow both F11 and F12 for stats 2018-07-25 23:45:15 +02:00
MrSimbax 32d3d1eb92 Change key for debug menu to F10 and for stats to F11
F12 is used by Visual Studio debugger to trigger a breakpoint and apparently it cannot be changed:

"The F12 key is reserved for use by the debugger at all times, so it should not be registered as a hot key. Even when you are not debugging an application, F12 is reserved in case a kernel-mode debugger or a just-in-time debugger is resident."
Source: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646309.aspx?f=255&MSPPError=-2147217396
2018-07-25 21:38:47 +02:00
tomangelo 5080cb46b1
Merge pull request #1031 from tomangelo2/dev
Added fonts configurability by a separate file
2018-07-25 19:51:55 +02:00
tomangelo2 3383532752 Changed font_config to font_loader
Apparently linter doesn't like files with `config` in its name
2018-07-25 00:44:06 +02:00
tomangelo2 df46bcfe2d Fix another linter warning 2018-07-23 14:03:59 +02:00
tomangelo d90592f7b6
Merge pull request #1162 from AbigailBuccaneer/gl-cleanup
Clean up and improve CGLxxDevice code
2018-07-23 12:15:08 +02:00
tomangelo 5041aa377d
Merge pull request #1156 from AbigailBuccaneer/redundant-shadowmap-renderbuffer
Don't create a color renderbuffer for shadow map
2018-07-23 12:14:45 +02:00
tomangelo2 359abf9a82 Add VSync switch to Device tab 2018-07-05 19:43:56 +02:00
krzys-h 12cf57409c Support more buttonX.png files in other places than just buttons 2018-05-10 11:24:59 +02:00
AbigailBuccaneer e481905a25 Do less state setting in gl14 and gl21 2018-05-09 21:03:08 +01:00
AbigailBuccaneer c9a8a242a0 Remove CGL14Device's support for display lists
Closes #1153.
2018-05-09 21:03:08 +01:00
AbigailBuccaneer f8ebc6ec21 Remove code for drawing dynamic vertex formats
It's unused, and it's a bad idea - it's important for authoring tools
and for performance that vertex formats are well-defined instead of
dynamically created.
2018-05-09 21:03:08 +01:00
AbigailBuccaneer 94b30c00a0 Remove code duplication in CGLxxDevice 2018-05-09 21:03:08 +01:00
AbigailBuccaneer c027b54add Don't create a color renderbuffer for shadow map
When rendering the shadow map offscreen using framebuffer objects, it's
not necessary to create a color renderbuffer. Currently
FramebufferParams only lets you choose between a renderbuffer and a
texture for both color and depth attachments. This changes that, and now
you can ask for a texture, a renderbuffer, or nothing.

This improves performance. On my computer, with an 8192x8192 shadow map,
this improves overall frame time by 8.0%.
2018-05-09 17:25:52 +01:00
krzys_h 182c4c5cbf
Merge pull request #1154 from AbigailBuccaneer/shadow-shimmering
Fix shadow shimmering
2018-05-07 20:53:28 +02:00
krzys_h a54f65f71b
Merge pull request #1152 from AbigailBuccaneer/consistent-shadow-antialiasing
Improve shadow quality and performance in gl33
2018-05-07 20:53:21 +02:00
krzys_h 50ed675acd
Merge pull request #1150 from AbigailBuccaneer/debug-rendering
Add generic debug rendering functions
2018-05-07 20:53:12 +02:00
krzys_h f146d2885b
Merge pull request #1149 from AbigailBuccaneer/tighter-visibility-checking
Improve object visibility culling with tighter bounding spheres
2018-05-07 20:53:00 +02:00
krzys-h 6ccf32ec68 fixup! Fix code style in #1150 2018-05-07 20:28:31 +02:00
AbigailBuccaneer abeb7fceb2 Fix shadow shimmering
Shadow shimmering is a visual artefact where the outlines of shadow
mapped objects don't stay stable when the camera is moved or rotated.
The reason is that as the shadow map's origin moves, the objects
rendered to the shadow map have temporal aliasing around their edges.

The solution is to only move the shadow map in texel-sized increments.
Because the shadow map's projection is orthographic, moving the shadow
map origin in texel increments ensures that objects that aren't moving
don't show any temporal aliasing, as the position of the samples of the
object in worldspace stay the same.
2018-05-04 10:56:37 +01:00
AbigailBuccaneer 0d6fffd91f Improve shadow quality and performance in gl33
If CONFIG_QUALITY_SHADOWS is defined (which it always is) then the
fragment shader code that samples the shadow map will take five samples
in a cross shape around the point to be sampled, to apply antialiasing.

Currently, the offset of these samples is hardcoded to 0.00025× the
shadow map resolution. This is very inconsistent: if the shadow map
resolution is 128×128, then these samples are 0.032 texels apart, which
is a waste of four texture samples, and essentially means that no
antialiasing is applied. If the shadow map resolution is 8192×8192, then
these samples are 2.048 texels apart, which causes visual artefacts
around shadow edges, instead of giving smoother shadows.

The correct thing to do is to always sample exactly one texel away from
the original position. This is easy in GLSL 3.30, as it includes a
textureOffset function which offsets a texture fetch by an exact number
of texels. This is faster than manually calculating an offset ourselves,
it fixes visual artefacts at high resolutions, and it properly applies
antialiasing at low resolutions.
2018-05-02 16:30:45 +01:00
krzys-h 38a34829af Fix code style in #1150 2018-05-01 21:27:49 +02:00
AbigailBuccaneer 6f6cfb136a Batch draw calls from CText to improve performance
This significantly speeds up text rendering. On my computer, looking at
the program editor with a full screen of text, this commit takes the
framerate from under 30 to 60 (hitting vsync).

Performance could be further improved in the gl33 renderer by using
instancing or glPrimitiveRestartIndex instead of glMultiDrawArrays, but
that would be a more invasive change.

All of the interface rendering could use a unified quad batching system,
instead of it being limited to CText, but that would require some
refactoring in CText as it currently draws using a different coordinate
space to the rest of the interface.

Fixes #1104.
2018-04-30 10:18:51 +01:00
AbigailBuccaneer c445d7d9a9 Add generic debug rendering functions
Currently the engine can draw debug spheres to show crash sphere
positions. This extends this to draw arbitrary spheres and cuboids,
transformed arbitrarily. With these in place it's now very quick and
easy to create a debug visualisation - for example, it's a one-line code
change to render the bounding box or sphere of every EngineObject.
2018-04-29 23:41:53 +01:00
AbigailBuccaneer 282a793a13 Improve object vis with tighter bounding spheres
This commit improves rendering performance by doing a better job of
checking whether an object is visible via its bounding sphere or not.

The engine maintains a bounding box for each EngineBaseObject that's
exactly large enough to fit every vertex. From this, it computes a
bounding sphere, and only draws objects if the sphere is within the view
frustum. Previously, the bounding sphere was always centered on the
EngineBaseObject's origin, even for models where the bounding box center
is significantly offset from the origin. Now, the bounding sphere is
always the tightest sphere which fits the bounding box.
2018-04-29 19:35:02 +01:00
AbigailBuccaneer c49c815ea5 Set uniforms less often during text rendering
We now call SetWindowCoordinates and SetInterfaceCoordinates once per
string, rather than once or twice per character.
2018-04-27 10:43:26 +01:00
AbigailBuccaneer ea64edaa0b Compile with -Wmissing-declarations
-Wmissing-declarations enforces that every function (except for static
functions) must be declared separately before it's defined. This
essentially enforces that every function must be either static, or
declared in a header elsewhere.

This helps the optimizer, as it can do a better job of inlining if it
knows that a function won't be used outside of a given file. It also
helps -Wunused-function (which is enabled by -Wall) find more unused
functions.

Note that Clang spells this option -Wmissing-prototypes, which
confusingly is the name of a related but different warning option under
GCC.
2018-04-21 16:49:27 +01:00
AbigailBuccaneer 4119e669d1 Remove central tracking of SystemTimeStamp
SystemTimeStamp used to be an opaque class, as it was provided by
`system_{linux/other/windows}.h`. Because of this, code dealt in
SystemTimeStamp pointers, and getting the current timestamp required a
memory allocation. Now SystemTimeStamp is just a
`std::chrono::time_point`, we can make the code cleaner and faster by
just directly keeping SystemTimeStamp instead of pointers around.
2018-04-20 09:57:10 +01:00
AbigailBuccaneer 2a003a27b1 Use C++11 threads, mutexes and condition variables 2018-04-20 09:56:57 +01:00
krzys-h e964d3e48c Fix colobot-lint warnings 2018-04-20 02:21:12 +02:00
krzys-h 1c2bdc9cab Update license headers 2018-04-20 02:08:50 +02:00
Mateusz Przybył 46bef8fd92
Add button4.png drawing (builder icons) 2017-11-17 18:59:14 +01:00
Fiftytwo a024866fd3 Builder bots base implementation 2017-11-16 18:43:45 +01:00
tomangelo2 ff97df74c6 Added support for italic and bold variants of studio and satcom fonts
They aren't currently used anywhere
2017-10-28 22:22:22 +02:00
tomangelo2 94cacdae96 Removed singletone from FontConfig
Also renamed class so it now matches better with class file name
2017-10-15 23:46:15 +02:00
tomangelo2 52d9330114 Replaced multiple methods with one 2017-10-15 23:31:06 +02:00
tomangelo2 dd9439aed2 Renamed font_file to font_config 2017-10-15 22:47:32 +02:00
tomangelo2 054d1c3e54 Changed in-engine fonts names 2017-10-11 17:10:04 +02:00
tomangelo2 cf46c2457a Moved file font.ini to /fonts/ directory
Separated SatCom font from Colobot font
2017-10-11 17:02:09 +02:00
tomangelo2 250c934b9e Added fonts configurability by a separate file 2017-10-09 00:36:31 +02:00
immibis 8b0ccf6667 Fix horizontal scrolling of background images. 2017-08-05 20:08:00 +12:00
immibis 2e8798b33d Make planets stay in one place in the sky - at least in the X direction. 2017-08-05 20:08:00 +12:00
immibis 2751db3245 Add horizontal FoV to CEngine 2017-08-05 19:45:08 +12:00
krzys-h d860a08d21 Merge long first frame rendering fix from #898
Also did some changes to make sure the "F1 to open SatCom" appears immediately (not after 0.1s),
and that mission timer won't start ticking in the first simulation frame (mainly for code battle initial pause)
2017-06-04 13:10:50 +02:00
krzys-h 4faabf2185 Apply shadow mapping performance counter patch from #923 2017-06-03 21:11:18 +02:00