Migrate shaderListener to Observer pattern