Reference Implementations of P0267, the proposed 2D graphics API for ISO C++

Overview

P0267 Reference Implementation

Please read the LICENSE before cloning or forking the code as there is important information there!

Please see the wiki for links to forks which provide alternate implementations!

Update as of 2017-03-27: Lastly, this is the repository for the reference implementation of P0267. There is also a P0267 repository. If you have questions, concerns, or other issues with the P0267 API or the P0267 document itself, please file an issue on the P0267 repository. In the past, this has been the catch-all place for issues, but from now on I'd like to limit issues here to those concerning this reference implementation.

Overview

This is a reference implementations of P0267: A Proposal to Add 2D Rendering and Display to C++. That link will always take you to the most current revision of the paper. You can also go to WG21 Papers and find the most recent version yourself in case you don't like short links like that.

Requirements

For Windows platforms, it currently requires Visual Studio 2017 (the free Community edition should suffice) and Windows 7 or newer. It also requires vcpkg for installing dependencies - this is described more fully here: Dependency installation instructions.txt.

For GNU/Linux platforms, it currently requires a non-ancient version of GNU autotools, cairo (>= 1.12.16), GraphicsMagick (autotools will tell you about any missing dependencies), and either GCC 7+ or Clang 5.0+.

For OS X, I have tested it on High Sierra using X11 and MacPorts (with the relevant dependencies).

Namespace

The implementation lives in the std::experimental namespace. As per 15.5.4.2.1 of the C++ standard: "Unless otherwise specified, the behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a namespace within namespace std." Proceed at your own risk!

Feedback

If you have found a bug in the reference implementation or have a suggestion for improving P0267 please read the following. Note that any contributions must comply with the ISO patent and copyright policy, an overview of which is available in the ISO document Participating in International Standardization.

The master branch is intended to reflect the most recent revision of P0267 but is not guaranteed to be current or fully implemented (especially around the time that a new revision of P0267 has been published).

Licenses and Contributions (Important!)

LICENSE CHANGE: As of 2017-01-12 01:00.00 UTC, this software is licensed under the terms of the Boost Software License - Version 1.0. This does not affect any fork, clone, or download of this software, collectively a "Copy", made prior to the above-specified date and time provided that such Copy is not updated to include any changes made at or after the above-specified date and time. Any such update shall be deemed an acceptance of a license of this software solely under the terms of the Boost Software License - Version 1.0.

Any code that you offer as a pull request must be your own work. If your employer or institution has a moonlighting policy, the act of offering a pull request shall be considered a declaration that you complied with the terms of that policy and are free to make the contribution or that your employer or institution has expressly waived any IP rights it or they might have had in your contribution thus freeing you to make the contribution.

If your contribution makes use of third party libraries it must comply with the licensing terms of those libraries. If the library is licensed under multiple licenses you must indicate which license your contribution is using ("whichever" is not acceptable). The terms of those licenses must be compatible with the terms of the licenses of any existing code. Code licensed under any version of the GPL will not be considered. (Note: LGPL code will be considered, though licenses that give more freedom to other developers are preferred.)

Any contribution shall be deemed to be made pursuant to the terms of the Boost Software License - Version 1.0, without regard to any attempt, whether by statement, inclusion of a license file, inclusion of license terms within any file, or any other method, to impose any other license.

If you fail to comply with the terms of any employer or institutional policies, the terms of any licenses, or if you infringe upon any patents, violate any trade secrets, violate any laws or regulations, or, by any act or omission, cause any legal action to be brought against the authors of P0267, its previous versions, the ISO C++ committee (ISO/IEC JTC1/SC22/WG21) or any of its members individually, or any participants in the ISO C++ standardization process, you agree to pay all legal expenses of said persons and/or entities and to indemnify every one of them in full in the event that any legally binding judgment is rendered against them.

Intellectual property rights are important. You may not agree with every IP law and regulation out there (I certainly have some suggestions for reforming them), but we cannot ignore them and hope nobody notices. Many of us do things like develop software, do technical writing, or work for companies where that is a big part of what pays the bills. In other words, many people's livelihoods (including most, if not all, of ours) depend on laws governing intellectual property. So I apologize for all the scary language above. But until I go a decade without seeing statements like "I haven't decided on a license yet but here's some code I wrote", I'll continue to write scary statements in hopes of scaring people into taking intellectual property and the terms of the licenses under which such property is offered more seriously. And also because I really do mean them. I don't want to be facing $50,000+ in lawyers bills plus some large monetary judgment because someone passed off somebody else's code as their own or didn't follow their employer's policies or whatever. I don't expect that anyone else would want to be facing a situation such as that either.

I encourage anyone with intellectual property disputes to try to work them out reasonably first. Regardless, if you have any legal questions or concerns, including but not limited to intellectual property matters, you should contact a knowledgeable attorney.

Comments
  • Library rather than executable

    Library rather than executable

    I have locally converted the RefImpl to a static library and the Asteroids game to an executable. It's quite trivial, being only a setting in the vcxproj file; is that all we need? Or do we want to add dynamic linking with this change?

    code-enhancement open 
    opened by hatcat 8
  • Graphics backend implementations need to be isolated

    Graphics backend implementations need to be isolated

    I've looked at the proposal and from what I can tell from both the proposal and this reference implementation, either the entire graphics subsystem has to be reimplemented for every graphics renderer or graphics backed implementations would be integrated into the STL/libstdc++/libc++.

    Instead of being integrated or have entire subsystems reimplemented several times, the specification should isolate the rendering in some manner. I suggest making an interface class for graphics backends to implement. This would minimize the amount of duplicated code (and accidental bugs) while maximizing the number of possible graphics backend implementations (unlimited).

    If this is already the case, please update the spec and reference implementation and tell me so I can stop stressing out about this.

    opened by GravisZro 8
  • narrow io2d library targets to ONE

    narrow io2d library targets to ONE

    TODO: narrow the amount of non-sample, non-test, "io2d" targets in the reference implementation down to one.

    Right now, there are several library targets, such as:

    • io2d_core
    • io2d_cairo
    • io2d_cairo_xlib
    • io2d_cairo_win32
    • ... and so on ...

    Is this necessary? It seems a bit confusing to me.

    opened by DavidLudwig 6
  • Resizing Win32 window causes flickering of the rendered image.

    Resizing Win32 window causes flickering of the rendered image.

    Resizing appears to work properly in the rendered win32 window. However, it would be nice if we can eliminate the flickering when resizing the window.

    bug code-enhancement resolved 
    opened by JasonZink 5
  • Use float instead of doubles

    Use float instead of doubles

    Since this is supposed to be the "standard way" of doing 2d graphics in C++, I think we need it to be as fast as it can. From what I saw from the implementation, vector_2d and rectangle use double for members. C++ also offers a float type with smaller precision, but which is proven to be faster. I personally have been using float for my Vector2d class and I have seen no problems, so I think the implementation would gain some performance by using floats.

    opened by TerensTare 4
  • `std` namespace ensures UB

    `std` namespace ensures UB

    I'm suspect this library cannot be used in a correct, ISO C++-confirming program. http://eel.is/c++draft/namespace.std#1 It shouldn't be necessary to use std to illustrate P0267. You might get away with wrapping std in another namespace but I'm not certain.

    opened by johnmcfarlane 4
  • [Win32] image loading tests fail

    [Win32] image loading tests fail

    On Win32, as of commit a805fc8dfbbab29de171a45899b74e3af4889089, and using build instructions listed in BUILDING.md, image-loading tests fail.

    Log output to follow.

    Steps to reproduce:

    1. build io2d on Win32, according to instructions in BUILDING.md
    2. build all targets
    3. run the built copy of tests.exe

    Expected Result: all tests pass

    Observed Results: image-loading tests fail

    Log Output (from tests.exe):

    
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    tests.exe is a Catch v2.1.2 host application.
    Run with -? for options
    
    -------------------------------------------------------------------------------
    IO2D properly decodes PNG images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(9)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(9): FAILED:
    due to unexpected exception with message:
      operation canceled
    
    -------------------------------------------------------------------------------
    IO2D properly encodes PNG images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(20)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(20): FAILED:
    due to unexpected exception with message:
      no protocol option
    
    -------------------------------------------------------------------------------
    IO2D properly decodes JPG images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(31)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(31): FAILED:
    due to unexpected exception with message:
      no protocol option
    
    -------------------------------------------------------------------------------
    IO2D properly encodes JPG images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(42)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(42): FAILED:
    due to unexpected exception with message:
      no protocol option
    
    -------------------------------------------------------------------------------
    IO2D properly decodes TIFF images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(54)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(54): FAILED:
    due to unexpected exception with message:
      no protocol option
    
    -------------------------------------------------------------------------------
    IO2D properly encodes TIFF images
    -------------------------------------------------------------------------------
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(65)
    ...............................................................................
    
    c:\users\davidl\documents\code\p0267_refimpl\p0267_refimpl\tests\image_io.cpp(65): FAILED:
    due to unexpected exception with message:
      no protocol option
    
    ===============================================================================
    test cases:    81 |    75 passed | 4 failed | 2 failed as expected
    assertions: 56552 | 56546 passed | 4 failed | 2 failed as expected
    
    
    C:\Users\davidl\Documents\Code\P0267_RefImpl\Debug\P0267_RefImpl\Tests\Debug\tests.exe (process 4588) exited with code 4.
    To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
    Press any key to close this window . . .
    
    opened by DavidLudwig 4
  • Ensure R6 compliance.

    Ensure R6 compliance.

    ...and while doing this:

    1. Spruce up the header to reflect the synopsis
    2. Make the implementation amenable to simultaneous development
    3. Expose cairo-specific implementation
    opened by hatcat 4
  • Provide a few simple Win32 wrappers to simplify the windowing portions of the demo.

    Provide a few simple Win32 wrappers to simplify the windowing portions of the demo.

    To eliminate the need for individual global variables, it would be nice to provide a few simple wrappers for the Win32 interactions. The main motivation for this is to minimize the 'noise' of the Win32 code, and provide more emphasis on the way the drawing code works.

    code-enhancement 
    opened by JasonZink 4
  • MSVC: don't split dependency-libraries into separate DEBUG and RELEASE .lib files

    MSVC: don't split dependency-libraries into separate DEBUG and RELEASE .lib files

    This helps fix CMake configuration problems, when invoked via vcpkg. Specifically, vcpkg's cmake configuration phase would report errors about missing CMake variables: CAIRO_LIB_DEBUG, PNG_LIB_DEBUG, and ZLIB_LIB_DEBUG

    This pushes the burden of determining the names of certain dependency libraries, outside of io2d.

    To consider:

    1. vcpkg has some ability to create and track separate 'debug' and 'release' copies of libraries. Might it be worth it to make sure a user (who'd be developing with io2d, and perhaps on io2d itself), if and when linking to a debug copy of io2d, is also linking to debug copies of dependency libraries?
    2. the layout of header files, currently, spams a user's 'include' folder with lots of header files. Perhaps these should all be inside a separate, 'io2d' directory? Perhaps <io2d/io2d.h> should, also, be the main header file?
    opened by DavidLudwig 3
  • Added support for find_package.

    Added support for find_package.

    I have updated the build scripts to allow painless consumption of this library via find_package. CMake doesn't allow to specify parent directory as include directory when exporting targets and backend targets used it so I had to refactor a lot.

    Here are the new targets:

    • io2d_core - backendless files. Users should not link to it directly.
    • io2d_cairo - a Cairo meta-backend. Depends on io2d_core Contains Cairo files. Users shouldn't link to it.
    • io2d_coregraphics - a CoreGraphics meta-backend. Depends on io2d_core Contains CoreGraphics files. Users shouldn't link to it.
    • io2d_cairo_win32 - a Cairo/Win32 backend. Depends on io2d_cairo. Contains Win32 files. Users can link to it.
    • io2d_cairo_xlib - a Cairo/Xlib backend. Depends on io2d_cairo. Contains Xlib files. Users can link to it.
    • io2d_coregraphics_mac - a CoreGraphics/Mac backend. Depends on io2d_coregraphics. Contains MacOS files. Users can link to it.
    • io2d_coregraphics_ios - a CoreGraphics/iOS backend. Depends on io2d_coregraphics. Contains iOS files. Users can link to it.
    • io2d - an interface library that depends on all built backends. Used for backend abstraction. Most users should only link to it.

    Here's how dependency graph looks on GNU/Linux when linking to io2d:

    • io2d brings io2d_cairo_xlib.
    • io2d_cairo_xlib brings io2d_cairo.
    • io2d_cairo brings io2d_core.

    I have added CONSUMING.md with example code for the users.

    Finally, I removed C++17 as a global standard since I and other people may want to consume this library in C++2a code. Instead, all tragets set cxx_std_17 as compile feature. This bumped minimum CMake version to 3.8 but I think this is reasonable for this library.

    I only have access to GNU/Linux PCs so I could only test Cairo/Xlib backend. Others need to be tested. EDIT: Oh, right, there is CI, good.

    Fixes #81.

    opened by ghost 3
  • problem installing Io2D

    problem installing Io2D

    I am trying to install the Io2D library as instructed in the link: https://github.com/cpp-io2d/P0267_RefImpl/blob/master/BUILDING.md However, every time I try to install the Cairo library I encounter this issue:

    CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:96 (message):
        Command failed: "C:/Program Files/src/vcpkg/downloads/tools/msys2/7e05e7aa09f1709f/usr/bin/bash.exe" --noprofile --norc --debug -c "V=1 CPP='compile cl.exe -E' CC='compile cl.exe' CC_FOR_BUILD='compile cl.exe' CXX='compile cl.exe' RC='windres-rc rc.exe' WINDRES='windres-rc rc.exe' AR='ar-lib lib.exe' LD='link.exe -verbose' RANLIB=':' STRIP=':' NM='dumpbin.exe -symbols -headers' DLLTOOL='link.exe -verbose -dll' CCAS=':' AS=':' ./../src/1.17-e2a53830aa.clean/configure --build=i686-pc-mingw32 \"--enable-extra-encodings\" \"--without-libiconv-prefix\" \"--without-libintl-prefix\" \"--enable-relocatable\" \"ac_cv_prog_ac_ct_STRIP=:\" \"gl_cv_double_slash_root=yes\" \"ac_cv_func_memmove=yes\" \"--disable-silent-rules\" \"--verbose\" \"--enable-shared\" \"--disable-static\" \"--prefix=/C/Program Files/src/vcpkg/installed/x86-windows/debug\" \"--bindir=\\${prefix}/../tools/libiconv/debug/bin\" \"--sbindir=\\${prefix}/../tools/libiconv/debug/sbin\" \"--libdir=\\${prefix}/lib\" \"--includedir=\\${prefix}/../include\" \"--datarootdir=\\${prefix}/share/libiconv\""
        Working Directory: C:/Program Files/src/vcpkg/buildtrees/libiconv/x86-windows-dbg
        Error code: This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher
        See logs for more information:
    
    Call Stack (most recent call first):
      scripts/cmake/vcpkg_configure_make.cmake:707 (vcpkg_execute_required_process)
      ports/libiconv/portfile.cmake:29 (vcpkg_configure_make)
      scripts/ports.cmake:146 (include)
    
    
    error: building libiconv:x86-windows failed with: BUILD_FAILED
    Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
    Then check for known issues at:
        https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+libiconv
    You can submit a new issue at:
        https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[libiconv]+Build+error
    Include '[libiconv] Build error' in your bug report title, the following version information in your bug description, and attach any relevant failure logs from above.
        vcpkg-tool version: 2022-06-17-9268e366206712e38102b28dbd1617697a99ff2e
        vcpkg-scripts version: 98f8d00e8 2022-07-08 (3 days ago)
    
    You can also use the prefilled template from C:\Program Files\src\vcpkg\installed\vcpkg\issue_body.md.
    
    opened by Mohamed-Sharif 0
  • error of CMake execution

    error of CMake execution

    I have installed cairo(x64-windows) and graphicsmagick(x64-windows) successful. And I run the CMake execution commands in cmd mode successful: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" git clone --recurse-submodules https://github.com/cpp-io2d/P0267_RefImpl cd P0267_RefImpl mkdir Debug cd Debug But when I run the command: D:\vcpkg\P0267_RefImpl\Debug>cmake -G "Visual Studio 15 2017 Win64" --config Debug "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_TOOLCHAIN_FILE=d:/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" ../. It's error, it outputs: CMake Warning: Ignoring extra path from command line: "D:/vcpkg/P0267_RefImpl/Debug/Debug" CMake Error: Unknown argument --config CMake Error: Run 'cmake --help' for all supported options.

    How should I modify it?

    opened by cxmGitHub 1
  • Are these lines have typo errors for X,Y?

    Are these lines have typo errors for X,Y?

    xgraphicsmathfloat_impl.h:

    in point_for_angle(float ang, float mgn): result._X = _Round_floating_point_to_zero(result._Y); result._Y = _Round_floating_point_to_zero(result._Y); in point_for_angle(float ang, const point_2d_data_type& rad): result._X = _Round_floating_point_to_zero(result._X); result._X = _Round_floating_point_to_zero(result._Y);

    opened by hakkidogusan 0
  • Fail to build in arch linux: size of array ‘altStackMem’ is not an integral constant-expression

    Fail to build in arch linux: size of array ‘altStackMem’ is not an integral constant-expression

    $ cmake --build .
    ...
    [ 65%] Building CXX object P0267_RefImpl/Tests/CMakeFiles/tests.dir/main.cpp.o
    In file included from /usr/include/signal.h:328,
                     from /home/augusto/Documents/cpp/P0267_RefImpl/P0267_RefImpl/Tests/Catch2/single_include/catch.hpp:4716,
                     from /home/augusto/Documents/cpp/P0267_RefImpl/P0267_RefImpl/Tests/main.cpp:15:
    /home/augusto/Documents/cpp/P0267_RefImpl/P0267_RefImpl/Tests/Catch2/single_include/catch.hpp:7320:45: error: size of array ‘altStackMem’ is not an integral constant-expression
     7320 |     char FatalConditionHandler::altStackMem[SIGSTKSZ] = {};
          |                                             ^~~~~~~~
    make[2]: *** [P0267_RefImpl/Tests/CMakeFiles/tests.dir/build.make:76: P0267_RefImpl/Tests/CMakeFiles/tests.dir/main.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:559: P0267_RefImpl/Tests/CMakeFiles/tests.dir/all] Error 2
    make: *** [Makefile:146: all] Error 2
    

    gcc (GCC) 11.2.0 cmake version 3.22.3 GNU Make 4.3

    opened by augusto-mantilla 3
  • Windows 11, Visual Studio 2022 CE, NOTFOUND CHARSET_LIB , EXPAT_LIB, ICONV_LIB

    Windows 11, Visual Studio 2022 CE, NOTFOUND CHARSET_LIB , EXPAT_LIB, ICONV_LIB

    The build steps do not seem to work on Windows 11 with Visual Studio 2022. I installed and integrated vcpkg and installed all dependencies (win32 and win64) but I get the following errors:

    C:\Users\fjp\git\P0267_RefImpl\Debug>cmake -G "Visual Studio 17 2022" --config Debug "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" ../.
    CMake Error: Unknown argument --config
    CMake Error: Run 'cmake --help' for all supported options.
    

    Trying without --config Debug:

    C:\Users\fjp\git\P0267_RefImpl\Debug>cmake -G "Visual Studio 17 2022" "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" ../.
    Default IO2D backend was not specified, choosing automatically...
    Found Windows, using CAIRO_WIN32.
    -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
    -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
    Skipping the Maps example since Boost was not found
    Skipping the SVG example since Boost was not found
    -- Configuring done
    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
    Please set them or make sure they are set and tested correctly in the CMake files:
    CHARSET_LIB
        linked by target "io2d_cairo_win32" in directory C:/Users/fjp/git/P0267_RefImpl/P0267_RefImpl/P0267_RefImpl/cairo/win32
    EXPAT_LIB
        linked by target "io2d_cairo_win32" in directory C:/Users/fjp/git/P0267_RefImpl/P0267_RefImpl/P0267_RefImpl/cairo/win32
    ICONV_LIB
        linked by target "io2d_cairo_win32" in directory C:/Users/fjp/git/P0267_RefImpl/P0267_RefImpl/P0267_RefImpl/cairo/win32
    
    -- Generating done
    CMake Warning:
      Manually-specified variables were not used by the project:
    
        CMAKE_TOOLCHAIN_FILE
    
    
    CMake Generate step failed.  Build files cannot be regenerated correctly.
    
    vckpg list output
    PS C:\dev\vcpkg> .\vcpkg.exe list
    brotli:x64-windows                                 1.0.9#2          a generic-purpose lossless compression algorithm...
    brotli:x86-windows                                 1.0.9#2          a generic-purpose lossless compression algorithm...
    bzip2:x64-windows                                  1.0.8#2          bzip2 is a freely available, patent free, high-q...
    bzip2:x86-windows                                  1.0.8#2          bzip2 is a freely available, patent free, high-q...
    cairo:x64-windows                                  1.17.4#3         Cairo is a 2D graphics library with support for ...
    cairo:x86-windows                                  1.17.4#3         Cairo is a 2D graphics library with support for ...
    cairo[fontconfig]:x64-windows                                       build with fontconfig
    cairo[fontconfig]:x86-windows                                       build with fontconfig
    cairo[freetype]:x64-windows                                         use the freetype font backend
    cairo[freetype]:x86-windows                                         use the freetype font backend
    dirent:x64-windows                                 1.23.2#1         Dirent is a C/C++ programming interface that all...
    dirent:x86-windows                                 1.23.2#1         Dirent is a C/C++ programming interface that all...
    expat:x64-windows                                  2.4.1            XML parser library written in C
    expat:x86-windows                                  2.4.1            XML parser library written in C
    fontconfig:x64-windows                             2.13.94#5        Library for configuring and customizing font acc...
    fontconfig:x86-windows                             2.13.94#5        Library for configuring and customizing font acc...
    freetype:x64-windows                               2.11.1           A library to render fonts.
    freetype:x86-windows                               2.11.1           A library to render fonts.
    freetype[brotli]:x64-windows                                        Support decompression of WOFF2 streams
    freetype[brotli]:x86-windows                                        Support decompression of WOFF2 streams
    freetype[bzip2]:x64-windows                                         Support bzip2 compressed fonts.
    freetype[bzip2]:x86-windows                                         Support bzip2 compressed fonts.
    freetype[png]:x64-windows                                           Support PNG compressed OpenType embedded bitmaps.
    freetype[png]:x86-windows                                           Support PNG compressed OpenType embedded bitmaps.
    freetype[zlib]:x64-windows                                          Use zlib instead of internal library for DEFLATE
    freetype[zlib]:x86-windows                                          Use zlib instead of internal library for DEFLATE
    gettext:x64-windows                                0.21#9           GNU gettext provides libintl and a set of tools ...
    gettext:x86-windows                                0.21#9           GNU gettext provides libintl and a set of tools ...
    graphicsmagick:x64-windows                         1.3.37#1         Image processing library
    graphicsmagick:x86-windows                         1.3.37#1         Image processing library
    io2d:x86-windows                                   2020-09-14#3     a lightweight, cross platform drawing library
    json-c:x64-windows                                 2019-09-10#2     A JSON implementation in C
    json-c:x86-windows                                 2019-09-10#2     A JSON implementation in C
    libiconv:x64-windows                               1.16#11          GNU Unicode text conversion
    libiconv:x86-windows                               1.16#11          GNU Unicode text conversion
    libjpeg-turbo:x64-windows                          2.1.2            libjpeg-turbo is a JPEG image codec that uses SI...
    libjpeg-turbo:x86-windows                          2.1.2            libjpeg-turbo is a JPEG image codec that uses SI...
    liblzma:x64-windows                                5.2.5#4          Compression library with an API similar to that ...
    liblzma:x86-windows                                5.2.5#4          Compression library with an API similar to that ...
    libpng:x64-windows                                 1.6.37#16        libpng is a library implementing an interface fo...
    libpng:x86-windows                                 1.6.37#16        libpng is a library implementing an interface fo...
    libwebp:x64-windows                                1.2.1            WebP codec: library to encode and decode images ...
    libwebp:x86-windows                                1.2.1            WebP codec: library to encode and decode images ...
    libwebp[nearlossless]:x64-windows                                   Enable near-lossless encoding
    libwebp[nearlossless]:x86-windows                                   Enable near-lossless encoding
    libwebp[simd]:x64-windows                                           Enable any SIMD optimization.
    libwebp[simd]:x86-windows                                           Enable any SIMD optimization.
    libwebp[unicode]:x64-windows                                        Build Unicode executables. (Adds definition UNIC...
    libwebp[unicode]:x86-windows                                        Build Unicode executables. (Adds definition UNIC...
    lzo:x64-windows                                    2.10#7           Lossless data compression library
    lzo:x86-windows                                    2.10#7           Lossless data compression library
    pixman:x64-windows                                 0.40.0#2         Pixman is a low-level software library for pixel...
    pixman:x86-windows                                 0.40.0#2         Pixman is a low-level software library for pixel...
    pthread:x64-windows                                3.0.0#1          empty package, linking to other port
    pthread:x86-windows                                3.0.0#1          empty package, linking to other port
    pthreads:x64-windows                               3.0.0#10         pthreads for windows
    pthreads:x86-windows                               3.0.0#10         pthreads for windows
    tiff:x64-windows                                   4.3.0#5          A library that supports the manipulation of TIFF...
    tiff:x86-windows                                   4.3.0#5          A library that supports the manipulation of TIFF...
    tiff[jpeg]:x64-windows                                              Support JPEG compression in TIFF image files
    tiff[jpeg]:x86-windows                                              Support JPEG compression in TIFF image files
    tiff[lzma]:x64-windows                                              Support LZMA compression in TIFF image files
    tiff[lzma]:x86-windows                                              Support LZMA compression in TIFF image files
    tiff[zip]:x64-windows                                               Support ZIP/deflate compression in TIFF image files
    tiff[zip]:x86-windows                                               Support ZIP/deflate compression in TIFF image files
    vcpkg-cmake-config:x64-windows                     2022-01-30
    vcpkg-cmake:x64-windows                            2022-01-19
    vcpkg-tool-meson:x64-windows                       0.60.2#1         Meson build system
    zlib:x64-windows                                   1.2.11#13        A compression library
    zlib:x86-windows                                   1.2.11#13        A compression library
    

    Any ideas what I am missing?

    opened by fjp 1
  • [Ubuntu] Build [65%] : error: size of array ‘altStackMem’ is not an integral constant-expression

    [Ubuntu] Build [65%] : error: size of array ‘altStackMem’ is not an integral constant-expression

    System Details:

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 21.10
    Release:	21.10
    Codename:	impish
    
    $ uname -a
    Linux mBox 5.13.0-22-generic #22-Ubuntu SMP Fri Nov 5 13:21:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    
    1. GCC Version - gcc (Ubuntu 11.2.0-7ubuntu2) 11.2.0
    2. Cmake Version - cmake version 3.18.4

    Steps to reproduce the error

    Refresh apt: sudo apt update Install GCC: sudo apt install build-essential Install CMake: sudo apt install cmake Install Cairo: sudo apt install libcairo2-dev Install graphicsmagick: sudo apt install libgraphicsmagick1-dev Install libpng: sudo apt install libpng-dev Example of CMake execution:

    git clone --recurse-submodules https://github.com/cpp-io2d/P0267_RefImpl
    cd P0267_RefImpl
    mkdir Debug
    cd Debug
    cmake --config Debug "-DCMAKE_BUILD_TYPE=Debug" ..
    cmake --build .
    

    Detailed Output

    $ cmake --build .

    Scanning dependencies of target io2d_core [ 2%] Building CXX object P0267_RefImpl/P0267_RefImpl/CMakeFiles/io2d_core.dir/rgba_color.cpp.o [ 4%] Building CXX object P0267_RefImpl/P0267_RefImpl/CMakeFiles/io2d_core.dir/xinterchangebuffer.cpp.o [ 6%] Linking CXX static library libio2d_core.a [ 6%] Built target io2d_core Scanning dependencies of target io2d_cairo [ 9%] Building CXX object P0267_RefImpl/P0267_RefImpl/cairo/CMakeFiles/io2d_cairo.dir/cairo_renderer-graphicsmagickinit.cpp.o [ 11%] Linking CXX static library libio2d_cairo.a [ 11%] Built target io2d_cairo Scanning dependencies of target io2d_cairo_xlib [ 13%] Building CXX object P0267_RefImpl/P0267_RefImpl/cairo/xlib/CMakeFiles/io2d_cairo_xlib.dir/cairo_renderer_xlib.cpp.o [ 16%] Linking CXX static library libio2d_cairo_xlib.a [ 16%] Built target io2d_cairo_xlib Scanning dependencies of target color_fill [ 18%] Building CXX object P0267_RefImpl/Samples/color_fill/CMakeFiles/color_fill.dir/main.cpp.o [ 20%] Linking CXX executable color_fill [ 20%] Built target color_fill Scanning dependencies of target cpu_load [ 23%] Building CXX object P0267_RefImpl/Samples/cpu_load/CMakeFiles/cpu_load.dir/main.cpp.o [ 25%] Building CXX object P0267_RefImpl/Samples/cpu_load/CMakeFiles/cpu_load.dir/data_source.cpp.o [ 27%] Building CXX object P0267_RefImpl/Samples/cpu_load/CMakeFiles/cpu_load.dir/profiler_linux.cpp.o [ 30%] Linking CXX executable cpu_load [ 30%] Built target cpu_load Scanning dependencies of target draw_cpp [ 32%] Building CXX object P0267_RefImpl/Samples/draw_cpp/CMakeFiles/draw_cpp.dir/main.cpp.o [ 34%] Linking CXX executable draw_cpp [ 34%] Built target draw_cpp Scanning dependencies of target life [ 37%] Building CXX object P0267_RefImpl/Samples/life/CMakeFiles/life.dir/main.cpp.o [ 39%] Linking CXX executable life [ 39%] Built target life Scanning dependencies of target rocks_in_space [ 41%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Asteroid.cpp.o [ 44%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Game.cpp.o [ 46%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Input.cpp.o [ 48%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Maths.cpp.o [ 51%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Physics.cpp.o [ 53%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/Ship.cpp.o [ 55%] Building CXX object P0267_RefImpl/Samples/rocks_in_space/CMakeFiles/rocks_in_space.dir/LinuxMain.cpp.o [ 58%] Linking CXX executable rocks_in_space [ 58%] Built target rocks_in_space Scanning dependencies of target sprites [ 60%] Building CXX object P0267_RefImpl/Samples/sprites/CMakeFiles/sprites.dir/main.cpp.o [ 62%] Linking CXX executable sprites [ 62%] Built target sprites Scanning dependencies of target tests [ 65%] Building CXX object P0267_RefImpl/Tests/CMakeFiles/tests.dir/main.cpp.o In file included from /usr/include/signal.h:328, from /home/raxit/P0267_RefImpl/P0267_RefImpl/Tests/Catch2/single_include/catch.hpp:4716, from /home/raxit/P0267_RefImpl/P0267_RefImpl/Tests/main.cpp:15: /home/raxit/P0267_RefImpl/P0267_RefImpl/Tests/Catch2/single_include/catch.hpp:7320:45: error: size of array ‘altStackMem’ is not an integral constant-expression 7320 | char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; | ^~~~~~~~ gmake[2]: *** [P0267_RefImpl/Tests/CMakeFiles/tests.dir/build.make:82: P0267_RefImpl/Tests/CMakeFiles/tests.dir/main.cpp.o] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:619: P0267_RefImpl/Tests/CMakeFiles/tests.dir/all] Error 2 gmake: *** [Makefile:160: all] Error 2

    Why this issue?

    After studying responses to previous similar issues, I feel like the solutions mentioned there may not be applicable to the newer ubuntu 21.10 LTS. Previous similar issues were typically solved by updating cmake or gcc to the latest version but in the case of latest ubuntu (21.10), such requirements are already fulfilled.

    opened by rakshitraj 2
Releases(P0267R8)
  • P0267R8(Sep 28, 2018)

  • P0267R6(Nov 24, 2017)

  • P0267R4(Apr 5, 2017)

    This release reflects the API presented in P0267R4 (modulo bugs). The autotools build system version has been updated to present this as version 1.4. See the past few commit messages prior to this release for more information.

    Source code(tar.gz)
    Source code(zip)
  • v.4073(Oct 6, 2014)

    Reference Implementation of N4073

    This tag/release is a reference implementation of N4073: A Proposal to Add 2D Graphics Rendering and Display to C++. It is known to contain some unimplemented functionality.

    N3888 was presented at the February 2014 Issaquah meeting of ISO/IEC JTC1/SC22/WG21 (informally known as the ISO C++ Standardization Committee). It was favorably received, a lot of good feedback was provided, and the authors were encouraged to continue the effort. The authors did so, and the successor proposal was N4021. This was quickly followed by N4073, which fixed a few oversights and added a small amount of additional functionality. N4073 is the successor proposal to N4021 which succeeded N3888. It was presented in draft form at the June 2014 Rapperswil meeting of WG21, where it was favorably received. Work on a successor proposal to N4073, in the form of a Draft Technical Specification, is underway.

    Further work is being directed towards implementations of the successor proposal.

    Source code(tar.gz)
    Source code(zip)
  • v.3888(Oct 6, 2014)

    Reference Implementation of N3888

    This tag/release is a reference implementation of N3888: A Proposal to Add 2D Graphics Rendering and Display to C++. It is known to contain some bugs and some unimplemented functionality.

    N3888 was presented at the February 2014 Issaquah meeting of ISO/IEC JTC1/SC22/WG21 (informally known as the ISO C++ Standardization Committee). It was favorably received, a lot of good feedback was provided, and the authors were encouraged to continue the effort. The authors did so, and the successor proposal was N4021. This was quickly followed by N4073, which fixed a few oversights and added a small amount of additional functionality. N4073 was presented in draft form at the June 2014 Rapperswil meeting of WG21, which was also favorably received. Work on a successor proposal to N4073, in the form of a Draft Technical Specification, is underway.

    Further work is being directed towards implementations of the successor proposals.

    Source code(tar.gz)
    Source code(zip)
Owner
cpp-io2d
cpp-io2d
Patterns - This is an experimental library that has evolved to P1371, proposed for C++23.

MPark.Patterns This is an experimental library that has evolved to P1371, being proposed for C++23. Introduction MPark.Patterns is an experimental pat

Michael Park 578 Dec 29, 2022
Celeborn is a Userland API Unhooker that I developed for learning Windows APIs and Syscall implementations

Celeborn is a Userland API Unhooker that I developed for learning Windows APIs and Syscall implementations. It mainly detects and patches hooking instructions in NTDLL.dll file. All PRs are welcome!

Furkan Göksel 101 Nov 11, 2022
F Graphics Library (FGL) is a small graphics C++ portable library for LCD displays on embedded systems

F Graphics Library (FGL) Full documentation: fgl.docsforge.com (By Filipe Chagas) F Graphics Library is a C++ library that I created for use in embedd

Filipe Chagas 9 Oct 31, 2022
GraphicsFuzz provides tools for automatically finding and simplifying bugs in graphics drivers, specifically graphics shader compilers.

GraphicsFuzz GraphicsFuzz is a set of tools for testing shader compilers GraphicsFuzz provides tools for automatically finding and simplifying bugs in

Google 516 Dec 15, 2022
CSC404: Computer Graphics [CG] & CSL402: Computer Graphics Lab [CG Lab]

COMPUTER-GRAPHICS-AND-COMPUTER-GRAPHICS-LAB CSC404: CG & CSL402: CG LAB [SEMESTER IV] Syllabus CG - Reference Books THE WALL MEGA SATISH - AUTHOR CG C

AMEY THAKUR 7 Apr 28, 2022
A 2-key ISO enter macropad with a 3d printable case

Milk Crate Another milk-themed meme board, for your extra unused base kit/novelty ISO keys. Inspired by Spaceboards/2% Milk. Build Notes Printing Prin

null 8 Dec 17, 2022
exp2swift translator which translates STEP schema files described in ISO 10303-11 STEP EXPRESS language to the Swift programing language.

STEPswiftcode/ exp2swift exp2swift translator which translates STEP schema files described in ISO 10303-11 STEP EXPRESS language to the Swift programi

Tsutomu Yoshida 1 Jan 3, 2022
Qtile ISO profile for building Woof OS using `archiso` with zen kernel

iso-profile ISO profile for Woof OS ISO profile for building Woof OS using archiso Building the ISO profile into an ISO If you are on an Arch based sy

Woof OS 0 Jan 27, 2022
Gfx - A minimalist and easy to use graphics API.

gfx gfx is a minimalist and easy to use graphics API built on top of Direct3D12/HLSL intended for rapid prototyping. It supports: Full shader reflecti

Guillaume Boissé 343 Dec 29, 2022
Rewritten version of the MiniLibX graphics API used by 42, using glfw & glad. Running on OpenGL.

Written by W2.Wizard for the 42 Network A recreation of the MiniLibX library used by 42, using GLFW & glad, running on OpenGL. The goal of MLX42 is to

Codam 119 Dec 29, 2022
refterm is a reference renderer for monospace terminal displays.

refterm v2 refterm is a reference renderer for monospace terminal displays. It was designed to demonstrate that even in the worst-case scenario - extr

Casey Muratori 1.3k Jan 1, 2023
code reference materials reguarding ip support session

ip-support This repository includes the necessary reference code for ip support sessions @SLIIT Malabe. These IP support sessions are conducted by the

Sanuja Methmal 3 Nov 24, 2021
MAXREFDES1277 is a reference design that enables the evaluation of MAX17853/52 for battery management in a 48V system.

MAXREFDES1277 The MAXREFDES1277 reference design enables quick evaluation of MAX17853/52 for battery management in a 48V system. It can be used to tes

Maxim Integrated Training & Technical Support (TTS) Team 3 Dec 2, 2021
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

OpenEXR OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the mot

Academy Software Foundation 1.3k Jan 6, 2023
Quick reference on command line tools and techniques

1. Introduction 1.1. Scope 1.2. Background 1.3. Purpose 1.4. Next steps 2. Basics 2.1. Common commands 2.2. Shortcuts 2.2.1. Navigation 2.2.2. Editing

Utsav Barman 330 Dec 7, 2022
Human-friendly HSL, reference implementation

HSLuv - Human-friendly HSL Explanation, demo, ports etc. The reference implementation is written in Haxe. Build system HSLuv uses Nix package manager.

HSLuv Project 1.2k Dec 30, 2022
Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.

News Visual Studio 2013 is no longer supported As scheduled, Microsoft Visual Studio 2013 is no longer officially supported. Please upgrade to at leas

The Khronos Group 2.4k Jan 9, 2023
`lv_lib_100ask` is a reference for various out of the box schemes based on lvgl library or an enhanced interface for various components of lvgl library.

Introduction lv_lib_100ask is a reference for various out of the box schemes based on lvgl library or an enhanced interface for various components of

100askTeam 34 Dec 15, 2022
A collection of different Cellular Automata implementations for recreational purposes

A collection of different Cellular Automata implementations for recreational purposes

Tsoding 19 Oct 4, 2022