Frequently Asked Questions (FAQs)
Question?
Voreen does not seem to work with my Intel/S3/VIA onboard graphics card.Answer!
At the moment, we only support NVIDIA and ATI graphics boards, as most graphics cards from other vendors do not support the functionality we use for volume rendering. This may change in the future, when full-featured OpenGL drivers become available for these cards.Question?
When selecting a high sampling rate, strange colored patterns appear in the rendering window.

Answer!
This is related to the maximum number of shader instructions supported by the graphics card. GPUs up to the GeForce 7 only support 65536 fragment shader instructions per pass (shown as MAX_PROGRAM_EXEC_INSTRUCTIONS in the application log file), which is not sufficient when choosing very high sampling rates or very complex rendering techniques. Newer GPUs do not have this limitation.
Question?
How do I adapt my own processor classes from Voreen 1.X to be compatible with Voreen 2.0?Answer!
The main thing, which has been changed in Voreen 2.0 regarding processors, is the way ports are used. Therefore, you have to change the port initialization as well as their usage. To initialize ports, you now call something like this in the constructor initialization section:
entryPort_(Port::INPORT, "image.entrypoints")
exitPort_(Port::INPORT, "image.exitpoints")
outport_(Port::OUTPORT, "image.output", true)
Then, instead of calling the createInport() /createOutport() methods within the constructor, you use addPort() to enable usage of the ports:
addPort(entryPort_);
addPort(exitPort_);
addPort(outport_);
To activate and deactivated an outport in the process() method, you now simply call:
outport_.activateTarget(); or outport_.deactivateTarget();
And to bind the content of an inport, you call:
entryPort_.bindTextures(tm_.getGLTexUnit(entryParamsTexUnit_), tm_.getGLTexUnit(entryParamsDepthTexUnit_));
Furthermore, we have eliminated the currentVolumeHandle_. To get access to a volume, you can now call: volumePort_.getData();
So far, everything became more easy. The only excuse is, that you now have to tell the shader, which texture dimensions to use, since due to the multi-view mode, different texture dimensions may exist. Therefore, you define an appropriate uniform in the shader and call: entryPort_.setTextureParameters(raycastPrg_, "entryParameters_");
The uniform is defined and used in the shader as follows:
uniform TEXTURE_PARAMETERS entryParameters_;
...
vec3 frontPos = textureLookup2Dnormalized(entryPoints_, entryParameters_, p).rgb;