Go to file
whitequark e7c8c1c8f2 Abstract all (ex-OpenGL) drawing operations into a Canvas interface.
This has several desirable consequences:
  * It is now possible to port SolveSpace to a later version of
    OpenGL, such as OpenGLES 2, so that it runs on platforms that
    only have that OpenGL version;
  * The majority of geometry is now rendered without references to
    the camera in C++ code, so a renderer can now submit it to
    the video card once and re-rasterize with a different projection
    matrix every time the projection is changed, avoiding expensive
    reuploads;
  * The DOGD (draw or get distance) interface is now
    a straightforward Canvas implementation;
  * There are no more direct references to SS.GW.(projection)
    in sketch rendering code, which allows rendering to multiple
    viewports;
  * There are no more unnecessary framebuffer flips on CPU on Cocoa
    and GTK;
  * The platform-dependent GL code is now confined to rendergl1.cpp.
  * The Microsoft and Apple headers required by it that are prone to
    identifier conflicts are no longer included globally;
  * The rendergl1.cpp implementation can now be omitted from
    compilation to run SolveSpace headless or with a different
    OpenGL version.

Note these implementation details of Canvas:
  * GetCamera currently always returns a reference to the field
    `Camera camera;`. This is so that a future renderer that caches
    geometry in the video memory can define it as asserting, which
    would provide assurance against code that could accidentally
    put something projection-dependent in the cache;
  * Line and triangle rendering is specified through a level of
    indirection, hStroke and hFill. This is so that a future renderer
    that batches geometry could cheaply group identical styles.
  * DrawPixmap and DrawVectorText accept a (o,u,v) and not a matrix.
    This is so that a future renderer into an output format that
    uses 2d transforms (e.g. SVG) could easily derive those.

Some additional internal changes were required to enable this:
  * Pixmap is now always passed as std::shared_ptr<{const ,}Pixmap>.
    This is so that the renderer could cache uploaded textures
    between API calls, which requires it to capture a (weak)
    reference.
  * The PlatformPathEqual function was properly extracted into
    platform-specific code. This is so that the <windows.h> header
    could be included only where needed (in platform/w32* as well
    as rendergl1.cpp).
  * The SBsp{2,3}::DebugDraw functions were removed. They can be
    rewritten using the Canvas API if they are ever needed.

While no visual changes were originally intended, some minor fixes
happened anyway:
  * The "emphasis" yellow line from top-left corner is now correctly
    rendered much wider.
  * The marquee rectangle is now pixel grid aligned.
  * The hidden entities now do not clobber the depth buffer, removing
    some minor artifacts.
  * The workplane "tab" now scales with the font used to render
    the workplane name.
  * The workplane name font is now taken from the normals style.
  * Workplane and constraint line stipple is insignificantly
    different. This is so that it can reuse the existing stipple
    codepaths; rendering of workplanes and constraints predates
    those.

Some debug functionality was added:
  * In graphics window, an fps counter that becomes red when
    rendering under 60fps is drawn.
2016-07-23 22:31:18 +00:00
.travis CMake: require GCC 5.0+. 2016-05-18 17:27:37 +00:00
cmake Cocoa, Win32: embed version info into distributable application. 2016-06-03 00:07:30 +00:00
debian debian: use non-ABI-versioned libpng. 2016-06-26 13:25:33 +00:00
exposed Rewrite declarations of form f(void) as f(). 2016-05-20 12:43:20 +00:00
extlib DXF: export "actual measurement" for dimensions. 2016-05-17 12:34:35 +00:00
include Enable -Wall -Wextra -Wno-unused-parameter on GCC/Clang. 2016-05-08 00:01:35 +00:00
res Freedesktop: don't hardcode binary path in .desktop file. 2016-06-23 11:25:57 +00:00
src Abstract all (ex-OpenGL) drawing operations into a Canvas interface. 2016-07-23 22:31:18 +00:00
.gitattributes Added a .gitattributes file 2013-11-19 18:17:55 -05:00
.gitignore Build Debian packages with debug symbols. 2016-01-13 06:45:17 +00:00
.gitmodules Move everything from whitequark/solvespace to solvespace/solvespace. 2016-04-23 19:39:39 +00:00
.travis.yml Move everything from whitequark/solvespace to solvespace/solvespace. 2016-04-23 19:39:39 +00:00
appveyor.yml Update CI scripts to respect the vA.B tag name format. 2016-05-17 14:53:36 +00:00
CHANGELOG.md Multiply constraint values by scale when pasting with transformation. 2016-07-19 12:12:01 +00:00
CMakeLists.txt Unix: compatibility with platforms where backtrace() is not in libc. 2016-07-19 15:40:52 +00:00
COPYING.txt Changes in preparation for the release of SolveSpace under the GPL, 2013-07-28 14:08:34 -08:00
README.md debian: use non-ABI-versioned libpng. 2016-06-26 13:25:33 +00:00
wishlist.txt Make oops() calls exit instead of entering debugger by default, 2011-03-05 12:52:57 -08:00

SolveSpace

This repository contains the source code of SolveSpace, a parametric 2d/3d CAD.

Installation

Mac OS X (>=10.6 64-bit), Debian (>=jessie) and Ubuntu (>=trusty)

Binary packages for Mac OS X and Debian derivatives are available via GitHub releases.

Other systems

See below.

Building on Linux

Building for Linux

You will need CMake, libpng, zlib, json-c, fontconfig, freetype, gtkmm 2.4, pangomm 1.4, OpenGL and OpenGL GLU. On a Debian derivative (e.g. Ubuntu) these can be installed with:

apt-get install libpng-dev libjson-c-dev libfreetype6-dev \
                libfontconfig1-dev libgtkmm-2.4-dev libpangomm-1.4-dev \
                libgl-dev libglu-dev libglew-dev cmake

Before building, check out the necessary submodules:

git submodule update --init extlib/libdxfrw

After that, build SolveSpace as following:

mkdir build
cd build
cmake ..
make
sudo make install

A fully functional port to GTK3 is available, but not recommended for use due to bugs in this toolkit.

Building for Windows

You will need CMake, a Windows cross-compiler, and Wine with binfmt support. On a Debian derivative (e.g. Ubuntu) these can be installed with:

apt-get install cmake mingw-w64 wine-binfmt

Before building, check out the necessary submodules:

git submodule update --init

After that, build 32-bit SolveSpace as following:

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake ..
make solvespace

Or, build 64-bit SolveSpace as following:

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake ..
make solvespace

The application is built as build/src/solvespace.exe.

Space Navigator support will not be available.

Building on Mac OS X

You will need XCode tools, CMake, libpng and Freetype. Assuming you use homebrew, these can be installed with:

brew install cmake libpng freetype

XCode has to be installed via AppStore; it requires a free Apple ID.

Before building, check out the necessary submodules:

git submodule update --init extlib/libdxfrw

After that, build SolveSpace as following:

mkdir build
cd build
cmake ..
make

The app bundle is built in build/src/solvespace.app.

Building on Windows

You will need cmake and Visual C++.

GUI build

Check out the git submodules. Create a directory build in the source tree and point cmake-gui to the source tree and that directory. Press "Configure" and "Generate", then open build\solvespace.sln with Visual C++ and build it.

Command-line build

First, ensure that git and cl (the Visual C++ compiler driver) are in your %PATH%; the latter is usually done by invoking vcvarsall.bat from your Visual Studio install. Then, run the following in cmd or PowerShell:

git submodule update --init
mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake

MSVC build

It is also possible to build SolveSpace using MinGW, though Space Navigator support will be disabled.

First, ensure that git and gcc are in your $PATH. Then, run the following in bash:

git submodule update --init
mkdir build
cd build
cmake ..
make

License

SolveSpace is distributed under the terms of the GPL3 license.