OpenCSG - News
Author: Florian Kirsch
Keywords: OpenCSG, CSG, image-based, image-based CSG, rendering, SCS, Goldfeather, OpenGL

| # OpenCSG - News Back to main page |

### 15-Sep-2023: OpenCSG 1.6.0 released

The release OpenCSG 1.6.0 is now available. The main change is that for initialization of OpenGL function pointers and extensions, Glad is now used instead of the previous GLEW. This should improve portability - on Linux this removes the implicit dependency on GLX, that existed before - and at the same time should also simplify maintenance.

For the offscreen buffer implementation, the historic pbuffer code has been removed, and only frame buffer objects are supported now.

### 20-Apr-2022: OpenCSG 1.5.1 released

OpenCSG 1.5.1 fixes a compile error in version 1.5.0 that happened with the more recent GCC versions 11 and 12.

### 10-Apr-2022: OpenCSG 1.5.0 released

The release OpenCSG 1.5.0 provides the promised license change to the GPL version 2 or newer.

The release also contains a small API cleanup. The obsolete `render()` function taking three arguments has been removed. All rendering options must now be set via the `setOption()` function.

### 28-Mar-2022: License change to GPL version 2 or newer

I was recently informed by one of the maintainers of OpenSCAD that the current license (GPL version 2 only) of OpenCSG poses a problem for OpenSCAD, which links against some other libraries that are licensed under GPL version 3 only. In order to solve this issue, I plan to release a new version of OpenCSG soon, that can be used under the GPL version 2 or newer.

### 18-Sep-2017: OpenCSG on github

I've uploaded the OpenCSG git repository to github.

### 29-Sep-2016: OpenCSG 1.4.2 released

OpenCSG 1.4.2 fixes an issue when the calling application renders into different frame buffer objects subsequently and uses OpenCSG. In this case, when called for the second time with the second FBO active, OpenCSG did not restore that FBO, but the first FBO that was active for a previous call of OpenCSG. This caused, for example, issues in applications rendering into a QOpenGLWidget with Qt 5, such as OpenSCAD. When resizing the OpenGL window, the problem occured, and the OpenGL window was not rendered at all anymore.

### 11-Sep-2016: OpenCSG 1.4.1 released

On Intel graphics hardware, the new rendering path in the SCS algorithm in OpenCSG 1.4.0 entirely failed to work. This was apparently due to an incompatibility of the fragment program with the fixed function pipeline used at the vertex stage. OpenCSG 1.4.1 implements a workaround: a vertex program is now used instead. I hope that the rendering bugs on Intel graphics hardware are now really a thing of the past.

### 15-Sep-2014: OpenCSG 1.4.0 released

OpenCSG 1.4.0 contains a bug fix for rendering CSG expressions with more than 255 primitives. For the layered Goldfeather algorithm, this number of primitives could cause an endless loop before. In the case of the SCS algorithm, there were rendering errors with older versions.

For the SCS algorithm, the fix contains a new rendering path: using a fragment program, a kind of alpha test is performed based on all the components (r, g, b, a) of a fragment. This allows, in theory, to distinguish 2^32 - 1 primitives instead of 2^8 - 1 before. This new rendering path should be, in theory, also more stable than the old one, and some rendering problems reported for Intel graphics hardware might be solved with the new version.

### 11-May-2014: OpenCSG 1.3.3 released

OpenCSG 1.3.3 is a maintenance release, providing minor portability improvements and bug fixes. In particular, OpenCSG should now compile out-of-the-box on Linux x64 systems.

### 02-Dec-2011: OpenCSG 1.3.2 released

OpenCSG 1.3.2 is a maintenance release. It contains fixes for a number of errors when setting up frame buffer objects or PBuffers with unusual combinations of available OpenGL extensions. Furthermore, the calling application may now render into a frame buffer object when calling OpenCSG. This failed with former versions because OpenCSG did not switch back to the original frame buffer object. The release also contains a couple of compilation fixes for MacOS X.

### 09-Jun-2010: OpenCSG 1.3.1 released

OpenCSG 1.3.1 was mainly released for a slight change of the license: The GPL license contains a special linking exception for the CGAL library now. This means that you are now allowed to link OpenCSG with CGAL and ship the binaries, as long as you follow the requirements of the GPLv2 in regard to all of the software in the executable aside from CGAL.

Aside from some dead code removed, there were no source code changes in this release.

### 07-Feb-2010: OpenCSG 1.3.0 with support for MDI applications

OpenCSG 1.3.0 implements better support for applications having an multiple document interface and, therefore, use OpenCSG in different OpenGL windows. If the contexts of these windows are not shared, older versions of OpenCSG render incorrectly, because internally allocated PBuffers resp. frame buffer objects, that are not reallocated for each frame, are not valid in the different OpenGL contexts.

To solve this, new functions for setting/getting an OpenCSG context have been added. OpenGL resources are created and reused by the `render()` function per context. By setting a different OpenCSG context for each OpenGL window before using OpenCSG, CSG rendering is performed correctly.

### 03-Jan-2010: OpenCSG 1.2.0 released

OpenCSG 1.2.0 contains fixes for CSG rendering using the frame buffer object extension. In particular, it adds support for the ARB variant of this extension (before, only the EXT variant was supported).

Since the new version now uses frame buffer objects as default, in contrast to the pbuffer code path in former versions, there is the potential possibility that the pbuffer path might work ok, but the (now default) frame buffer object path would fail. In that case, try to set the `OffscreenSetting` to `PBuffer` using `setOption()`.

OpenCSG 1.2.0 also contains a small API cleanup. Whilst the old `render()` function taking three arguments is still provided for backward compatibility, there is a new render() function that only takes the list of primitives to render as argument. The other two arguments setting some rendering options are now consistently expected to be set using the `setOption()` interface.

### 19-Jul-2009: OpenCSG 1.1.1 released

OpenCSG 1.1.1 is a maintenance release. Issues in the makefiles for Linux and portability problems for 64-bit Linux have been resolved. Additionally, a performance problem was fixed in the case of lots of CSG primitives (several 10000s) with standard bounding boxes. Rendering this is slow anyways, but before, the rendering time was dominated by the computation time for generating the batches of primitives. This was, without bounding boxes, wasted time, because the batches are trivial anyways.

### 03-Dec-2006: OpenCSG 1.1.0 with Frame Buffer Object Support

The most significant addition in OpenCSG-1.1.0 is the support of OpenGL frame buffer objects. This change also led to the option setter and getter functions to control this and all other rendering options. Additionally several bugs have been fixed, for example in the heuristics that choses the offscreen buffer size and rendering errors that occured on some low-end graphics hardware.

### 03-Jul-2005: FREENIX 2005 Paper on OpenCSG

Since some time, the paper is available for download at directly from USENIX (which requires a USENIX account for some time), or here, where also my talk can be downloaded.

### 18-Dec-2004: To appear: FREENIX 2005 Paper on OpenCSG

I am going to present the paper OpenCSG: A Library for Image-Based CSG Rendering on the FREENIX Track of the USENIX Annual Technical Conference 2005 in Anaheim, Californien. This paper contains a short description of the Goldfeather and the SCS algorithm. It then explains how (and why so) the API of OpenCSG was designed, outlines the basic implementation and problems encountered during the implementation. Finally it describes some examples of its use.

### 04-Dec-2004: OpenCSG version 1.0.2 released

OpenCSG-1.0.2 provides a workspace for the free, gcc-based Dev-C++ 5 compiler for Windows. Additionally it fixes two bugs, one in the RenderTexture library, and one bug in the heuristic for choosing the CSG rendering algorithm, which caused that, under circumstances, a non-optimal rendering algorithm was used.

### 27-Sep-2004: OpenCSG version 1.0.1 released

OpenCSG-1.0.1 contains the following changes:

The settings of the OpenGL scissor test are now respected (Former versions just ignored the settings of the scissor test.). For certain cases, this can lead to a substantial performance gain. Note that this change could, potentially, cause compatibility problems in the unlikely case that your application uses the scissor test when invoking CSG rendering, but actually does not want scissoring to be active for CSG rendering. The bug fix for this case is just to disable scissoring.

Besides, OpenCSG now uses the new RenderTexture version 2 that has superseded the older version. As before, I had to apply some minor patches to RenderTexture for correct functionality under Linux.

The interface of OpenCSG has remained unchanged.

I have also updated some sections on the web and added a short FAQ section.

### 02-May-2004: OpenCSG version 1.0.0 released

OpenCSG-1.0.0 contains lots of improvements and additions:

- The makefile system for Linux now compiles a shared library. The makefiles have been derived by auto-generated makefiles from qmake, but of course, qmake (or Qt) is not required to compile OpenCSG.
- Version 1.0.0 contains lots of further performance improvements in case the bounding-box for shapes is set. This includes a performance bug fix, i.e., formerly scissoring was set to non-optimal values. Also, calculating the depth complexity now also considers the bounding box values.
- If available, the GL_TEXTURE_RECTANGLE_NV texture format is now used even in case of power-of-two textures, because this format appears to be generally faster.

The interface of OpenCSG has remained unchanged.

### 02-Mar-2004: OpenCSG version 0.9.2 released

OpenCSG-0.9.2 brings some improvements compared to former versions. First, for occlusion queries the newer OpenGL-extension GL_ARB_occlusion_query is now supported along with the former GL_NV_occlusion_query extension. Second, OpenCSG comes with GLEW version 1.2.0 now.

Compared to former versions of OpenCSG, no external interfaces have been changed, so your applications using OpenCSG should just continue to work with OpenCSG 0.9.2.

### 04-Feb-2004: Paper on rendering techniques in OpenCSG

I have presented the paper Rendering Techniques for Hardware-Accelerated Image-Based CSG on the WSCG 2004 conference. This paper describes the method that OpenCSG uses to transfer the depth information in the temporary z-buffer into the main z-buffer using render-to-texture. The paper describes also how occlusion queries can be used to speed up image-based CSG rendering.

You can download my talk already; The paper will be available online as soon as it is published online by the WSCG.

### 22-Nov-2003: OpenCSG version 0.9.1 released

OpenCSG-0.9.1 contains a number of improvements and bug fixes. New features include the ability to work also with the non-standard clockwise front-face setting and performance improvements in the case of constantly changing viewport sizes due to fewer resizes of the internal pbuffer.

Upgrading from version 0.9 to 0.9.1 should be no problem, as the external interface (and even the hidden internal interfaces) have not changed.

### 30-Sep-2003: OpenCSG version 0.9 initial release

OpenCSG-0.9.

© 2002-2023, Florian Kirsch, e-mail: mail at opencsg dot org,
2002-2005 Hasso-Plattner-Institute Potsdam.
Last change: 15-Sep-2022