V

Avatar



Signed Distance Field Meshes

Early test on raymarching SDF meshes





Get FFT with FMOD 5

This is relevant code to get FFT data with FMOD 5.





Light Probes





C/C++ enable/disable code blocks with comments

Sometimes you’re writing code and need a quick way to enable/disable a section of code. That happens to me and most probably it happens to you too. I know of 2 ways to do this. You’ll need to change a character and compile the file, but that’s it. This does not allow you to change things in runtime, it’s all in compile time.

We can use C/C++ multiline comments /* */, to enable/disable blocks of code by changing a character. Check the following example:

/**/
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glDepthMask( GL_FALSE );
glEnable( GL_STENCIL_TEST );
/*/
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE );
glDepthMask( GL_TRUE );
glDisable( GL_DEPTH_TEST );
glDisable( GL_STENCIL_TEST );
/**/

To enable the second block -and disable the first- change /**/ into /*/ from the first line.
An alternative to the comment method is to use the #if #endif preprocessor directives. Using the same code example, if we wanted to enable the first block we’ll change it as follows:

#if 1
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glDepthMask( GL_FALSE );
glEnable( GL_STENCIL_TEST );
#else
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE );
glDepthMask( GL_TRUE );
glDisable( GL_DEPTH_TEST );
glDisable( GL_STENCIL_TEST );
#endif

To switch blocks, change #if 1 to #if 0. That’s pretty much it.

The example code above is not the best example at all, but take it as just that. An example. During your code sessions you’ll find better use for this i’m sure about that. Hope it helps.





AntTweakBar with Core GL OSX

EDIT: As pointed to me by Christoph Ruß, here’s a solution for this problem without the need to change the code

“I would like to add that the problem really is that the OpenGL library can not be found due to it simply not being in the path variable for the dynamic linker. Your solution to provide a fixed path on compile-time surely works, but may not be ideal, if you want to avoid re-compiling the lib.

I would recommend adjusting your DYLD_LIBRARYPATH instead. This could go in ~/.bash_profile:

export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/System/Library/Frameworks/OpenGL.framework/Versions/Current/”

I’ve been trying to get AntTweakBar (version 116) to compile and run as my default GUI but ended up finding some obstacles that took me a couple days to find a solution. Should have been a smooth ride, but ended up in a couple of crazy days and an easy solution found just minutes ago.

Let’s begin with some information. It was pretty easy to compile following the instructions found on the website. Under Windows it took a few minutes to get it up and running, even as a Static Library. Problems began when i’ve tried to compile on OS X 10.9:

  1. It reports 2 errors with the declaration of glDrawElements and glShaderSource. It differs from the declaration from GL header.
    Easy fix: Just copy the declaration from GL header to ATB.
  2. Compiling as a static library was OK. After reading it’s change log i realised they have static library support but i had taken the longest path and was trying to get it done manually, so it took me more time that i had planned.

After some time, i finally got the wanted the static library compiled and linking successfully, i got the following error:

“AntTweakBar: OpenGL Core Profile functions cannot be loaded.
ERROR(AntTweakBar) >> Cannot load OpenGL library dynamically”

Tracked that problem down to the line:

gl_dyld = dlopen("OpenGL", RTLD_LAZY );

gl_dyld was always NULL, which tells me the library wasn’t being loaded/found (really?!). The fix i found is to change the first parameter to use the full path to OpenGL as follows:

gl_dyld = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY );

 

It is a very simple fix and worked just fine for me, but, it took me a few days of frustration and travel. After all i was supposed to get this up and running last Thursday. It’s nearly one week later.