docs: @SuppressWarnings("unused")
      private void allocateDataChannel(int channelType, int channelIndex) {
          switch (channelType) {
          case NORMALS:
              m_normals = ByteBuffer.allocateDirect(
                      m_numVertices * 3 * SIZEOF_FLOAT);
              m_normals.order(ByteOrder.nativeOrder());
              break;
          case TANGENTS:
              m_tangents = ByteBuffer.allocateDirect(
                      m_numVertices * 3 * SIZEOF_FLOAT);
              m_tangents.order(ByteOrder.nativeOrder());
              break;
          case BITANGENTS:
              m_bitangents = ByteBuffer.allocateDirect(
                      m_numVertices * 3 * SIZEOF_FLOAT);
              m_bitangents.order(ByteOrder.nativeOrder());
              break;
          case COLORSET:
              m_colorsets[channelIndex] = ByteBuffer.allocateDirect(
                      m_numVertices * 4 * SIZEOF_FLOAT);
              m_colorsets[channelIndex].order(ByteOrder.nativeOrder());
              break;
          case TEXCOORDS_1D:
              m_numUVComponents[channelIndex] = 1;
              m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
                      m_numVertices * 1 * SIZEOF_FLOAT);
              m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
              break;
          case TEXCOORDS_2D:
              m_numUVComponents[channelIndex] = 2;
              m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
                      m_numVertices * 2 * SIZEOF_FLOAT);
              m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
              break;
          case TEXCOORDS_3D:
              m_numUVComponents[channelIndex] = 3;
              m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
                      m_numVertices * 3 * SIZEOF_FLOAT);
              m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
              break;
          default:
              throw new IllegalArgumentException("unsupported channel type");
          }
      }