X3DTextureCoordinateNode : X3DGeometricPropertyNode {
}

X3DTextureNode : X3DAppearanceChildNode {
  # EXTENSIONS:
  MFNode     []            effects          []          # [Effect]

  # X3DOM EXTENSIONS (https://doc.x3dom.org/author/Texturing/X3DTextureNode.html):
  # (note: X3DOM spec doesn't say if it's inputOutput or initializeOnly, below is just a guess)
  SFString   []   crossOrigin  ""
}

X3DTexture2DNode : X3DTextureNode {
  SFBool []       repeatS           TRUE
  SFBool []       repeatT           TRUE
  SFNode []       textureProperties NULL [TextureProperties]

  # EXTENSIONS:
  # Commented out to not be seen by x3d-nodes-to-pascal,
  # this is implemented specially in Pascal.
  # SFString   []            alphaChannel  "AUTO"      # ["AUTO"|"NONE"|"TEST"|"BLENDING"]
}

X3DTextureTransformNode : X3DAppearanceChildNode {
}

ImageTexture : X3DTexture2DNode, X3DUrlObject {
  MFString [in,out] url               []   [URI]
}

MovieTexture : X3DTexture2DNode, X3DSoundSourceNode, X3DUrlObject {
  SFString [in,out] description       ""
  SFBool   [in,out] loop              FALSE
  SFTime   [in,out] pauseTime         0     (-Inf,Inf)
  SFTime   [in,out] resumeTime        0     (-Inf,Inf)
  SFFloat  [in,out] speed             1.0   (-Inf,Inf)
  SFTime   [in,out] startTime         0     (-Inf,Inf)
  SFTime   [in,out] stopTime          0     (-Inf,Inf)
  MFString [in,out] url               []    [URI]
  SFTime   [out]    duration_changed
  SFTime   [out]    elapsedTime
  SFBool   [out]    isActive
  SFBool   [out]    isPaused
}

MultiTexture : X3DTextureNode {
  SFFloat  [in,out] alpha    1     [0,1]
  SFColor  [in,out] color    1 1 1 [0,1]
  MFString [in,out] function []
  MFString [in,out] mode     []
  MFString [in,out] source   []
  MFNode   [in,out] texture  []    [X3DTextureNode]
}

MultiTextureCoordinate : X3DTextureCoordinateNode {
  MFNode [in,out] texCoord NULL [X3DTextureCoordinateNode]
}

MultiTextureTransform : X3DTextureTransformNode {
  MFNode [in,out] textureTransform NULL [X3DTextureTransformNode]
}

PixelTexture : X3DTexture2DNode {
  SFImage [in,out] image             0 0 0
}

TextureCoordinate : X3DTextureCoordinateNode {
  MFVec2f [in,out] point    []   (-Inf,Inf)
}

TextureCoordinateGenerator : X3DTextureCoordinateNode {
  SFString [in,out] mode      "SPHERE" [see Table 18.6]
  MFFloat  [in,out] parameter []       [see Table 18.6]
}

TextureProperties : X3DNode {
  SFFloat     [in,out] anisotropicDegree   1.0       [1,Inf)
  SFColorRGBA [in,out] borderColor         0 0 0 0   [0,1]
  SFInt32     [in,out] borderWidth         0         [0,1]
  SFString    [in,out] boundaryModeS       "REPEAT"  [see Table 18.7]
  SFString    [in,out] boundaryModeT       "REPEAT"  [see Table 18.7]
  SFString    [in,out] boundaryModeR       "REPEAT"  [see Table 18.7]
  SFString    [in,out] magnificationFilter "FASTEST" [see Table 18.8]
  SFString    [in,out] minificationFilter  "FASTEST" [see Table 18.9]
  SFString    [in,out] textureCompression  "FASTEST" [see Table 18.10]
  SFFloat     [in,out] texturePriority     0         [0,1]
  SFBool      []       generateMipMaps     FALSE

  # EXTENSIONS:
  SFBool     []            guiTexture  FALSE
}

TextureTransform : X3DTextureTransformNode {
  SFVec2f [in,out] center      0 0  (-Inf,Inf)
  SFFloat [in,out] rotation    0    (-Inf,Inf)
  SFVec2f [in,out] scale       1 1  (-Inf,Inf)
  SFVec2f [in,out] translation 0 0  (-Inf,Inf)
}
