[a Work In Progress fork, expect history overwriting]
Find a file
Andrei Alexeyev a5fd6fe5d9
Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240)
* WIP compressed textures, swizzles, sRGB sampling, ...

* refactor texture type info & fix random bugs

* fix preprocessing of sRGB textures

* handle y-flipped basis textures

* glcommon: better WebGL compat for compressed format detection

* missed WEBGL_compressed_texture_pvrtc

* implement compressed texture xcoding and uploading

* Add basis_universal submodule

* Reorganize texture loader code

Clean up some code
Isolate Basis Universal loader into a separate module

* Add wrapper script for encoding .basis textures

* basisu: honor custom metadata written by the mkbasis.py script

* mkbasis.py: add --incredibly-slow and --dry-run

* Move pixmap code from util/ to pixmap/

* Add an on-disk transcode cache for basis textures to speed up loads

* Compress texture cache with zlib

* Use readable format names for basisu cache filenames

* basisu: mip bias test code

* basisu: small caching cleanup

* add TAISEI_BASISU_MIP_BIAS env variable

* Improve OpenGL format matching heuristics

* Document considerations for compressed format priority

* Remove dead code

* Enable two forgotten formats, BC3_RGBA and ATC_RGBA

Also prefer BC7 over BC1/BC3

* Recognize GL_ANGLE_compressed_texture_etc for ETC2 textures

* Default depth buffers to 24-bit; remove ANGLE hack

* Fix glcommon_check_extension for GLES2/legacy gl

* Add renderer feature bit for texture swizzle masks

* glcommon: Fixup internal formats for GLES2

Sized internal formats are not allowed in GLES2

* Fix emscripten compile errors

* Update basis_universal

* remove more dead code

* revert irrelevant stage4 change

* shut up UBSan

* basisu: shut up some debug spam

* Add normalmap sampling helper to util.glslh

* basisu: add a gray-alpha mode

* mkbasis.py: Abort if image dimansions aren't multiples of 4

* Add basic Basis Universal encoding documentation (WIP)

* doc/basisu: Add paragraph about modes; minor tweaks

* basisu: workarounds for GL texture size requirements

* gles20: fix uncompressed sRGB formats

* Partial workaround for missing swizzles in gles2 and webgl

* remove invalid assertion

* New renderer API to expose glDrawBuffers-like functionality

* stagedraw: disable all color outputs for copy_depth pass

required for WebGL compatibility

* support GL_ANGLE_request_extension

* emscripten: include *.basis in gfx package

Also fix a potential problem when more than one .pkgdir is used to
construct emscripten packages

* Don't rely on emscripten runtime to enable webgl extensions
2020-08-15 14:51:12 +03:00
.github Create FUNDING.yml 2019-08-01 00:35:13 +03:00
atlas update portraits 2020-05-10 18:40:19 +03:00
doc Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
emscripten Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
external Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
misc Video resolution improvements/high-DPI quirks (#204) 2020-03-30 00:03:38 +03:00
resources Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
scripts Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
src Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
subprojects Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
switch resize switch icon 2019-09-28 21:31:23 +03:00
xdg Update Freedesktop.org stuff; add AppStream metadata 2019-09-30 08:50:07 +03:00
.editorconfig Prevent OS DPI scaling on windows (untested) 2020-03-30 02:04:46 +03:00
.gitattributes our headers are not C++ 2020-04-10 07:19:54 +03:00
.gitignore New (themed) difficulty/shot mode descriptions (#192) 2020-03-04 22:26:53 +02:00
.gitmodules Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
.mailmap Update email 2020-04-02 18:40:55 +02:00
checkout add submodule helper scripts, update readme 2019-02-22 23:46:54 +02:00
COPYING update year in COPYING 2019-07-03 21:01:48 +03:00
meson.build Texturing overhaul: GPU compression, sRGB sampling, swizzles, etc. (#240) 2020-08-15 14:51:12 +03:00
meson_options.txt Audio rewrite (#236) 2020-06-22 17:41:03 +03:00
pull add submodule helper scripts, update readme 2019-02-22 23:46:54 +02:00
README.rst Audio rewrite (#236) 2020-06-22 17:41:03 +03:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Taisei
======

.. contents::

Introduction
------------

Taisei is an open clone of the Tōhō Project series. Tōhō is a one-man project of
shoot-em-up games set in an isolated world full of Japanese folklore.

Installation
------------

Dependencies
^^^^^^^^^^^^

-  OpenGL >= 3.3 or OpenGL ES >= 3.0 or OpenGL ES >= 2.0 (with some extensions)
-  SDL2 >= 2.0.6
-  freetype2
-  libpng >= 1.5.0
-  libwebpdecoder >= 0.5 or libwebp >= 0.5
-  libzip >= 1.2
-  opusfile
-  zlib

Optional:

-  OpenSSL (for a better SHA-256 implementation; used in shader cache)
-  SPIRV-Cross >= 2019-03-22 (for OpenGL ES backends)
-  libshaderc (for OpenGL ES backends)

Build-only dependencies
^^^^^^^^^^^^^^^^^^^^^^^

-  Python >= 3.5
-  meson >= 0.48.0 (build system; >=0.49.0 recommended)

Optional:

-  docutils (for documentation)

Obtaining the source code
^^^^^^^^^^^^^^^^^^^^^^^^^

Stable releases
"""""""""""""""

You can find the source tarballs at the
`Releases <https://github.com/taisei-project/taisei/releases>`__ section on
Github. **Do not** grab Github's auto-generated source archives, those do not
contain the required submodules. This only applies for versions v1.3 and above.

Latest code from git
""""""""""""""""""""

If you cloned Taisei from git, make sure the submodules are initialized:

::

    git submodule init
    git submodule update

This step needs to be done just once, and can be skipped if you specified the
``--recursive`` or ``--recurse-submodules`` option when cloning.

**Important:** You should also run ``git submodule update`` whenever you pull in
new code, checkout another branch, etc. The ``pull`` and ``checkout`` helper
scripts can do that for you automatically.

Compiling from source
^^^^^^^^^^^^^^^^^^^^^

To build and install Taisei on \*nix, just follow these steps:

::

    cd /path/to/taisei/source
    mkdir build
    cd build
    meson --prefix=$yourprefix ..
    ninja
    ninja install

This will install game data to ``$prefix/share/taisei/`` and build this
path *statically* into the executable. This might be a package
maintainers choice. Alternatively you may want to add
``-Dinstall_relative=true`` to get a relative structure like

::

    $prefix/taisei
    $prefix/data/

``install_relative`` is always set when building for Windows.

The OpenGL ES 3.0 backend is not built by default. To enable it, do:

::

    meson configure -Dr_gles30=true -Dshader_transpiler=true

See `here <doc/ENVIRON.rst>`__ for information on how to activate it.
Alternatively, do this to make GLES 3.0 the default backend:

::

    meson configure -Dr_default=gles30

The OpenGL ES 2.0 backend can be enabled similarly, using ``gles20`` instead of
``gles30``. However, it requires a few extensions to function correctly, most
notably:

- ``OES_depth_texture`` or ``GL_ANGLE_depth_texture``
- ``OES_standard_derivatives``
- ``OES_vertex_array_object``
- ``EXT_frag_depth``
- ``EXT_instanced_arrays`` or ``ANGLE_instanced_arrays`` or
  ``NV_instanced_arrays``


Where are my replays, screenshots and settings?
-----------------------------------------------

Taisei stores all data in a platform-specific directory:

-  On **Windows**, this will probably be ``%APPDATA%\taisei``
-  On **macOS**, it's ``$HOME/Library/Application Support/taisei``
-  On **Linux**, **\*BSD**, and most other **Unix**-like systems, it's
   ``$XDG_DATA_HOME/taisei`` or ``$HOME/.local/share/taisei``

This is referred to as the **Storage Directory**. You can set the environment
variable ``TAISEI_STORAGE_PATH`` to override this behaviour.

Game controller support
-----------------------

Taisei uses SDL2's unified GameController API. This allows us to correctly
support any device that SDL recognizes by default, while treating all of them
the same way. This also means that if your device is not supported by SDL, you
will not be able to use it unless you provide a custom mapping. If your
controller is listed in the settings menu, then you're fine. If not, read on.

An example mapping string looks like this:

::

    03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,

There are a few ways to generate a custom mapping:

-  You can use the
   `controllermap <https://aur.archlinux.org/packages/controllermap>`__ utility,
   which `comes with SDL source code
   <https://hg.libsdl.org/SDL/file/68a767ae3a88/test/controllermap.c>`__.
-  If you use Steam, you can configure your controller there. Then you can add
   Taisei as a non-Steam game; run it from Steam and everything should *just
   work™*. In case you don't want to do that, find ``config/config.vdf`` in your
   Steam installation directory, and look for the ``SDL_GamepadBind`` variable.
   It contains a list of SDL mappings separated by line breaks.
-  You can also try the `SDL2 Gamepad Tool by General Arcade
   <http://www.generalarcade.com/gamepadtool/>`__. This program is free to use,
   but not open source.
-  Finally, you can try to write a mapping by hand. You will probably have to
   refer to the SDL documentation. See `gamecontrollerdb.txt
   <misc/gamecontrollerdb/gamecontrollerdb.txt>`__ for some more examples.

Once you have your mapping, there are two ways to make Taisei use it:

-  Create a file named ``gamecontrollerdb.txt`` where your config, replays and
   screenshots are, and put each mapping on a new line.
-  Put your mappings in the environment variable ``SDL_GAMECONTROLLERCONFIG``,
   also separated by line breaks. Other games that use the GameController API
   will also pick them up.

When you're done, please consider contributing your mappings to
`SDL <https://libsdl.org/>`__,
`SDL_GameControllerDB <https://github.com/gabomdq/SDL_GameControllerDB>`__,
and `us <https://github.com/taisei-project/SDL_GameControllerDB>`__, so
that other people can benefit from your work.

Also note that we currently only handle input from analog axes and digital
buttons. Hats, analog buttons, and anything more exotic will not work, unless
remapped.

Troubleshooting
---------------

Sound problems (Linux)
^^^^^^^^^^^^^^^^^^^^^^

If your sound becomes glitchy, and you encounter lot of console messages like:

::

    ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occurred

it seems like you possibly have broken ALSA configuration. This may be fixed by
playing with parameter values of ``pcm.dmixer.slave`` option group in
``/etc/asound.conf`` or wherever you have your ALSA configuration.
Commenting ``period_time``, ``period_size``, ``buffer_size``, ``rate`` may give
you the first approach to what to do.

Contact
-------

-  https://taisei-project.org/

-  `#taisei-project on Freenode <irc://irc.freenode.org/taisei-project>`__

-  `Our server on Discord <https://discord.gg/JEHCMzW>`__