GithubHelp home page GithubHelp logo

geraldkimmersdorfer / fancyalpinemapsrenderer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from alpinemapsorg/renderer

0.0 0.0 0.0 15.45 MB

Rendering system for alpine maps.

License: GNU General Public License v3.0

C++ 77.15% QML 12.33% CMake 4.00% GLSL 6.51%

fancyalpinemapsrenderer's Introduction

alpine-renderer

A developer version is available at alpinemaps.org, and an apk for android under https://alpinemaps.org/apk. Be aware that it can break at any time!

We are in discord, talk to us! https://discord.gg/p8T9XzVwRa

Cloning and building

git clone [email protected]:AlpineMapsOrg/renderer.git

After that it should be a normal cmake project. That is, you run cmake to generate a project or build file and then run your favourite tool. All dependencies should be pulled automatically into renderer/external while you run CMake. We use Qt Creator (with mingw on Windows), which is the only tested setup atm and makes setup of Android and WebAssembly builds reasonably easy. If you have questions, please open a new discussion.

Dependencies

  • Qt 6.6.0, or greater
  • OpenGL
  • Qt Positioning and Charts modules
  • Some other dependencies will be pulled automatically during building.

Building the android version

  • We are usually building with Qt Creator, because it works relatively out of the box. However, it should also work on the command line or other IDEs if you set it up correctly.
  • You need a Java JDK before you can do anything else. Not all Java versions work, and the error messages might be surprising (or non-existant). I'm running with Java 19, and I can compile for old devices. Iirc a newer version of Java caused issues. Android documents the required Java version, but as said, for me Java 19 works as well. It might change in the future.
  • Once you have Java, go to Qt Creator Preferences -> Devices -> Android. There click "Set Up SDK" to automatically download and install an Android SDK.
  • Finally, you might need to click on SDK Manager to install a fitting SDK Platform (take the newest, it also works for older devices), and ndk (newest as well).
  • Then Google the internet to find out how to enable the developer mode on Android.
  • On linux, you'll have to setup some udev rules. Run Android/SDK/platform-tools/adb devices and you should get instructions.
  • If there are problems, check out the documentation from Qt
  • Finally, you are welcome to ask in discord if something is not working!

Building the WebAssembly version:

  • Atm, none of the Qt versions works perfectly in all browsers
  • In Qt 6.6 touch doesn't work on Firefox (issues #33)
  • The Qt documentation is quite good on how to get it to run. Be aware that only specific versions of emscripten work for specific versions of Qt, and the error messages are not helpfull.
  • The threaded version doesn't seem to work atm, so use the non-threaded (bug reported)!
  • There are a number of other bugs, we track them with the upstream tag.

Code style

  • class names are CamelCase, method, function and variable names are snake_case.
  • class attributes have an m_ prefix and are usually private, struct attributes don't and are usually public.
  • use void set_attribute(int value) and int attribute() const for setters and getters (that is, avoid the get_). Use the Qt recommendations for naming boolean getters.
  • structs are usually small, simple, and have no or only few methods. they never have inheritance.
  • files are CamelCase if the content is a CamelCase class. otherwise they are snake_case, and have a snake_case namespace with stuff.
  • the folder/structure.h is reflected in namespace folder::structure{ .. }
  • indent with space only, indent 4 spaces
  • ideally, use the clang-format file provided with the project (in case you use Qt Creator, go to Preferences -> C++ -> Code Style: Formatting mode: Full, Format while typing, Format edited code on file save, don't override formatting)
  • follow the Qt recommendations and the c++ core guidelines everywhere else.

fancyalpinemapsrenderer's People

Contributors

adam-ce avatar jakoblindner avatar geraldkimmersdorfer avatar gue-ni avatar

fancyalpinemapsrenderer's Issues

Move encoding of dist for ReadBack part of compose

The encoding inside the gbuffer step is not necessary and can be moved to the compose step. This should be possible without loss of accuracy since we send the uncompressed position vec3 to the compose shader anyway. Should be a little bit faster in the end

Rework Timer Manager and Front End Timer Manager

The timer report should not contain a shared pointer to the TimerInterface object. For this additional signals and slots should be implemented that sync the timer definitions whenever necessary. (usually only on startup) TimerReports only submit a timer id that then can be mapped to a specific timer by the front end timer manager.

WHY?
It's a bit safer and maybe a tiny bit faster. The TimerInterface in general is not thread safe. Since i just use it for reading access its okay, but then again we increment and decrement the shared counter for every report (every frame).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.