/*
Copyright (c) 2005-2008 Lode Vandevenne
All rights reserved.
This file is part of Lode's Programming Interface.
Lode's Programming Interface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Lode's Programming Interface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Lode's Programming Interface. If not, see <http://www.gnu.org/licenses/>.
*/
lpi units
---------
lodepng: PNG reading and writing. Also independent zlib encoder/decoder.
lodewav: wav file reading and writing
lpi_audio: playing audio, audio samples being std::vector<double>'s
lpi_base64: base64 encode/decode
lpi_bignums: contains currently a 128-bit fixed point number class
lpi_color: different color types and conversions
lpi_draw2d: draw 2D shapes in 2D RGBA buffers, and general 2D drawing algorithms such as line clipping
lpi_draw2dgl: draw 2D shapes in OpenGL (circles and rectangles and such, but not textures since lpi_texture does that)
lpi_draw3dgl: draw 3D primitives that aren't standard in OpenGL, e.g. a 3D linesegment-circle, and some GL related 3D math
lpi_event: events, keyboard and mouse input with SDL
lpi_file: load and save files through simpler interface
lpi_general: a mix of things that didn't find an own file (yet), such as SDL time, math, ...
lpi_gl: a few simple OpenGL wrapper functions
lpi_gui: an OpenGL based gui with buttons, windows, scrollbars, ...
lpi_gui_draw: used by lpi_gui to draw everything
lpi_gui_ex: extra/extended GUI widgets for lpi_gui, such as drawing canvas, grid, ...
lpi_gui_text: text-input related GUI widgets for lpi_gui, such as input line, input box, console, ...
lpi_math2d: 2D vector math
lpi_math3d: 3D vector, matrix, transformation and camera math
lpi_math4d: 4D vector and matrix
lpi_parse: parsing utilities (they might be considered a bit a weird way of parsing)
lpi_pathfind: A* path finding, useful for some games
lpi_reflect: give your class properties/parameters/attributes with string names that can be iterated through by scripts and serialization
lpi_screen: set up the SDL + OpenGL screen
lpi_text: font and text drawing --> TODO: should split this up in the non-screen dependent stuff and the screen dependent stuff
lpi_texture: class for textures for use in OpenGL or SDL screen. They can be drawn in 2D on screen, or used in 3D to map on OpenGL vertices.
lpi_tools: tools for developing lpi itself more easily
lpi_unittest: unit testing ability
lpi_xml: XML parsing and generating
quickcg: full 2D graphics SDL wrapper library, independent from lpi
External dependencies of lpi
----------------------------
C++ standard library
SDL
OpenGL
lpi units that depend only on standard C++
------------------------------------------
These can be used as independent libraries or tools whenever needed individually.
*) lodepng
*) lodewav
*) lpi_base64
*) lpi_bignums
*) lpi_color
*) lpi_crypto
*) lpi_file
*) lpi_math2d
*) lpi_parse
*) lpi_pathfind
*) lpi_unittest
*) lpi_xml
lpi units that depend on other lpi units but not on SDL or OpenGL
-----------------------------------------------------------------
Still useful as independent library in combination with only a few other lpi units.
*) lpi_draw2d: lpi_color
*) lpi_math3d: lpi_math2d
*) lpi_math4d: lpi_math3d
lpi units that depend on SDL and/or OpenGL, but not on other lpi units
----------------------------------------------------------------------
*) lpi_audio: SDL
*) lpi_event: SDL
*) lpi_general: SDL
*) lpi_gl: OpenGL
*) quickcg: SDL
lpi units that depend on both other lpi units and OpenGL or SDL
---------------------------------------------------------------
lpi units with lots of dependencies on other lpi units and the external libraries.
Indirect dependencies aren't always mentioned here. That is, if A depends on B and B on C,
then it isn't always mentioned that A indirectly depends on C.
*) lpi_draw2dgl: OpenGL, lpi_color, lpi_gl, lpi_draw2d
*) lpi_draw3dgl: OpenGL, lpi_color, lpi_draw2d, lpi_math3d
*) lpi_gui: SDL, OpenGL, lpi_gui_draw
*) lpi_gui_draw: SDL, OpenGL, lodepng, lpi_general, lpi_event, lpi_text, lpi_texture, lpi_gl, lpi_color, lpi_draw2dgl, lpi_xml, lpi_file, lpi_base64
*) lpi_gui_ex: SDL, OpenGL, lpi_gui
*) lpi_gui_text: SDL, OpenGL, lpi_gui
*) lpi_screen: SDL, OpenGL, lpi_color
*) lpi_text: OpenGL, lodepng, lpi_texture, lpi_color, lpi_parse
*) lpi_texture: OpenGL, lodepng, lpi_base64, lpi_gl, lpi_color