OpenCSG - NewsBack to main page
OpenCSG 1.5.1 fixes a compile error in version 1.5.0 that happened with the more recent GCC versions 11 and 12.
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
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.
I've uploaded the OpenCSG git repository to github.
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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.
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.
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.
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.
OpenCSG-1.0.0 contains lots of improvements and additions:
The interface of OpenCSG has remained unchanged.
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.
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.
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.
© 2002-2022, Florian Kirsch, e-mail: mail at opencsg dot org,
2002-2005 Hasso-Plattner-Institute Potsdam.
Last change: 20-Apr-2022