requires openGL