blob: 0e3e0430242ec5badfcfb08ce1fdfdb472ace802 [file] [log] [blame] [edit]
/*
* 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)
{}