docs: def bInit( self, vrModel, vrDiffuseTexture ):
          "Purpose: Allocates and populates the GL resources for a render model"
          # create and bind a VAO to hold state for this model
          self.m_glVertArray = glGenVertexArrays(1)
          glBindVertexArray( self.m_glVertArray )
          # Populate a vertex buffer
          self.m_glVertBuffer = glGenBuffers(1)
          glBindBuffer( GL_ARRAY_BUFFER, self.m_glVertBuffer )
          glBufferData( GL_ARRAY_BUFFER, sizeof( openvr.RenderModel_Vertex_t ) * vrModel.unVertexCount, vrModel.rVertexData, GL_STATIC_DRAW )
          # Identify the components in the vertex buffer
          glEnableVertexAttribArray( 0 )
          glVertexAttribPointer( 0, 3, GL_FLOAT, False, sizeof( openvr.RenderModel_Vertex_t ), openvr.RenderModel_Vertex_t.vPosition.offset )
          glEnableVertexAttribArray( 1 )
          glVertexAttribPointer( 1, 3, GL_FLOAT, False, sizeof( openvr.RenderModel_Vertex_t ), openvr.RenderModel_Vertex_t.vNormal.offset )
          glEnableVertexAttribArray( 2 )
          glVertexAttribPointer( 2, 2, GL_FLOAT, False, sizeof( openvr.RenderModel_Vertex_t ), openvr.RenderModel_Vertex_t.rfTextureCoord.offset )
          # Create and populate the index buffer
          self.m_glIndexBuffer = glGenBuffers(1)
          glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, self.m_glIndexBuffer )
          glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( ctypes.c_uint16 ) * vrModel.unTriangleCount * 3, vrModel.rIndexData, GL_STATIC_DRAW )
          glBindVertexArray( 0 )
          # create and populate the texture
          self.m_glTexture = glGenTextures(1)
          glBindTexture( GL_TEXTURE_2D, self.m_glTexture )
          glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, vrDiffuseTexture.unWidth, vrDiffuseTexture.unHeight,
              0, GL_RGBA, GL_UNSIGNED_BYTE, vrDiffuseTexture.rubTextureMapData )
          # If this renders black ask McJohn what's wrong.
          glGenerateMipmap(GL_TEXTURE_2D)
          glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE )
          glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE )
          glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR )
          glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR )
          fLargest = glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT )
          glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest )
          glBindTexture( GL_TEXTURE_2D, 0 )
          self.m_unVertexCount = vrModel.unTriangleCount * 3
          return True