class_docstr: Texture class for smarter scaling and internalformat decisions.
  
  This texture class uses internal formats that are not supported by
  strict OpenGL 2/ES drivers without additional extensions. By using
  this texture we upload data to the GPU in a format as close to
  the original data type as possible (32-bit floats on the CPU are 32-bit
  floats on the GPU). No normalization/scaling happens on the CPU and
  all of it happens on the GPU. This should avoid unnecessary data copies
  as well as provide the highest precision for the final visualization.
  
  The texture format may either be a GL enum string (ex. 'r32f'), a numpy
  dtype object (ex. np.float32), or 'auto' which means the texture will
  try to pick the best format for the provided data. By using 'auto' you
  also give the texture permission to change formats in the future if
  new data is provided with a different data type.
  
  This class should only be used internally. For similar features where
  scaling occurs on the CPU see
  :class:`vispy.visuals._scalable_textures.CPUScaledTextureMixin`.
  
  To use this mixin, a subclass should be created to combine this mixin with
  the texture class being used. Existing subclasses already exist in this
  module. Note that this class **must** appear first in the subclass's parent
  classes so that its ``__init__`` method is called instead of the parent
  Texture class.
class_docstr_tok: ["Texture","class","for","smarter","scaling","and","internalformat","decisions",".","This","texture","class","uses","internal","formats","that","are","not","supported","by","strict","OpenGL","2\/ES","drivers","without","additional","extensions",".","By","using","this","texture","we","upload","data","to","the","GPU","in","a","format","as","close","to","the","original","data","type","as","possible","(","32-bit","floats","on","the","CPU","are","32-bit","floats","on","the","GPU",")",".","No","normalization\/scaling","happens","on","the","CPU","and","all","of","it","happens","on","the","GPU",".","This","should","avoid","unnecessary","data","copies","as","well","as","provide","the","highest","precision","for","the","final","visualization",".","The","texture","format","may","either","be","a","GL","enum","string","(","ex",".","'r32f","'",")",",","a","numpy","dtype","object","(","ex",".","np.float32",")",",","or","'auto","'","which","means","the","texture","will","try","to","pick","the","best","format","for","the","provided","data",".","By","using","'auto","'","you","also","give","the","texture","permission","to","change","formats","in","the","future","if","new","data","is","provided","with","a","different","data","type",".","This","class","should","only","be","used","internally",".","For","similar","features","where","scaling","occurs","on","the","CPU","see",":","class",":","`","vispy.visuals._scalable_textures.CPUScaledTextureMixin","`",".","To","use","this","mixin",",","a","subclass","should","be","created","to","combine","this","mixin","with","the","texture","class","being","used",".","Existing","subclasses","already","exist","in","this","module",".","Note","that","this","class","*","*","must","*","*","appear","first","in","the","subclass","'s","parent","classes","so","that","its","``","__init__","``","method","is","called","instead","of","the","parent","Texture","class","."]
code: def _internalformat_will_change(self, data):
      shape_repr = self._create_rep_array(data)
      new_if = self._get_gl_tex_format(data.dtype, shape_repr.shape[-1])
      return new_if != self.internalformat
  
imports: import warnings
  import numpy
  from vispy.gloo.texture import Texture2D, Texture3D, convert_dtype_and_clip
label_desc: Use image node_id 5 for calling the GPUScaledTextureMixin obj's underlying member method code with example usage: obj._internalformat_will_change(data) and returns: unknown