Anti-Grain Evolution. 2D graphics engine for Speed and Quality in C++.

Overview

Anti-Grain Evolution Build/Test

This project is based on ideas found in Maxim (mcseem) Shemanarev's Anti-Grain Geometry library, but oriented towards maximizing performance and stability. This engine sits on top of vector rasterizer and renderer rewritten from scratch in test-first style.

Here is how a simple drawing code looks like in agge:

using namespace agge;

...

bitmap<pixel32, platform::raw_bitmap> surface(150, 100);
rasterizer<unclipped> ras;
renderer ren;

add_path(ras, circle(10.0f /*x*/, 20.0f /*y*/, 5.0f /*radius*/).iterate());

ras.sort();

ren(surface, 0 /*no windowing*/, ras /*mask*/, solid_color_blender(0, 128, 255), winding());

// ... and, if on Windows:
surface.blit(hdc, 0, 0, 150, 100);

Note: to build for Android vs-android is required. This is planned to change.

Issues
  • Anti-Grain Evolution !

    Anti-Grain Evolution !

    Really happy to see Anti-Grain Evolution ! Thank you for this !

    Do you have any plans to use C++17 or at least C++14 for it ? Asking this because there are bunch of std::auto_ptr in the code and other pre C++11 code.

    opened by Remotion 4
  • Several build issues on MacOS

    Several build issues on MacOS

    ../src/agge/parallel.cpp:21:68: error: arithmetic on a pointer to an incomplete type 'agge::parallel::thread'
    ../src/agge/parallel.cpp:22:12: error: allocation of incomplete type 'agge::parallel::thread'
    ../src/agge/parallel.cpp:39:11: error: subscript of pointer to incomplete type 'agge::parallel::thread'
    ../src/agge/parallel.cpp:40:11: error: subscript of pointer to incomplete type 'agge::parallel::thread'
    ../src/agge/parallel.cpp:44:11: error: subscript of pointer to incomplete type 'agge::parallel::thread'
    ../src/agge/parallel.cpp:52:11: error: subscript of pointer to incomplete type 'agge::parallel::thread'
    ../agge/memory.h:33:11: error: invalid application of 'sizeof' to an incomplete type 'agge::parallel::thread'
    ../agge.text/font.h:51:16: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    ../agge.text/font.h:48:47: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    ../agge.text/font.h:51:16: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    ../agge.text/font.h:48:47: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    ../agge.text/font.h:51:16: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    ../agge.text/font.h:48:47: error: implicit instantiation of undefined template 'std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1991:29: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1996:23: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:2003:16: error: static_cast from 'pointer' (aka 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *> *') to '__next_pointer' (aka 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font> >, void *> *> *'), which are not related by inheritance, is not allowed
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1991:29: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1996:23: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:2003:16: error: static_cast from 'pointer' (aka 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *> *') to '__next_pointer' (aka 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::weak_ptr<agge::font::accessor> >, void *> *> *'), which are not related by inheritance, is not allowed
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1991:29: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1996:23: error: cannot initialize object parameter of type 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *> *>' with an expression of type 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *>'
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:2003:16: error: static_cast from 'pointer' (aka 'std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *> *') to '__next_pointer' (aka 'std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<agge::font::key, std::__1::pair<agge::font *, unsigned int> >, void *> *> *'), which are not related by inheritance, is not allowed
    

    This is using a fairly up to date clang-suite on MacOS. Might I suggest adding the -Wall -Wextra -Werror and -std=c++11 (or appropriate standard) flags in your CMakeLists.txt for applicable platforms? It'll help the robustnest of the code.

    opened by Qix- 4
  • Performance

    Performance

    Hi there!

    Great to see this library :) I'm interested to know if you've done any performance comparisons between agg and agge that you'd be willing to share? Very interested to see what your improvements are!

    Also, I note that on the surface you have cut down dramatically on the number of source files compared to the original. Is this because you have simplified it, or have you implemented only a subset of the original features?

    All the best, Projectitis

    opened by projectitis 1
Releases(v0.3)
Owner
Artem G.
Artem G.
Speed Running and Competition Doom. For strictly vanilla speed runs and competitions - forked from CNDoom

Speed Running and Competition Doom Speed Running and Competition Doom is based on Chocolate Doom and aims to accurately reproduce the original DOS ver

Gibbon 3 May 24, 2022
A tiny evolution simulator, which uses SDL2 and is written in C

evosim Evosim is a small evolution simulator. Evosim uses the SDL2 library for graphics. The program can be compiled by simply running make in the evo

Victor Ocampo 2 Nov 20, 2021
Simple evolution simulator with generations mechanic and customizable settings.

SimpleEvolution Simple evolution simulator with generations mechanic and customizable settings. Field is divided in three sections: safe zone, medium

Oleg 3 Dec 18, 2021
Sword Engine is a fork of Psych Engine that plans on adding more features and quality of life improvements.

⚠️ WARNING: This README is currently incomplete, This warning will be removed once it's complete. Friday Night Funkin' - Sword Engine Sword Engine is

swordcube 6 Mar 13, 2022
Biological evolution simulator

biosim4 What is this? This pile of code was used to simulate biological creatures that evolve through natural selection. The results of the experiment

David R. Miller 2.1k Jun 27, 2022
A comprehensive guide to 50 years of evolution of strict C programming, a tribute to Dennis Ritchie's language

42 School Cheat Sheet by agavrel ?? Intended for 42 alumni, current students and candidates Truth can only be found in one place: the code – Robert C.

Antonin GAVREL 915 Jun 22, 2022
Open Source Cheat for Apex Legends, designed for ease of use. Made to understand reversing of Apex Legends and respawn's modified source engine as well as their Easy Anti Cheat Implementation.

Apex-Legends-SDK Open Source Cheat for Apex Legends, designed for ease of use. Made to understand reversing of Apex Legends and respawn's modified sou

null 86 Jun 24, 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 499 Jun 22, 2022
OpenGL Template Engine - a C++ OpenGL graphics engine which aimed to be a simple startup template for 3D OpenGL projects.

OpenGL Template Engine is a C++ OpenGL graphics engine which aimed to be a simple startup template for 3D OpenGL projects. This is the template I personally use for my own projects and provides me with the general OpenGL 3D render setup with model import and UI.

Marcus Nesse Madland 2 May 16, 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 8 Dec 14, 2021
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
Official Vanguard Anti-Cheat source code.

Vanguard Official Vanguard Anti-Cheat source code. Using the compiled binary For ease, an unprotected compiled version of Vanguard is available. Downl

Riot Vanguard 411 Jun 18, 2022
Easy Anti PatchGuard

EasyAntiPatchGuard ##Support System = Win8 (Win8 - Win10 21H4) How to use 1.Build EasyAntiPatchGuard.sln 2.Load EasyAntiPatchGuard.sys Detail as we kn

null 97 Jun 18, 2022
Another version of EVA using anti-debugging techs && using Syscalls

EVA2 Another version of EVA using anti-debugging techs && using Syscalls First thing: Dont Upload to virus total. this note is for you and not for me.

null 252 Jun 23, 2022
A loadlibrary injector for the game Splitgate that fully bypasses their EQU8 anti-cheat implementation.

splitgate-load-library-injector A loadlibrary injector for the game Splitgate that fully bypasses their EQU8 anti-cheat implementation. Information Th

Hinnie 7 Apr 18, 2022
研究和移除各种内核回调,在anti anti cheat的路上越走越远

driver_callback_bypass_1909 研究和移除各种内核回调,在anti anti cheat的路上越走越远 测试系统 全部代码运行在1909系统下(Microsoft Windows [版本 10.0.18363.592]) 更新 主要回调都绕过,分析出来自会上传,完毕后写一个专

fyh 84 Jun 19, 2022
Blumentals Program Protector v4.x anti protection toolkit

VeNoM A Blumentals Program Protector v4.x anti protection toolkit. Reverse engineering proof-of-concept code. Screenshot & demo venomdemo.mp4 Usage Th

Aleksandar 3 Jan 10, 2022
The FLIP Fluids addon is a tool that helps you set up, run, and render high quality liquid fluid effects all within Blender, the free and open source 3D creation suite.

FLIP Fluids The FLIP Fluids addon is a tool that helps you set up, run, and render liquid simulation effects. Our custom built fluid engine is based a

Ryan Guy 1.3k Jun 21, 2022