Originally Posted By: HeelX
Broken screenshots are better than nothing smile

Broken screenshots are the best screenshots!

Originally Posted By: Quad
OH! The pinnacle of modern-art! LOVE IT!.

Buy your very own and absolutely exclusive print for just $1,000,000 or the equivalent in bitcoins!


I have some more broken screenshots for you guys, I promise they are going to be the last ones, not that you guys think we can only produce broken screenshots. More actual content coming soon, together with a few announcements for the very first Rayne release (which gets me all excited).

Here are the first two and their really fascinating story:



So, the first one is how it should look like, the second one is how it ended up being rendered (but only on my hardware). We aren't entirely sure what happened there, it makes no sense whatsoever and kept us busy for way too much time. The story is that the quad was rendered using a geometry shader, it was a bit subdivided, but just a quad, and we rendered two textures and the texture coordinates (the gradient) on it. Now, here is where things became interesting: If, and only if, there was a dynamic branch in the geometry shader, the first texture would magically disappear. Like, there was no trace whatsoever of this texture ever being looked up in the fragment shader. Everything else stayed the same. The second texture got rendered correctly, and the UV coordinates didn't become invalid for whatever reason.
There is still a open bug report that we filed with Apple about this, and an unanswered stack overflow question.

Well, we dropped the idea of emulating tessellation with geometry shaders anyways shortly after for performance reasons, so no idea if it's still broken or not. But that didn't stop rendering glitches to creep up on us for no reasons:


This is Sponza being broken. When looking at the scene from this perspective, and only from this one, the frame time would go up to multiple seconds, and the rendering was completely broken. The commit that made this problem appear was a fix for some input handling bug. There were no OpenGL errors, no amount of clean builds and cache flushing helped, we were baffled. We eventually fixed it by rewriting the renderer (which was on the agenda anyways).
The best bet for what happened would be a memory corruption bug, but it doesn't explain why it appeared in these circumstances.

Evidence supports this thesis though, this is from an actual memory corruption bug where we ended up overwriting over the end of an OpenGL buffer that was temporarily mapped into main memory. Pointers, not even once.


Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com