Cinder is a community-developed, free and open source library for professional-quality creative coding in C++.


Cinder 0.9.3dev:

Cinder Logo

Cinder is a peer-reviewed, free, open source C++ library for creative coding.

Please note that Cinder depends on a few submodules. The simplest way to clone it is:

git clone --recursive

You might also prefer one of our pre-packaged downloads.

Cinder guides and reference documentation are available on the website.

Cinder supports macOS, Windows, Linux, and iOS. It requires Xcode 11.3.1 or later for development on the Mac, and Visual C++ 2019 or later on Windows.

Cinder is released under the Modified BSD License. Please visit our website for more information.

Also be sure to check out the User Forum.

  • GlslProg/VboMesh Update

    GlslProg/VboMesh Update

    This is a somewhat large update to the inner working of GlslProg and a smaller update to the inner workings of Batch and VboMesh. Much of the public facing interface hasn't changed at all.

    The highlights in GlslProg are:

    • Clean up of caching variables. We now store Uniforms as a unified struct, same with attributes, uniform blocks, and transform feedback varyings.
    • Uniforms now have a CPU-side cache so as to not re-buffer uniform values that haven't changed.
    • We don't lazily initialize cache variables anymore. All of the above are cached during initialization so as to mitigate OpenGL get* operations.
    • Using templated type checking for uniform functions.
    • Added multiple uniform type overloads.
    • Added public facing getters for all of the new structs of info. Added public facing const pointer find methods for the new structs.

    The highlights in Batch and VboMesh are:

    • Batch - removed initVao logic to centralize Buffer/GlslProg Vao creation inside vboMesh, in buildVao function.
    • attribs that have a size greater than 4 now initialize a vao correctly. For instance, sending a mat4 up to the gpu.

    Also changed:

    • Cloth Simulation sample updated. Found a bug with AMD GPUs that wasn't allowing two TFO's, which is in progress. However, I made the sample work on all platforms including AMD until by using gl::bindBufferBase until AMD fixes the problem.
    • Changed ConstantStrings.h/.cpp to ConstantConversions.h/.cpp to include other conversions such as size of conversions.
    opened by ryanbartley 112
  • DeferredShading sample

    DeferredShading sample

    I've got this working in Xcode now (by downgrading to GLSL 410). I also got rid of the lambdas in ::draw() that were no longer necessary and replaced window setup with scoped objects.

    opened by BanTheRewind 39
  • Optional GStreamer video playback support on MSW.

    Optional GStreamer video playback support on MSW.

    This PR adds optional support for the GStreamer player under MSW 64bit through the CMake build system backend. It has only been tested on a VM running Windows 10 with Visual Studio 2015 so I m putting it here in case someone would like to give it a proper try.

    You will need to have GStreamer installed and available on the environment in order for this to work. The latest version as of now is 1.12.4. You will need gstreamer-1.0-devel-x86_64-1.12.4.msi and gstreamer-1.0-x86_64-1.12.4.msi .

    Choose the complete installation when prompt in order to get all necessary GStreamer plugins installed.

    Once the installation is complete you should add the GStreamer installation bin and lib paths to your PATH env variable. By default these should be C:\gstreamer\1.0\x86_64\bin and C:\gstreamer\1.0\x86_64\lib

    To enable it you will need to generate the VS files for Cinder with the following:

    cmake .. -G "Visual Studio 14 2015 Win64" -DCINDER_MSW_USE_GSTREAMER=1

    For testing you can build the QuickTimeBasic sample by generating VS project files through:

    cmake .. -G "Visual Studio 14 2015 Win64"

    opened by PetrosKataras 38
  • Backport docs changes to release_v0.9.0 branch

    Backport docs changes to release_v0.9.0 branch

    Rebased the various docs commits mentioned in onto the release_v0.9.0 branch so we can update the website.

    Fixes #1135 & #1245.

    Here's the git rebase -i origin/release_v0.9.0 commands I used:

    #1148 Updated git guide. Fixed outdated/broken links.

    pick f0c04ba49cfbe91a224132e4af184ca4d552dab3 Updated index docs links

    pick f1b930f432582c01846651d379251ec3de15a8c6 Merge to resolve conflicts

    #1149 Added logging guide

    pick 6d1220fdb9e5281c174557a2d5469901900eccbf Added logging guide pick 5c3eb4212a2b6147b06e52dd1a07e586cb504b6e Formatting updates based on feedback #1150 Added supplementary html for LoggerFile and LoggerFileRotating

    pick 0bab421cbc4484dbcd9d8639a3a9380a2f507701 Added supplementary html for LoggerFile and LoggerFileRotating pick 8968427740f131d445a7742a2b2b8366f4f422b4 small formatting changes. #1155 Dox next fixes

    pick 2820edbb23a60e95fceeb684a59dd73c18474928 No more overriding key events after click occurs.

    pick 1f0eeead8ef15dca7784e27ad523dfbe974588d2 Merge to resolve conflicts

    pick 71feb3ed6819c114f81c56a5fb9d3590f2aa6b1c Empty without merge resolution

    #1177 Fixed the keyboard input bug for all pages

    pick c388e3233acb567f469a0c0a922beb5cf45df369 Removed input focus on key input. #1183 Fix download links and migrate links to https

    pick a1b89a9f0517057952c4e03b3a06eb677f83a60e fix download links and migrate links to https #1155 Dox next fixes

    pick a75048b Tweaked label for link #1197 Update TinderBox link

    pick f1a0fdf65d35bff0e268ae675f703f9b38a8b3f3 Update TinderBox link #1203 Fixed code syntax within function descriptions

    pick 6be9188b1aaf88a20eb1c726d3e368b440ffdd72 Fixed code syntax within funciton descriptions. #1216 Added logging guide to main guide page.

    pick d49732f67f5fbb5b6c3f3220a6c31d0ca57af0d9 Added logging guide to main guide page. pick c4e55c8f023e7781a019c48e616f93c4363b31f4 Spaces to tabs for consistency #1233 Audio doc cleanup

    pick e8e9e50edef1b3c49dc36460032bb547de4a6996 remove stray code section in audio guide pick 9bc804418cd337a25adc231cb43d88ae643065ac fix doc for updated function name

    There were a couple small tweaks I had to make to resolve conflicts... I think it's what the battling merge commits were trying to do.

    opened by drewish 29
  • Glad OpenGL extensions loader support for MSW and Linux

    Glad OpenGL extensions loader support for MSW and Linux

    This PR will replace glLoad with the GLAD extension loader, allowing us to add OpenGL v4.6 features to Cinder. glLoad has not been updated in a while, so we're looking for an alternative.

    When the GLAD files are generated without additional extensions, Cinder users will be forced to create a RendererGl of the correct version like so: CINDER_APP( MyApp, RendererGl( RendererGl::Options().version( 4, 6 ) ) ) to use the desired features.

    To prevent confusion, however, we should add commonly used extensions when generating the GLAD files. I've added a minimal set of extensions, enough to make Cinder work out of the box. Before accepting this PR, it would be smart to discuss what extra extensions we might need.

    GLAD features a webservice that makes it extremely easy to update the source files. See glad/glad.h, which is the main header of the loader. At the top, you'll find the exact settings used to create the files. If we want to add additional extensions, use the provided information as a starting point for the webservice and generate a new header.

    An alternative to GLAD is FlextGL, which requires Python to generate the files. It would allow us to automate the process, if we're Python savvy, that is. But I'd say that GLAD's webservice is a much easier alternative which does not require us to install any additional development software.

    The Linux version has not been tested and probably needs a few fixes to work. However, I have included the required GLX files, so this should not be too hard.

    opened by paulhoux 26
  • OS X 10.10 emits warning when switching to fullscreen at startup

    OS X 10.10 emits warning when switching to fullscreen at startup

    When adding settings->setFullScreen( true ); to prepareSettings() in OS X 10.10, the following warning / stacktrace is printed (tested on master branch):

    2014-11-14 19:32:52.227 windowTest[85547:5829855] NSWindow warning: adding an unknown subview: <NSView: 0x10645c0>
    2014-11-14 19:32:52.244 windowTest[85547:5829855] Call stack:
        0   AppKit                              0x917fa776 -[NSThemeFrame addSubview:] + 108
        1   AppKit                              0x910a1d77 -[NSView replaceSubview:with:] + 152
        2   AppKit                              0x9192b4d7 __60-[NSView(NSFullScreenMode) enterFullScreenMode:withOptions:]_block_invoke + 178
        3   AppKit                              0x91191bd7 NSPerformWithScreenUpdatesDisabled + 97
        4   AppKit                              0x9192b3cd -[NSView(NSFullScreenMode) enterFullScreenMode:withOptions:] + 3147
        5   windowTest                          0x0007d00c -[CinderView setFullScreen:options:] + 1036
        6   windowTest                          0x000430e7 -[WindowImplBasicCocoa setFullScreen:options:] + 135
        7   windowTest                          0x00040d1b -[AppImplCocoaBasic applicationDidFinishLaunching:] + 1403

    Though the message is massively ugly, it does appear to still work. @andrewfb tried using the NSFullScreenModeSetting setting, which he found in Apple's OpenCL N-Body sample, but this seems to stop full screen from working altogether.

    opened by richardeakin 25
  • glNext: Cylinder weirdness

    glNext: Cylinder weirdness

    I moved the advanced deferred sample into a nifty pentagonal room using geom::Cylinder. I'm getting some weird banding from it and a weird stripe sometimes. In the screenshots, you'll see that the floor and ceiling reflect OK, but the walls do not. Check out the debug view where it's just the normals. You can see a weird strip occuring. I'm using the same shader to render everything to the G-buffer, so it's definitely something weird with just this one shape.

    frame2986 frame7091 frame7212 frame8825 frame9318 frame10073

    opened by BanTheRewind 22
  • Upgrade CMake

    Upgrade CMake

    There are a few updates I'd like to make to the cmake files, in order to make it easier for the user (and or a package management system) to control the cinder build via typical cmake configuration options. Two examples being the control of the used c++ standard for which CMAKE provides the CMAKE_CXX_STANDARD variable since cmake 3.1 or the hardcoded usage of MT (

    I think that would also be a good time to upgrade the minimal required cmake version, as 2.8 is really old and a lot of things have become easier since then.

    I wanted to ask, what an acceptable baseline would be. To give a short overview: VS2019 currently ships with 3.15, Ubuntu 18.04 with cmake 3.10, Ubuntu16.04 with 3.5. Travis uses 3.12. I have no idea about macos, but generally it is very easy to install a newer version of cmake on any system.

    Depending on whether Ubuntu 16.04 is still a common target, I'd recommend 3.5 or 3.10 (among other things, cmake 3.8 adds the cxx_std_14 / 17 target properties which are "nice to have" but not critical).

    opened by MikeGitb 19
  • Toolchain Requirements for Linux

    Toolchain Requirements for Linux

    I wanted to extend the build matrix for Linux on Travis CI, and was wondering what toolchains / to versions cinder aims to support.

    For example, the cmake files claim to require only cmake 2.8, Ubuntu 14.04 however comes with 2.8.12, so 2.8 seems overly restrictive. The Travis-CI images come with preinstalled 3.9, and the dependency script installs 3.2. The situation with the compilers is similarly unclear. Is gcc supposed to be supported at all? Which version?

    linux build system 
    opened by MikeGitb 19
  • User-defined array uniforms cannot be found

    User-defined array uniforms cannot be found

    Updating a block sample to glNext latest, I faced some uniform problems. My mat4 array uniform would not be recognized, and the data would never reach the gpu. AFAIK, the problem is that glGetActiveUniform appends '[0]' to the array uniform names, which are stored as is. Later when findUniform is called, no match is found.

    Previously, findUniform would call glGetUniformLocation directly, which would still work because locations "can be retrieved by using the name of the array, or by using the name appended by "[0]".

    I did temporarily fix this problem by storing the name without '[0]':

    inline bool ends_with( std::string const & value, std::string const & ending )
        if( ending.size() > value.size() ) return false;
        return std::equal( ending.rbegin(), ending.rend(), value.rbegin() );
    Uniform uniform;
    uniform.mName           = name;
    if( ends_with( name, "[0]" ) ) {
        uniform.mName = uniform.mName.substr( 0, uniform.mName.length() - 3 );

    I'm not sure yet what the optimal solution would be.

    Note that the new mUniforms is modified in several places:

    opened by num3ric 19
  • Emscripten support!

    Emscripten support!

    Opening last PR to finally get Emscripten working!

    Should be considered alpha state - still needs to be tested a little more since things were hand-imported for simplicity. If you'd like to help test you can of course pull this PR or my branch of Cinder. Generate and read the docs for the full details, but in short, with the exception of sample building, you can follow ChaoticBob's old instructions and from there, it's like a normal CMake based desktop project. See <repo>/samples/_emscripten for sample CMake files you can use.

    Note that audio stuff is still somewhat in flux.

    Also should note that most of the core emscripten stuff is header only - will move some stuff to implementation files at a later point.

    Any changes / fixes going forward will go to this PR

    opened by sortofsleepy 18
  • Add a cross-platform GetKeyboardModifierState() function

    Add a cross-platform GetKeyboardModifierState() function

    When trying to find out which modifier keys were pressed during a fileDrop() event, I found it was necessary to "roll my own" custom solution. (see

    It would be nice if this cross-platform functionality was exposed as a Cinder function (as @axjxwright wrote, this can be done using Cocoa: [NSEvent modifierFlags] and Windows: GetAsyncKeyState()).

    opened by totalgee 0
  • Add EqualizerNode (a FilterNode which supports multiple filters).

    Add EqualizerNode (a FilterNode which supports multiple filters).

    Hi there,

    this PR provides a new node named EqualizerNode which behaves like the FilterNode but accepts multiple filters.

    Please tell me what you think.

    opened by mincequi 0
  • A collection of updates and fixes

    A collection of updates and fixes

    This pull request implements a collection of fixes that I've implemented for my own projects. Hopefully at least some of these are useful and, if not, can be adapted to be merged into the main repository :)

    1. Undefine linux if it is defined. This fixes bugs in WSL environments
    2. Update ImGUI to the Docking latest version of the Docking branch
    3. Remove the forcing of /MT under MSVC compilation -- causes problems with other libraries and linking
    4. Set /SUMBYSTEM:WINDOWS under MSVC compilation -- Otherwise the main cinder app definition won't work as it implements WinMain (IIRC), not the default main function, causing compiler errors in MSVC

    Hopefully at least some of the changes in this are useful!

    opened by Pencilcaseman 0
  • added getters to each geom::Object based off of available setters [Take Two]

    added getters to each geom::Object based off of available setters [Take Two]

    Second attempt at resolving! I created getters for each geom::Object type based only on what setters were available.

    opened by morphogencc 1
  • Additional Geometric Primitives

    Additional Geometric Primitives

    The geom:: namespace seems to have a pretty complete listing of GPU representations of shapes, but there's very few of the corresponding classes in the ci:: namespace. There's ci::Rect<T>, ci::Sphere, and ci::AxisAlignedBox, and I'm not sure there's much else...

    For 2D Shapes it'd be great if they had a similar interface to Rect:

            void		transform( const Mat3T &matrix );
            RectT	transformed( const Mat3T &matrix ) const;
            bool	contains( const glm::tvec2<Y, glm::defaultp> &pt ) const
            bool	contains( const Vec2T &pt ) const	
            bool	intersects( const RectT &rect ) const;
            T		distance( const Vec2T &pt ) const;
            T		distanceSquared( const Vec2T &pt ) const;

    and for 3D Shapes if they followed the Sphere interface:

    	bool	intersects( const AxisAlignedBox &box ) const;
    	bool	intersects( const Ray &ray ) const;
    	int		intersect( const Ray &ray, float *intersection ) const;
    	int		intersect( const Ray &ray, float *min, float *max ) const;
    	vec3	closestPoint( const Ray &ray ) const;
    	Sphere	transformed( const mat4 &transform ) const;

    I'm imagining that these would be useful for hit-testing in various applications, where perhaps you don't want an entire physics system just to figure out if objects overlap / intersect / contain a point.

    Based off of some threads I've read here, it seems that other primitives are missing mostly because they haven't been a priority / need for anyone yet, not because anyone is against them existing -- if this is correct, then I may go ahead and build a few for a current project and add them.

    It'd be great to collate thoughts on what the consistent interface might be across multiples of these objects (and if perhaps they should inherit from a parent class that defines this interface?).

    A preliminary list of ideas:

    2D Shapes

    • ci::Circle
    • ci::RotatedRect
    • ci::Triangle

    3D Shapes

    • ci::Box
    • ci::Capsule
    • ci::Cylinder
    opened by morphogencc 0
Deep Scalable Sparse Tensor Network Engine (DSSTNE) is an Amazon developed library for building Deep Learning (DL) machine learning (ML) models

Amazon DSSTNE: Deep Scalable Sparse Tensor Network Engine DSSTNE (pronounced "Destiny") is an open source software library for training and deploying

Amazon Archives 4.4k Sep 6, 2022
Rune is a programming language developed to test ideas for improving security and efficiency.

ᚣ The Rune Programming Language Safer code for secure enclaves This is not an officially supported Google product. NOTE: Rune is an unfinished languag

Google 8 Jul 1, 2022
A program developed using MPI for distributed computation of Histogram for large data and their performance anaysis on multi-core systems

mpi-histo A program developed using MPI for distributed computation of Histogram for large data and their performance anaysis on multi-core systems. T

Raj Shrestha 2 Dec 21, 2021
Compress life's valuable information using Huffman Coding algorithm!

Super Duper Compressor Compress and decompress files lossless using this amazing tool! No more spending your hard earned money to buy a brand new IBM

Matthew Ng 4 Mar 27, 2022
Frog is an integration of memory-based natural language processing (NLP) modules developed for Dutch. All NLP modules are based on Timbl, the Tilburg memory-based learning software package.

Frog - A Tagger-Lemmatizer-Morphological-Analyzer-Dependency-Parser for Dutch Copyright 2006-2020 Ko van der Sloot, Maarten van Gompel, Antal van den

Language Machines 70 Aug 24, 2022
An open source machine learning library for performing regression tasks using RVM technique.

Introduction neonrvm is an open source machine learning library for performing regression tasks using RVM technique. It is written in C programming la

Siavash Eliasi 33 May 31, 2022
An open source python library for automated feature engineering

"One of the holy grails of machine learning is to automate more and more of the feature engineering process." ― Pedro Domingos, A Few Useful Things to

alteryx 6.3k Sep 22, 2022
Open Source Computer Vision Library

OpenCV: Open Source Computer Vision Library Resources Homepage: Courses: Docs:

OpenCV 63.8k Sep 18, 2022
An open-source, low-code machine learning library in Python

An open-source, low-code machine learning library in Python ?? Version 2.3.6 out now! Check out the release notes here. Official • Docs • Install • Tu

PyCaret 6.2k Sep 14, 2022
Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for real-time gesture recognition.

Gesture Recognition Toolkit (GRT) The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for re

Nicholas Gillian 786 Sep 13, 2022
OpenSpeaker is a completely independent and open source speaker recognition project.

OpenSpeaker is a completely independent and open source speaker recognition project. It provides the entire process of speaker recognition including multi-platform deployment and model optimization.

ZY 33 Sep 15, 2022
Insight Toolkit (ITK) is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration

ITK: The Insight Toolkit C++ Python Linux macOS Windows Linux (Code coverage) Links Homepage Download Discussion Software Guide Help Examples Issue tr

Insight Software Consortium 1.1k Sep 19, 2022
An open source iOS framework for GPU-based image and video processing

GPUImage Brad Larson @bradlarson [email protected] Overview The GPUImage framework is a BSD-licensed iO

Brad Larson 20k Sep 23, 2022
An Open Source Machine Learning Framework for Everyone

Documentation TensorFlow is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries, a

null 167.7k Sep 15, 2022
Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit

CNTK Chat Windows build status Linux build status The Microsoft Cognitive Toolkit ( is a unified deep learning toolkit that describes

Microsoft 17.2k Sep 20, 2022
🐸 Coqui STT is an open source Speech-to-Text toolkit which can run in real time on devices ranging from a Raspberry Pi 4 to high power GPU servers

Coqui STT ( ?? STT) is an open-source deep-learning toolkit for training and deploying speech-to-text models. ?? STT is battle tested in both producti 1.5k Sep 24, 2022
Open source modules to interface Metavision Intelligence Suite with event-based vision hardware equipment

Metavision: installation from source This page describes how to compile and install the OpenEB codebase. For more information, refer to our online doc

PROPHESEE 84 Sep 20, 2022
Open-source vector similarity search for Postgres

Open-source vector similarity search for Postgres

Andrew Kane 583 Sep 14, 2022
OpenEmbedding is an open source framework for Tensorflow distributed training acceleration.

OpenEmbedding English version | 中文版 About OpenEmbedding is an open-source framework for TensorFlow distributed training acceleration. Nowadays, many m

4Paradigm 19 Jul 25, 2022