adding support for custom shader; easier creation of elements from code