Is it necessary to do all this work at __init__ ? Modular programs will generally not have complete vertex/shader code until draw time, so it doesn't make much sense to do this immediately.