/** * Create a new {@link AccessorModel} that describes the same data as * the given {@link AccessorModel}, but in a compact form. The returned * {@link AccessorModel} will refer to a newly created * {@link BufferViewModel} and a newly created {@link BufferModel} that * contain exactly the data for the accessor.<br> * <br> * The given {@link AccessorModel} is assumed to have a <code>float</code> * component type. * * @param accessorModel The {@link AccessorModel} * @param bufferUriString The URI string for the {@link BufferModel} * @return The new {@link AccessorModel} instance. */ private static AccessorModel instantiate( AccessorModel accessorModel, String bufferUriString) { AccessorModel instantiatedAccessorModel = createAccessorModel( accessorModel.getComponentType(), accessorModel.getCount(), accessorModel.getElementType(), bufferUriString); AccessorData accessorData = accessorModel.getAccessorData(); AccessorFloatData accessorFloatData = (AccessorFloatData)accessorData; AccessorData instantiatedAccessorData = instantiatedAccessorModel.getAccessorData(); AccessorFloatData instantiatedAccessorFloatData = (AccessorFloatData)instantiatedAccessorData; setElements(instantiatedAccessorFloatData, accessorFloatData); return instantiatedAccessorModel; }
for (AccessorModel accessorModel : accessorModels) int byteStride = accessorModel.getByteStride(); if (commonByteStride == -1)
AccessorModel accessorModel, ByteBuffer byteBuffer) if (accessorModel.getComponentDataType() == byte.class) if (accessorModel.getComponentDataType() == short.class) if (accessorModel.getComponentDataType() == int.class) if (accessorModel.getComponentDataType() == float.class) + accessorModel.getComponentDataType()); return null;
/** * Creates an {@link AccessorByteData} for the given {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @param bufferViewByteBuffer The byte buffer of the * {@link BufferViewModel} referenced by the {@link AccessorModel} * @return The {@link AccessorByteData} * @throws NullPointerException If any argument is <code>null</code> * @throws IllegalArgumentException If the * {@link AccessorModel#getComponentType() component type} of the given * accessorModel is not <code>GL_BYTE</code> or * <code>GL_UNSIGNED_BYTE</code> */ private static AccessorByteData createByte( AccessorModel accessorModel, ByteBuffer bufferViewByteBuffer) { return new AccessorByteData(accessorModel.getComponentType(), bufferViewByteBuffer, accessorModel.getByteOffset(), accessorModel.getCount(), accessorModel.getElementType().getNumComponents(), accessorModel.getByteStride()); }
accessorModel.getBufferViewModel(); int size = accessorModel.getElementType().getNumComponents(); int type = accessorModel.getComponentType(); int stride = accessorModel.getByteStride(); int offset = accessorModel.getByteOffset();
indices.getBufferViewModel(); Integer glIndicesBufferView = gltfRenderData.obtainGlBufferView(indicesBufferViewModel); return emptyRunnable(); int count = indices.getCount(); int type = indices.getComponentType(); int offset = indices.getByteOffset(); int count = accessorModel.getCount(); return () -> glContext.renderNonIndexed(glVertexArray, mode, count);
ElementType accessorType = accessorModel.getElementType(); int numComponents = accessorType.getNumComponents(); if (numComponents < 3) return null; Class<?> componentDataType = accessorModel.getComponentDataType(); if (!componentDataType.equals(float.class)) GltfConstants.stringFor(accessorModel.getComponentType()) + " - expected GL_FLOAT"); AccessorData accessorData = accessorModel.getAccessorData(); AccessorFloatData accessorFloatData = (AccessorFloatData)accessorData;
/** * Create the {@link AccessorData} for the given {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @return The {@link AccessorData} */ public static AccessorData create(AccessorModel accessorModel) { BufferViewModel bufferViewModel = accessorModel.getBufferViewModel(); ByteBuffer bufferViewData = bufferViewModel.getBufferViewData(); return create(accessorModel, bufferViewData); }
ElementType elementType = accessorModel.getElementType(); AccessorData sparseValuesAccessorData = createSparseValuesAccessorData(accessorSparseValues, accessorModel.getComponentType(), elementType.getNumComponents(), count);
/** * Update the data of the {@link #getMorphedAccessorModel() morphed * accessor model} based on the given weights. * * @param weights The morph target weights. */ void updateMorphedAccessorData(float weights[]) { AccessorFloatData morphedAccessorData = (AccessorFloatData) morphedAccessorModel.getAccessorData(); AccessorFloatData baseAccessorData = (AccessorFloatData) baseAccessorModel.getAccessorData(); combine3D( morphedAccessorData, baseAccessorData, targetAccessorFloatDatas, weights); } }
/** * Perform a basic validation of the padding/alignment requirements * of the given {@link BufferViewModel} and {@link AccessorModel} * * @param bufferViewModel The {@link BufferViewModel} * @param accessorModel The {@link AccessorModel} */ private void validatePadding( BufferViewModel bufferViewModel, AccessorModel accessorModel) { int alignmentBytes = AccessorModels.computeAlignmentBytes(accessorModel); int bufferViewByteOffset = bufferViewModel.getByteOffset(); int accessorByteOffset = accessorModel.getByteOffset(); int totalByteOffset = bufferViewByteOffset + accessorByteOffset; if (accessorByteOffset % alignmentBytes != 0) { logger.severe("Error: accessor.byteOffset is " + accessorByteOffset + " for alignment " + alignmentBytes + " in accessor " + accessorModel); } if (totalByteOffset % alignmentBytes != 0) { logger.severe("Error: bufferView.byteOffset+accessor.byteOffset is " + totalByteOffset + " for alignment " + alignmentBytes + " in accessor " + accessorModel); } } }
/** * Compute the byte stride that is common for the given * {@link AccessorModel} instances. This is the maximum of the * {@link AccessorModel#getElementSizeInBytes() element sizes} * of the given models. * * @param accessorModels The {@link AccessorModel} instances * @return The common byte stride */ static int computeCommonByteStride( Iterable<? extends AccessorModel> accessorModels) { int commonByteStride = 1; for (AccessorModel accessorModel : accessorModels) { int elementSize = accessorModel.getElementSizeInBytes(); commonByteStride = Math.max(commonByteStride, elementSize); } return commonByteStride; }
/** * Compute the number of bytes that the given {@link AccessorModel} data * has to be aligned to. * * @param accessorModel The {@link AccessorModel} * @return The alignment bytes */ static int computeAlignmentBytes(AccessorModel accessorModel) { return accessorModel.getComponentSizeInBytes(); }
/** * Creates an {@link AccessorFloatData} for the given {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @return The {@link AccessorFloatData} * @throws IllegalArgumentException If the * {@link AccessorModel#getComponentType() component type} of the given * accessorModel is not <code>GL_FLOAT</code> */ public static AccessorFloatData createFloat(AccessorModel accessorModel) { BufferViewModel bufferViewModel = accessorModel.getBufferViewModel(); return createFloat(accessorModel, bufferViewModel.getBufferViewData()); }
targetAccessorModel.getAccessorData(); AccessorFloatData targetAccessorFloatData = (AccessorFloatData)targetAccessorData;
ByteBuffer accessorByteBuffer = rawAccessorByteBuffer; int elementSizeInBytes = accessorModel.getElementSizeInBytes(); if (elementSizeInBytes != commonByteStride)
/** * Creates an {@link AccessorFloatData} for the given {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @param bufferViewByteBuffer The byte buffer of the * {@link BufferViewModel} referenced by the {@link AccessorModel} * @return The {@link AccessorFloatData} * @throws NullPointerException If any argument is <code>null</code> * @throws IllegalArgumentException If the */ private static AccessorFloatData createFloat( AccessorModel accessorModel, ByteBuffer bufferViewByteBuffer) { return new AccessorFloatData(accessorModel.getComponentType(), bufferViewByteBuffer, accessorModel.getByteOffset(), accessorModel.getCount(), accessorModel.getElementType().getNumComponents(), accessorModel.getByteStride()); }
/** * Creates an {@link AccessorByteData} for the given {@link AccessorModel} * * @param accessorModel The {@link AccessorModel} * @return The {@link AccessorByteData} * @throws IllegalArgumentException If the * {@link AccessorModel#getComponentType() component type} of the given * accessor is not <code>GL_BYTE</code> or <code>GL_UNSIGNED_BYTE</code> */ static AccessorByteData createByte(AccessorModel accessorModel) { BufferViewModel bufferViewModel = accessorModel.getBufferViewModel(); return createByte(accessorModel, bufferViewModel.getBufferViewData()); }
AccessorData inputData = input.getAccessorData(); if (!(inputData instanceof AccessorFloatData)) AccessorData outputData = output.getAccessorData(); if (!(outputData instanceof AccessorFloatData))
if (targetAccessorModel.getComponentDataType() != float.class) + targetAccessorModel.getComponentDataType()); return false; if (accessorModel.getComponentDataType() != float.class) + accessorModel.getComponentDataType()); return false;