<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Hi All,<br>
<br>
Heads up, the patch was merged this am. I'll make a cleanup pass
tomorrow based on nightly dashboard failures.<br>
<br>
Burlen<br>
<br>
On 07/03/2013 04:43 PM, burlen wrote:<br>
</div>
<blockquote cite="mid:51D4B710.8030606@gmail.com" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
Hi All,<br>
<br>
I'm preparing to merge a patch(
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<a moz-do-not-send="true"
href="http://review.source.kitware.com/#/t/2980/">http://review.source.kitware.com/#/t/2980/</a>)
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.<br>
<br>
OpenGL error hunt<br>
<br>
This patch implements OpenGL error checking in VTK.<br>
<br>
OpenGL's error handling implementation error is designed
such<br>
that internal error flags remain set with the first error
that<br>
occurred until they are explicitly checked. With this design<br>
it's important to check and clear the error flags regularly<br>
else they become unusable as code checking for errors ends<br>
up reporting earlier undetected unrelated errors.<br>
<br>
This patch takes the following approach:<br>
<br>
1) at public entry points into code that uses OpenGL clear
the<br>
error flags without reporting errors. This guards against<br>
reportinig unrealted errors, such as those caused by code<br>
outside of VTK. See vtkOpenGLClearErrorMacro<br>
<br>
2) before returning from functions that made OpenGL calls
check<br>
for and report OpenGL errors. This detects Open GL errors in
the<br>
function/method where they occurred facilitating debugging
and it<br>
clears error flags so that user code doesn't detect errors
caused<br>
by VTK. See vtkOpenGLCheckErrorMacro<br>
<br>
This patch cleans up a number of bugs that were detected by<br>
the new error checking and reporting.<br>
<br>
This patch also contains improvements for OpenGL pixel
buffers, a<br>
renderbuffer object, and fast paths through framebuffer
objects,<br>
and texture objects, and fast path for setting uniform
variables,<br>
all of which are needed in vtkSurfaceLICPainter and<br>
vtkLineIntegralConvolution2D GPGPU code.<br>
<br>
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 (<a moz-do-not-send="true"
href="http://vtk.markmail.org/search/?q=invalid%20drawable">http://vtk.markmail.org/search/?q=invalid%20drawable</a>).
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.<br>
<br>
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.<br>
<br>
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.<br>
<br>
Please let me know if you have comments or concerns about this
patch.<br>
<br>
Thanks<br>
Burlen<br>
</blockquote>
<br>
</body>
</html>