Coder Social home page Coder Social logo

weigert / tinyengine Goto Github PK

View Code? Open in Web Editor NEW
959.0 23.0 61.0 81.63 MB

Tiny OpenGL Wrapper / 3D Engine in C++

C++ 86.29% C 13.18% Makefile 0.19% Python 0.31% GLSL 0.02%
engine3d engine opengl3 3d-engine tinyengine shaders drawing wrapper drawing-helper audio

tinyengine's Introduction

TinyEngine

Small OpenGL based 2D/3D Engine / Wrapper in C++

Supported on GNU/Linux and MacOS

Rendering Example Program Simple generated perlin-noise heightmap rendered with normal vectors as colors (Example Program 2)

LINES OF CODE (without unreasonable compression):

	Main File: 198
	Main Classes: 313
	Utility Classes: 743
	Helpers Namespaces: 733
	Core Total: 1254
	Total: 1987

History:
	12. Apr 2020: 885
	29. Apr 2020: 1116
	17. May 2020: 1667
	23. May 2020: 1065
	01. Aug 2020: 1145
	21. Feb 2021: 1378
	27. Jul 2021: 1943
	26. Jan 2022: 1969
	26. Nov 2022: 1928
	20. Mar 2023: 1987

Note: If you are using TinyEngine for any projects, please let me know!

Description

Based on many previous OpenGL projects, I have a good idea of what features I need in an engine to build visually appealing visualizations of generated data. Many of the projects had the same overarching structure, and used the same OpenGL wrapping structures. This engine unifies those basic concepts.

The goal of this "engine" is to act as an intuitive wrapper for boilerplate OpenGL, allowing for quick and easy development of 2D / 3D visualizations of generated data. I also want to keep it as small as possible, giving only necessary abstractions of boilerplate OpenGL code, and doing the rest with user-defined behaviors passed to the engine.

This is also a learning project, for practicing engine / systems design. This is not intended as an optimized game development library, but can be used to generate beatiful visualizations of generated data.

If anybody likes the structure, they are free to adopt it or recommended additions / changes.

As I continue to build projects using this engine, I plan on slowly expanding its feature set, as long as new features fit elegantly into the overall structure and offer a large amount of functionality for little additional effort.

Multi-Julia Animation

Animated Julia-Set (Example 4). See my blog here.

Structure

The main engine interface is wrapped in a namespace Tiny. This namespace has three (global) static members, which are its main component classes:

- View Class (Tiny::view):       Window handling, rendering, GUI interface
- Event Class (Tiny::event):     Event handling for keyboard and mouse, window resizing
- Audio Class (Tiny::audio):     Audio interface for playing / looping sounds

A number of utility classes wrap typical OpenGL features into easily useable structures. These have simple constructors and destructors that wrap the necessary OpenGL so you don't have to worry about it:

- Texture:      OpenGL texture wrapper with constructors for different data types (e.g. algorithm, raw image, ...)
- Shader:       Load, compile, link and use shader programs (vertex, fragment, geometry) easily, pass SSBO.
- Compute:      Derived from Shader, allows for compute shader dispatching
- Buffer:	OpenGL Buffer Object wrapper. Allows for easy templated loading and data retrieval for the GPU.
- Model:        OpengL VAO/VBO wrapper. Construct from user-defined algorithm. Handles loading, updating, rendering.
- Target:       OpenGL FBO wrapper. Bind one or multiple textures for render targeting. Handles 2D (billboards) and 3D (cubemaps).
- Instance:     OpenGL instanced rendering wrapper (any Model object, any data). Simply add model buffers and render model instanced.

More information can be found on the wiki: Utility Classes

The behavior is combined through a standard game pipeline. The programs behavior is additionally changed through user-defined functions which are called in the relevant parts of the pipeline:

- Tiny::event.handler: 	Lets you define behavior based on user-inputs. Tiny::event stores input data
- Tiny::view.interface: Lets you define an ImGUI interface that can act on your data structures
- Tiny::view.pipeline: 	Combines utility classes to render your data structures to targets / windows
- Tiny::loop: 		Executed every cycle. Arbitrary code acting on your data structures every loop

A number of helper namespaces then supply additional algorithms and functions that are useful.

Example Images

All of the programs shown below are highly interactive and allow for live manipulation of the scene. All of them run in real time and allow for camera movement. Read the very brief example programs to see how TinyEngine is used to construct nice visualizations using very little code.

Procedural Tree A procedural 3D tree (example program 6), that has a leaf particle system and orthogonal projection shadow mapping.

Simple Lighting Scene A simple scene (example program 9) that uses .obj / .mtl files generated in Blender, and then uses cubemaps for point-light shading.

Shader Based Voronoi Texture

An example image of a shader-based voronoi texture generator I implemented as a small experiment (example program 11). Lets you do real-time voronoi filters because its very fast. Here seen for N = 2048. See my blog here here.

Vertex Pooling Voxel Animation

A rendering of a dynamic alpha-blended voxel scene which uses a technique called vertex pooling to reduce driver overhead while drawing. See my blog here

Lattice-Boltzmann 2D Vortex Shedding

A simple implementation of a 2D Lattice Boltzmann Method, showcasing vortex shedding. See my blog here

Simple 3D Cloth Simulation Animation

A 3D cloth simulation, implemented using compute shaders performing a time-integration over a set of particles connected using springs.

Usage

As the code-base is extremely brief, I recommend reading through the code and the example programs to understand how it works. The Wiki contains more information on the individual functions of the classes and how they are used.

Constructing a Program

Building a program with TinyEngine is extremely simple!

Example Program 0:

#include <TinyEngine/TinyEngine>

int main( int argc, char* args[] ) {

	Tiny::window("Example Window", 600, 400);   //Open Window

	Tiny::event.handler = [&](){ /*...*/ };   //Define Event Handler

	Tiny::view.interface = [&](){ /*...*/ };  //Define ImGUI Interface

	/*...Define Utility Classes...*/

	Tiny::view.pipeline = [&](){ /*...*/ };   //Define Rendering Pipeline

	Tiny::loop([&](){ //Start Main Game Loop
        		//... additional code here
	});

	Tiny::quit(); //Close the window, cleanup

	return 0;
}

Check the TinyEngine Wiki for more information on how to construct a basic program. Read the example programs to see how the utility classes are combined to create interactive 2D and 3D programs using OpenGL in very little code.

Compiling and Linking

As of 2021, TinyEngine is built as a statically linked library for easier inclusion in your project. This has a number of benefits:

  • TinyEngine does not need to be copied into your project directory
  • Easier continuous maintenance and updating
  • Faster compilation times

The installation process occurs in the makefile (valid for all operating systems):

make setup     #Copy Core Header Files to Install Location
make helpers   #Copy Helper Headers
make install   #Compile TinyEngine and Copy to Install Location
make all       #All of the above! Run this for easy install.
make examples

The default install locations are $(HOME)/.local/lib for the compiled library and $(HOME)/.local/include for the header files.

Check the (brief!) makefile for options (e.g. install location, compiler flags).

Note that the installation has only been tested on GNU/Linux and install locations might need tuning for your system.

Building a Project

Building a project by default only requires inclusion of the TinyEngine header

#include <TinyEngine/TinyEngine>

and optionally any helper namespace headers, e.g.

//...
#include <TinyEngine/object>
#include <TinyEngine/image>
//...

TinyEngine standalone is linked using:

-lTinyEngine

but also requires linking of all additional dependencies! See the example programs to see exactly how to link the program (makefile). Note that all makesfiles are identical! Different operating systems have slightly different linkage.

Compiled using g++ on Ubuntu 18/20 LTS, Fedora 33 and MacOS Big Sur.

Compatibility Profile

In case your computer / graphics card does not support the latest versions of OpenGL, you can compile your program by defining the additional macro TINYENGINE_COMPATIBILITY, i.e.:

gcc main.cpp -D TINYENGINE_COMPATIBILITY -o main

This will reduce the version to a compatibility version, reducing some features (i.e. lower GLSL versions), but allowing for 95% of all features to operate normally.

Note that some examples rely on features introduced in OpenGL4+, meaning that the required version of GLSL will not be available. All example programs are reduced to the minimum necessary version.

Shipping Resources

TinyEngine supports the embedded shipping of resources in executables in a native way. It does this by utilizing c-embed and desiging file-loading structures to use an <stdio.h> style interface. To ship your resources (i.e. shaders, images, .obj files) as embedded in the executable, use the c-embed style make rule as follows:

DAT = resource			#resource directory to embed (e.g. /shader/)
.PHONY: embedded
embedded: CEF = $(shell c-embed $(DAT)) c-embed.o -include /usr/local/include/c-embed.h -DCEMBED_TRANSLATE
embedded:
	$(CC) main.cpp $(CF) $(LF) -lTinyEngine $(TINYOS) $(TINYLINK) -o main ${CEF}

For a working example, read the c-embed documentation and see the TinyEngine examples. All examples have been provided with an embedded rule. Running make all results in relative path dependency, while running make embedded embeds the resource folder as a virtual filesystem while the code remains entirely unchanged.

Currently Implemented Loading Interfaces:

  • Shaders

Not-Yet Implemented Loading Interfaces:

  • Images
  • Object Files

Dependencies / Installation

Currently TinyEngine has only been tested on linux (Ubuntu 18 LTS, Fedora 33) and MacOS. It would be possible to port to windows, but I lack a dedicated windows development environment to reliably port it. I might do this in the future.

Debian-Based Systems (e.g. Ubuntu)

- OpenGL3: apt-get install libglu1-mesa-dev
- SDL2:    apt-get install libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev
- GLEW:    apt-get install libglew-dev
- Boost:   apt-get install libboost-system-dev libboost-filesystem-dev
- GLM:     apt-get install libglm-dev

- DearImGUI (already included!)
- g++ (compiler)

	Optional:

	- c-embed: https://github.com/weigert/c-embed

In a single command:

sudo apt-get install libglu1-mesa-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev libglew-dev libboost-system-dev libboost-filesystem-dev libglm-dev

Fedora / DNF Package Manager Systems

For systems with dnf as package manager, the dependencies can be installed using:

sudo dnf install make gcc-c++ glew-devel SDL2-devel SDL2_image-devel SDL2_ttf-devel SDL2_mixer-devel boost-devel glm-devel

MacOS (+Apple M1)

To install on MacOS, you need to install xcode commandline tools:

sudo xcode-select --install

Then, to install the dependencies, I recommend installing homebrew from here and installing the packages:

brew update
brew upgrade
brew install gcc
brew install glew
brew install sdl2
brew install sdl2_image
brew install sdl2_mixer
brew install sld2_ttf
brew install glm
brew install boost

Note that MacOS only supports a specific OpenGL version, giving access to GLSL versions 330 to 410 (including core profiles). This affects which examples can be run, depending on what GLSL versions they need. Be aware of this when writing your own programs. (Credit: User CodingWatching)

Note that you might get the following errors if you have binutils installed via homebrew:

ld: warning: ignoring file /usr/local/lib/libTinyEngine.a, building for macOS-arm64 but attempting to link with file built for unknown-unsupported file format ( 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A 0x2F 0x20 0x20 0x20 0x20 0x20 0x20 0x20 )
ld: symbol(s) not found for architecture arm64

ld: warning: ignoring file /usr/local/lib/libTinyEngine.a, building for macOS-arm64 but attempting to link with file built for macOS-arm64

See the following issue for more information.

Uninstall homebrew binutils to compile correctly.

brew uninstall binutils

Windows

I am currently working on an elegant windows port. Stay tuned.

License

MIT License

tinyengine's People

Contributors

blegat avatar codingwatching avatar weigert avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tinyengine's Issues

noise.h missing for heightmap example

Trying to compile 2_Heightmap yields

g++ -std=c++17 main.cpp ../../include/imgui/imgui.cpp ../../include/imgui/imgui_demo.cpp ../../include/imgui/imgui_draw.cpp ../../include/imgui/imgui_widgets.cpp ../../include/imgui/imgui_impl_opengl3.cpp ../../include/imgui/imgui_impl_sdl.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lX11 -lpthread -lSDL2 -lnoise -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGL -lGLEW -lboost_serialization -lboost_system -lboost_filesystem -o main
In file included from main.cpp:4:0:
model.h:1:10: fatal error: noise/noise.h: No such file or directory
#include "noise/noise.h"
^~~~~~~~~~~~~~~
compilation terminated.

(and as someone mentioned in another issue, -lnoise has to be removed from 5_Particles makefile)

Switch from /usr/local/ to ~/.local

A bit unusual that the project requires root priveleges. Usually projects will build relative to the source tree in cwd. An install is a seperate step to perform once any vetting / audit is complete.
The easiest way to avoid the sudo might be to switch target from /usr/local to $HOME/.local - at least on relatively modern linux.
the files to modify would be

$ grep -rl "/usr/local" *
examples/7.0_SDF/makefile
examples/13.0_Dither/makefile
examples/11.0_Voronoi/makefile
examples/19.1_LBM3D/makefile
examples/18.0_SphereVoronoi/makefile
examples/17.0_ODE3D/makefile
examples/8.0_Raymarch/makefile
examples/19.3_LBM3D/makefile
examples/4.0_Julia/makefile
examples/3.0_Automata/makefile
examples/0.0_Empty/makefile
examples/2.0_Heightmap/makefile
examples/1.0_Image/makefile
examples/.SlimeMold/makefile
examples/19.2_CollidingBalls/makefile
examples/5.0_Particles/makefile
examples/9.0_Scene/makefile
examples/10.0_Audio/makefile
examples/21.1_Delaunay_Divide/makefile
examples/12.0_Diffusion/makefile
examples/16.0_Gravity/makefile
examples/14.0_Renderpool/makefile
examples/0.1_Windowless/makefile
examples/21.0_Delaunay/makefile
examples/19.0_LBM2D/makefile
examples/20.0_Cloth/makefile
examples/15.0_Compute/makefile
examples/6.0_Tree/makefile
Makefile
python/setup_torch.py
python/setup.py
README.md

To change install target I ran:

find . -iname makefile -exec sed -i 's/\/usr\/local/\~\/.local/g' {} \;

To avoid errors caused by already-existing directories from previous run, i added "-p" to the mkdir

find . -iname makefile -exec sed -i 's/mkdir/mkdir \-p/g' {} \;

Then um, something something the linker needs to get pointed to ~/.local/lib without requiring overwriting of /etc/ld.so.cache

Not sure what the right way to do that is, sorry.
Maybe something like changing the link invocation

/TinyEngine/examples/0.0_Empty$ g++ -std=c++17 main.cpp -Wfatal-errors -O -I~/.local/include -L~/.local/lib/TinyEngine -lpthread -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGLEW -lboost_system -lboost_filesystem -lX11 -lGL -o main

Cheers. Great project here.

Keep getting segmentation error

Hey, I'm trying to use TinyEngine for a project because it looks really cool and useful, but I keep getting segmentation errors in when running the examples. Am I doing something wrong? Reading through the code it all seems like it should work.

I'm on MacOS.

For example, with the Heightmap example, I get a EXC_BAD_ACCESS (code=1, address=0x0) error due to this line:
mesh.bind<glm::vec3>("in_Position", &positions); //Bind Buffer to Property

Another example, when initiating a cube, I get pointed to the same error in the model helper. There seems to be something wrong in this line in void bind:
glBindVertexBuffer(bindings[binding], buf->index, 0, sizeof(T));

Do you know why this could be? Am I doing something wrong?

compile error on iMac with chip M1

I am sorry for this, but maybe because I just moving to a new iMac with chip M1, after setup all the commands, I still have this error:

apple@Apples-iMac TinyEngine % brew install glew
Warning: glew 2.2.0_1 is already installed and up-to-date.
To reinstall 2.2.0_1, run:
  brew reinstall glew
apple@Apples-iMac TinyEngine % sudo make all     
Password:
Copying Core Header Files ...
Done
Copying Helper Header Files ...
Done
Compiling TinyEngine ...
In file included from TinyEngine.cpp:3:
./TinyEngine.h:9:10: fatal error: 'GL/glew.h' file not found
#include <GL/glew.h>                                //Rendering Dependencies
         ^~~~~~~~~~~
1 error generated.
make: *** [install] Error 1

TinyEngine/timer missing

Hi, Tried to compile TinyEngine on Ubuntu 20.04 and got this error

$ make all -j8
Copying Core Header Files ...
Copying Helper Header Files ...
Compiling TinyEngine ...
Done
Done
In file included from TinyEngine.cpp:3:
TinyEngine.h:36:10: fatal error: TinyEngine/timer: No such file or directory
   36 | #include <TinyEngine/timer>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [makefile:48: install] Error 1

I have modified the make file to install it in my $HOME since I don't want to spew files all over my file system. I have changed LIBPATH and INCLUDEPATH and changed line 23 to

@if [ ! -d "$(INCLUDEPATH)/TinyEngine" ]; then mkdir -p $(INCLUDEPATH)/TinyEngine; fi;

and line 65 to

@if [ ! -d "$(INCLUDEPATH)/TinyEngine" ]; then mkdir -p $(INCLUDEPATH)/TinyEngine; fi;

I don't think this is relevant since this error showed up when I tried to install with sudo without modifying the make file.

Examples wont compile (except the empty example)

Hi, I wanted to test the engine so I tried to compile the examples and they won't because of the lambdas you are using, here is the image example when I try and compile it using g++ in manjaro (I'm pretty new to the Linux environment)

In file included from main.cpp:5: effects.h:9:25: error: non-local lambda expression cannot have a capture-default 9 | Handle interfaceFunc = [&](){ | ^ compilation terminated due to -Wfatal-errors.

How to build and run examples on MacOS

hi @weigert
I am trying to make this awesome Engine works on macOS. I just download all required libraries and can run build all

I modify the makefile of each example to work in macOS like bellow

TINYLINK = -lpthread -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -framework OpenGL -lGLEW -lboost_system -lboost_filesystem

(Remove -lX11 and replace -lGL with -framework OpenGL)

Then I can compile and run example 1
With example 2, I have this error:

4.1 ATI-4.5.14
Linker Error: ERROR: 0:1: '' :  version '130' is not supported
ERROR: 0:2: '' :  #version required and missing.

Linker Error: ERROR: 0:1: '' :  version '130' is not supported
ERROR: 0:2: '' :  #version required and missing.


image

If you want I can create PR after all examples run on MacOS! Thank you in advance!

Examples won't start

Hello,

Get the error

$ cd examples/9_Scene
$ make all
g++ -std=c++17 main.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lTinyEngine -lX11 -lGL -lpthread -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGLEW -lboost_system -lboost_filesystem -o main
$ ./main
Window could not be created! SDL_Error: Couldn't find matching GLX visual
Failed to launch visual interface.
Adres-eraro(nekropsio elŝutita) = "Segmentation fault" in esperanto

and

$ export SDL_VIDEO_X11_VISUALID=0x179
$ ./main
Adres-eraro(nekropsio elŝutita) = "Segmentation fault" in esperanto

for all examples on Fedora and Win11/WSL/Ubunutu Jammy. It seems something with the gui-system, I use wayland.

Greets and thanks for this program!

Errors while trying to build (Linux Manjaro)

Linux 5.6.16-1-MANJARO x86_64 20.0.3 Lysia

GCC version 10.1.0

~/.../examples/5_Particles >>> make -f makefile ±[master]
g++ -std=c++17 main.cpp ../../include/imgui/imgui.cpp ../../include/imgui/imgui_demo.cpp ../../include/imgui/imgui_draw.cpp ../../include/imgui/imgui_widgets.cpp ../../include/imgui/imgui_impl_opengl3.cpp ../../include/imgui/imgui_impl_sdl.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lX11 -lpthread -lSDL2 -lnoise -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGL -lGLEW -lboost_serialization -lboost_system -lboost_filesystem -o main
In file included from main.cpp:1:
../../TinyEngine.h:4:42: ошибка: «string» не является элементом «std»
4 | using slist = std::initializer_liststd::string;
| ^~~~~~
компиляция прервана из-за -Wfatal-errors.
make: *** [makefile:13: all] Ошибка 1

1) add #include <string> to TinyEngine.h

~/.../examples/5_Particles >>> make -f makefile ±[master]
g++ -std=c++17 main.cpp ../../include/imgui/imgui.cpp ../../include/imgui/imgui_demo.cpp ../../include/imgui/imgui_draw.cpp ../../include/imgui/imgui_widgets.cpp ../../include/imgui/imgui_impl_opengl3.cpp ../../include/imgui/imgui_impl_sdl.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lX11 -lpthread -lSDL2 -lnoise -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGL -lGLEW -lboost_serialization -lboost_system -lboost_filesystem -o main
In file included from ../../TinyEngine.h:33,
from main.cpp:1:
../../include/event.cpp:23:8: ошибка: «deque» в пространстве имен «std» не именует тип шаблона
23 | std::deque<SDL_Keycode> press;
| ^~~~~
компиляция прервана из-за -Wfatal-errors.
make: *** [makefile:13: all] Ошибка 1

2) add #include <deque> to event.cpp

~/.../examples/5_Particles >>> make -f makefile ±[●][master]
g++ -std=c++17 main.cpp ../../include/imgui/imgui.cpp ../../include/imgui/imgui_demo.cpp ../../include/imgui/imgui_draw.cpp ../../include/imgui/imgui_widgets.cpp ../../include/imgui/imgui_impl_opengl3.cpp ../../include/imgui/imgui_impl_sdl.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lX11 -lpthread -lSDL2 -lnoise -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGL -lGLEW -lboost_serialization -lboost_system -lboost_filesystem -o main
In file included from main.cpp:5:
model.h:16:39: ошибка: non-local lambda expression cannot have a capture-default
16 | std::function<void()> eventHandler = &{
| ^
компиляция прервана из-за -Wfatal-errors.
make: *** [makefile:13: all] Ошибка 1

3) after rewrite main.cpp

~/.../examples/5_Particles >>> make -f makefile ±[●][master]
g++ -std=c++17 main.cpp ../../include/imgui/imgui.cpp ../../include/imgui/imgui_demo.cpp ../../include/imgui/imgui_draw.cpp ../../include/imgui/imgui_widgets.cpp ../../include/imgui/imgui_impl_opengl3.cpp ../../include/imgui/imgui_impl_sdl.cpp -Wfatal-errors -O -I/usr/local/include -L/usr/local/lib -lX11 -lpthread -lSDL2 -lnoise -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lGL -lGLEW -lboost_serialization -lboost_system -lboost_filesystem -o main
/usr/bin/ld: невозможно найти -lnoise
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
make: *** [makefile:13: all] Ошибка 1

4) remove -lnoise from makefile

Success

iOS Support

Hi!

Could you please tell me if iOS support is planned?

Thank you!

Build on MSYS2 MINGW64

Your Makefile works out of the box. You only have to create ~/.local directory before running make.

There is an warning I think I should report back to you:

include/imgui/imgui_draw.cpp: In function 'void ImFontAtlasBuildPackCustomRects(ImFontAtlas*, void*)':
include/imgui/imgui_draw.cpp:2214:11: warning: 'void* memset(void*, int, size_t)' specified size between 18446744071562067968 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
 2214 |     memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes());
      |     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.