def surface(self):
        """todo"""
        if not self.has_surface:
            ok = self._set_surface(self._get_surface())  # create surface
            if not ok:
                raise RuntimeError(Visual._compression_exception_message.format(
                    "surface"))
        return self._surface