Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
C++ Objective-C Python Assembly C Erlang Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
Particlasm 2 - a high-performance, modular, data-driven particle system Copyright (C) 2011-2013, Leszek Godlewski <firstname.lastname@example.org> This is a nifty little project I've originally written as a university assignment, which later evolved into my graduation project at the Silesian University of Technology. Inspired by Unreal Cascade (Unreal Engine 3's particle system editor), it combines the artist-friendly concept of particle-processing modules with a blazing-fast implementation. Processing speed is achieved by compiling the predefined emitter modules - coded in raw x86 assembly language, basing heavily on SSE instructions - into two contiguous buffers of native machine code and a contiguous data buffer, thus removing most of the usual function calling overhead, significantly reducing memory access counts (most of the time all the necessary data fits in the registers) and practically eliminating cache misses. The design also displays potential for some awesome parallelization. The 2.x branch brings a radical change in architecture. While 1.x's compiler was also written in x86 assembly, further development and maintenance of the code - x86-64 porting issues, in particular - was extremely difficult, to the point where I started looking for a higher-level alternative. I've settled for a code generation approach - libparticlasm will now generate assembly and call NASM to assemble it into a raw binary blob. As a result, both compiler code and module code improves in terms of readability and reliability. Particlasm is being developed using Code::Blocks, GNU make, GCC and MinGW-W64. The workspace consists of three projects: * libparticlasm - the actual library, with a retargetable code generator (currently only x86(-64) assembly is supported) written in C++, an API in C, plus a reference implementation of a functionally-equivalent engine also written in C++, * hostapp - the host application, based on Lesson 19 from NeHe Productions (http://nehe.gamedev.net/tutorial/particle_engine_using_triangle_strips/21001/), * headless - a headless (i.e. no rendering, just plain particle processing) application for benchmarking particlasm implementations, * edificle - a work-in-progress user-friendly editor of particle effects backed by libparticlasm. To build, just run make in the root directory of the project. You can also build individual components by running make in their respective directories.