private static int optimize( final SMFMemoryMesh m, final OptionalInt optimize_opt, final long max) { int triangle_size = m.header().triangles().triangleIndexSizeBits(); if (optimize_opt.isPresent()) { if (max < (long) (StrictMath.pow(2.0, 64.0) - 1.0)) { triangle_size = 64; } if (max < (long) (StrictMath.pow(2.0, 32.0) - 1.0)) { triangle_size = 32; } if (max < (long) (StrictMath.pow(2.0, 16.0) - 1.0)) { triangle_size = 16; } if (max < (long) (StrictMath.pow(2.0, 8.0) - 1.0)) { triangle_size = 8; } final int smallest_allowed = optimize_opt.getAsInt(); triangle_size = Math.max(triangle_size, smallest_allowed); } return triangle_size; }
"triangles %s %s", Long.toUnsignedString(triangles.triangleCount()), Long.toUnsignedString(triangles.triangleIndexSizeBits()))); this.writer.newLine();
this, this.tri_buffer, triangles.triangleIndexSizeBits(), triangles.triangleCount()); } else {
@Override public void onFinish() { if (this.errors.isEmpty()) { Invariants.checkInvariantI( this.attr_buffers.size(), this.attr_buffers.size() == this.config.size(), x -> "Must have correct number of buffers"); final SMFByteBufferPackedMesh.Builder mb = SMFByteBufferPackedMesh.builder(); for (final Tuple2<Integer, ByteBuffer> p : this.attr_buffers) { mb.addAttributeSets(SMFByteBufferPackedAttributeSet.of( p._1.intValue(), this.config.get(p._1).get(), p._2)); } if (this.tri_buffer != null) { final SMFTriangles triangles = this.header.triangles(); mb.setTriangles(SMFByteBufferPackedTriangles.of( this.tri_buffer, triangles.triangleCount(), Math.toIntExact(triangles.triangleIndexSizeBits()))); } mb.setHeader(this.header); this.mesh = mb.build(); } }