| /* | |
| * Copyright 2023 Rive | |
| */ | |
| #include "gm.hpp" | |
| using namespace rivegm; | |
| using namespace rive; | |
| DEF_SIMPLE_GM_WITH_CLEAR_COLOR(emptyclear, 0xff00ff00, 64, 64, renderer) {} | |
| // This test ensures that PLS gets properly initialized on | |
| // GL_EXT_shader_pixel_local_storage with a transparent-black clear color. | |
| // | |
| // The extension spec makes a vague hint in Issue #4 that one could clear PLS to | |
| // 0 by issuing a glClear with a zero clear value: | |
| // | |
| // "This makes the value effectively undefined unless the framebuffer has been | |
| // cleared to zero." | |
| // | |
| // However, Issue #5 may go back on the suggestion from #4 and require | |
| // applications to always initialize PLS with a fullscreen draw. | |
| // | |
| // https://registry.khronos.org/OpenGL/extensions/EXT/EXT_shader_pixel_local_storage.txt | |
| // | |
| // Either way, we are observing on some older ARM Mali devices that the glClear | |
| // approach does not always initialize PLS, resulting in a rainbow-colored | |
| // QR-code-like pattern. Zero-initializing PLS with a draw instead of glClear | |
| // fixes the issue. | |
| // | |
| // Making an empty render pass with a transparent clear color has a high success | |
| // rate in reproducing the artifact. | |
| // | |
| // See: https://github.com/rive-app/rive-react-native/issues/279 | |
| DEF_SIMPLE_GM_WITH_CLEAR_COLOR(emptytransparentclear, | |
| 0x00000000, | |
| 320, | |
| 320, | |
| renderer) | |
| {} |