def findOrLoadRenderModel(self, pchRenderModelName):
        "Purpose: Finds a render model we've already loaded or loads a new one"
        pRenderModel = None
        for model in self.m_vecRenderModels:
            if model.getName() == pchRenderModelName:
                pRenderModel = model
                break
        # load the model if we didn't find one
        if pRenderModel is None:
            error = openvr.EVRRenderModelError()
            while True:
                error, pModel = openvr.VRRenderModels().loadRenderModel_Async( pchRenderModelName )
                if error != openvr.VRRenderModelError_Loading:
                    break
                threadSleep( 1 )
            if error != openvr.VRRenderModelError_None:
                dprintf( "Unable to load render model %s - %s\n" % (
                        pchRenderModelName, 
                        openvr.VRRenderModels().getRenderModelErrorNameFromEnum( error )) )
                return None # move on to the next tracked device
            while True:
                error, pTexture = openvr.VRRenderModels().loadTexture_Async( pModel.contents.diffuseTextureId )
                if error != openvr.VRRenderModelError_Loading:
                    break
                threadSleep( 1 )
            if error != openvr.VRRenderModelError_None:
                dprintf( "Unable to load render texture id:%d for render model %s\n" % (
                        pModel.contents.diffuseTextureId, pchRenderModelName) )
                openvr.VRRenderModels().FreeRenderModel( pModel )
                return None # move on to the next tracked device
            pRenderModel = CGLRenderModel( pchRenderModelName )
            if not pRenderModel.bInit( pModel.contents, pTexture.contents ):
                dprintf( "Unable to create GL model from render model %s\n" % pchRenderModelName )
                # delete pRenderModel
                pRenderModel = None
            else:
                self.m_vecRenderModels.append( pRenderModel )
            openvr.VRRenderModels().freeRenderModel( pModel )
            openvr.VRRenderModels().freeTexture( pTexture )
        return pRenderModel
Purpose: Finds a render model we've already loaded or loads a new one