[vtk-developers] OpenGL error checking in VTK
burlen
burlen.loring at gmail.com
Thu Jul 11 17:57:52 EDT 2013
Hi All,
Heads up, the patch was merged this am. I'll make a cleanup pass
tomorrow based on nightly dashboard failures.
Burlen
On 07/03/2013 04:43 PM, burlen wrote:
> Hi All,
>
> I'm preparing to merge a patch(
> http://review.source.kitware.com/#/t/2980/) that implements OpenGL
> error checking and reporting in VTK and I'd like to give you a heads
> up and also to know if you have any comments or concerns before I make
> the merge. Here is the summary of the work.
>
> OpenGL error hunt
>
> This patch implements OpenGL error checking in VTK.
>
> OpenGL's error handling implementation error is designed such
> that internal error flags remain set with the first error that
> occurred until they are explicitly checked. With this design
> it's important to check and clear the error flags regularly
> else they become unusable as code checking for errors ends
> up reporting earlier undetected unrelated errors.
>
> This patch takes the following approach:
>
> 1) at public entry points into code that uses OpenGL clear the
> error flags without reporting errors. This guards against
> reportinig unrealted errors, such as those caused by code
> outside of VTK. See vtkOpenGLClearErrorMacro
>
> 2) before returning from functions that made OpenGL calls check
> for and report OpenGL errors. This detects Open GL errors in the
> function/method where they occurred facilitating debugging and it
> clears error flags so that user code doesn't detect errors caused
> by VTK. See vtkOpenGLCheckErrorMacro
>
> This patch cleans up a number of bugs that were detected by
> the new error checking and reporting.
>
> This patch also contains improvements for OpenGL pixel buffers, a
> renderbuffer object, and fast paths through framebuffer objects,
> and texture objects, and fast path for setting uniform variables,
> all of which are needed in vtkSurfaceLICPainter and
> vtkLineIntegralConvolution2D GPGPU code.
>
> After the merge you may see reports for previously undetected OpenGL
> errors in your codes or ctest output. Also, on the Mac if you ask VTK
> to render into an "invalid drawable" you will find that all subsequent
> OpenGL calls fail (until the drawable becomes valid) with
> INVALID_FRAMEBUFFER_OPERATION reported. The "invalid drawable" issue
> is not new (http://vtk.markmail.org/search/?q=invalid%20drawable).
> However, until now one could ignore this as OpenGL errors were not
> detected and reported. Going forward you will need to fix your code or
> disable new gl error detection and reporting. To fix your code you can
> make use of the new vtkRenderWindow::IsDrawable method to detect
> invalid drawable and avoid asking VTK to render until the drawable is
> valid. Alternatively you may disable OpenGL error detection via a
> cmake variable allowing you to ignore the bug.
>
> My motivation for this patch comes from my experience debugging my own
> VTK code and detecting errors that occurred elsewhere in VTK, in some
> instances far away in space and time (measured in lines of code).
> During this process I've noticed a good deal of variability between
> OpenGL implementations, some are very robust and tolerant of errors
> while others more strict/sensitive and can crash and burn on the same
> code. The new error detection and reporting can help quite a bit in
> tracking down cross platform/driver issues and ensures errors are
> detected at their source.
>
> I think it would make sense going forward, that new code contributed
> to VTK that makes use of OpenGL take the approach I described
> above(with exception made for performance sensitive functions) so that
> OpenGL error flags remain usable by all, allowing us to more
> aggressively detect and fix bugs in our OpenGL codes.
>
> Please let me know if you have comments or concerns about this patch.
>
> Thanks
> Burlen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20130711/b579c425/attachment.html>
More information about the vtk-developers
mailing list