Commit Graph

583 Commits (38058512556e6786370668e46ceb0a8dc025282f)

Author SHA1 Message Date
Tomasz Kapuściński db3b1d74d1 Refactored unnecessary Normalize, DotProduct, CrossProduct and Clamp functions 2022-01-04 02:10:36 +01:00
Tomasz Kapuściński 6277e10b3f Refactored Math::Vector in CParticle, CPlanet, CPyro, CTerrain, CText, CWater, ModelInput and few structures 2021-12-29 01:55:48 +01:00
Tomasz Kapuściński 47ad390f1d Refactored Math::Vector in CCamera, CLightManager, CLightning, CMainMovie, glutil.h and geometry.h 2021-12-29 00:08:02 +01:00
Tomasz Kapuściński d25d6124a9 Changed Math::Vector into alias to glm::vec3 2021-12-28 23:01:30 +01:00
Tomasz Kapuściński 70151279f6 Removed Math::Point and minor refactor 2021-12-24 20:44:54 +01:00
Tomasz Kapuściński 431416d75e Refactored Math::Point in CEngine 2021-12-24 20:25:38 +01:00
Tomasz Kapuściński 3fabdad1fe Refactored Math::Point in CSettings, CParticle, CPyro, CInterface, CMainUserInterface and CScreen 2021-12-24 03:45:59 +01:00
Tomasz Kapuściński 9691974b1a Refactored Math::Point in CLighting, CParticle, CParticleGenerator and CText 2021-12-24 02:36:54 +01:00
Tomasz Kapuściński 07d3d79e8d Refactored Math::Point in CPlanet, CTerrain, CWater and CLevelParserParam 2021-12-24 02:04:15 +01:00
Tomasz Kapuściński 498f15cc92 Refactored Math::Point in CApplication, CInput, CCamera, CCloud and Event 2021-12-24 01:38:54 +01:00
Tomasz Kapuściński b36ec266f0 Refactored Math::Point from vertex types 2021-12-24 00:57:04 +01:00
Tomasz Kapuściński c0d067d24b Changed Math::Point into alias to glm::vec2, minor refactors 2021-12-24 00:11:12 +01:00
Tomasz Kapuściński 55c692e8bb Refactored Math::IntPoint in CEngine and CParticle 2021-12-23 23:08:56 +01:00
Tomasz Kapuściński 835f84584e Refactored Math::IntPoint in CTerrain 2021-12-23 22:47:44 +01:00
Tomasz Kapuściński bd2ad39f6a Refactored Math::IntPoint in CText 2021-12-23 22:47:15 +01:00
Tomasz Kapuściński cd6ea1a4c5 Changed Math::IntPoint into alias to glm::ivec2 2021-12-23 22:09:58 +01:00
MrSimbax 4ecfb47f07 Fix MSVC errors 2021-12-21 18:01:42 +01:00
MrSimbax d3dd99c384 Refactor fonts reloading
* Remove hardcoded default font name.
  This means the `fonts/fonts.ini` file is now mandatory
  and must contain definition of all 9 font types.
  Old mods relying on an incomplete `fonts.ini` file might break.
  A separate PR creating the required `fonts/fonts.ini` file
  should be merged before this pull request.
* Simplify `CFontLoader`.
    * Return `std::optional` instead of returning a default.
    * Remove the now unnecessary `std::map`s.
    * Remove the now unnecessary `GetFontType` method.
* Improve Gfx::FontType.
    * Provide `ToString` function for the enum, which is now
      used for logs and by `CFontLoader`.
    * Provide `ToBoldFontType` and `ToItalicFontType` functions.
    * Replace hex literals with binary literals for readability.
* Move font caching related code to a new private class `FontsCache`.
    * Add neccessary changes because of changes made in `CFontLoader`.
    * Add minor code improvements like renames and formatting.
    * Split the code into smaller functions for readability.
    * Simplify the `CText` class.
* Apply the rule of 5 to the `CachedFont` structure.
2021-12-21 00:50:36 +01:00
Tomasz Kapuściński 0207669d61 Added optional triplanar mapping mode for the secondary texture 2021-12-14 21:54:19 +01:00
Tomasz Kapuściński b158318e83 Possibly a fix for most transparency issues 2021-12-14 21:51:29 +01:00
Tomasz Kapuściński 2583f6fe36 Removed UIRenderer's DrawPrimitive() via CDevice 2021-12-12 21:17:39 +01:00
Tomasz Kapuściński d1489a1fb1 Removed ShadeModel 2021-12-05 13:01:12 +01:00
Tomasz Kapuściński 0568fcdb81 Refactored FillMode to enum class 2021-12-05 12:53:31 +01:00
Tomasz Kapuściński 39c837d323 Refactored PrimitiveType to enum class 2021-12-05 12:26:34 +01:00
Tomasz Kapuściński 9139239f9f Merge branch 'dev' into dev-graphics-overhaul
# Conflicts:
#	src/app/app.cpp
#	src/graphics/opengl/gl14device.cpp
#	src/graphics/opengl/gl14device.h
#	src/graphics/opengl/gl21device.cpp
#	src/graphics/opengl/gl21device.h
2021-12-01 17:27:54 +01:00
Tomasz Kapuściński 57502d2f54 Added object renderer (WIP)
Rewritten shadow rendering logic
Split some shaders into smaller parts
Shadow renderer now has its own framebuffer object
2021-12-01 17:05:20 +01:00
Tomasz Kapuściński fea6b87139 Added fog to terrain renderer and renamed variables 2021-10-17 16:27:29 +02:00
Tomasz Kapuściński 4157604458 Added shadow renderer and removed rendering modes 2021-10-17 16:05:20 +02:00
Tomasz Kapuściński 79d4cd9060 Updated TerrainRenderer
* Engine will now use it to render terrain
* Added directional light source
* Added dynamic shadows
* Moved visibility computation to CEngine
* Removed uniform buffers
2021-09-19 20:08:31 +02:00
MrSimbax 80f074e2ba Update license headers 2021-09-11 15:53:59 +02:00
MrSimbax a69b88e09a Move time related functions out of CSystemUtils
GetCurrentTimeStamp() has not been moved because of
CApplication unit tests.
2021-09-11 13:26:38 +02:00
MrSimbax 5daaba6e64 Fixes after merge
Fix mistakes after previous merge and make it compile.

Rewrite the function interpolating between time stamps as it was
written after the original pull request was created. Add unit tests
for it.

I couldn't help myself and also changed some enums to enum classes and
did some renames.
2021-09-11 12:44:26 +02:00
MrSimbax 2b107736e2 Merge branch 'platform-independent' of https://github.com/AbigailBuccaneer/colobot into AbigailBuccaneer-platform-independent 2021-09-11 10:47:39 +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 12e696bf1c Added color and moved uniform data to uniform buffer block 2021-09-05 16:32:17 +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
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
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 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
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
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
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 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
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 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 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 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
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