/** * Create the {@link ShaderModel} instances */ private void createShaderModels() { Map<String, Shader> shaders = Optionals.of(gltf.getShaders()); for (Entry<String, Shader> entry : shaders.entrySet()) { Shader shader = entry.getValue(); Integer type = shader.getType(); ShaderType shaderType = null; if (type == GltfConstants.GL_VERTEX_SHADER) { shaderType = ShaderType.VERTEX_SHADER; } else { shaderType = ShaderType.FRAGMENT_SHADER; } DefaultShaderModel shaderModel = new DefaultShaderModel(shader.getUri(), shaderType); shaderModels.add(shaderModel); } }
/** * Create a list containing all {@link GltfReference} objects for the * shaders that are contained in this model. * * @return The references */ public List<GltfReference> getShaderReferences() { List<GltfReference> references = new ArrayList<GltfReference>(); Map<String, Shader> shaders = Optionals.of(gltf.getShaders()); for (Entry<String, Shader> entry : shaders.entrySet()) { String shaderId = entry.getKey(); Shader shader = entry.getValue(); if (BinaryGltfV1.hasBinaryGltfExtension(shader)) { continue; } String uri = shader.getUri(); if (!IO.isDataUriString(uri)) { Consumer<ByteBuffer> target = byteBuffer -> putReferenceData(uri, byteBuffer); GltfReference reference = new GltfReference(shaderId, uri, target); references.add(reference); } } return references; }
String vertexShaderId = program.getVertexShader(); String fragmentShaderId = program.getFragmentShader(); Shader vertexShader = gltf.getShaders().get(vertexShaderId); Shader fragmentShader = gltf.getShaders().get(fragmentShaderId); String vertexShaderUriString = vertexShader.getUri(); String fragmentShaderUriString = fragmentShader.getUri();
getGltf().getShaders(), shaderId, context)); if (validatorResult.hasErrors()) Shader shader = getGltf().getShaders().get(shaderId);
/** * Create a {@link GltfAssetV1} with "embedded" data representation from * the given {@link GltfModelV1}.<br> * <br> * The returned {@link GltfAssetV1} will contain a {@link GlTF} where the * the URIs that appear in {@link Buffer}, {@link Image} or {@link Shader} * instances are replaced with data URIs that contain the corresponding * data. Its {@link GltfAsset#getBinaryData() binary data} will be * <code>null</code>, and its {@link GltfAsset#getReferenceDatas() * reference data elements} will be empty. * * @param gltfModel The input {@link GltfModelV1} * @return The embedded {@link GltfAssetV1} */ GltfAssetV1 create(GltfModelV1 gltfModel) { GlTF inputGltf = gltfModel.getGltf(); GlTF outputGltf = GltfUtilsV1.copy(inputGltf); Optionals.of(outputGltf.getBuffers()).forEach((id, value) -> convertBufferToEmbedded(gltfModel, id, value)); Optionals.of(outputGltf.getImages()).forEach((id, value) -> convertImageToEmbedded(gltfModel, id, value)); Optionals.of(outputGltf.getShaders()).forEach((id, value) -> convertShaderToEmbedded(gltfModel, id, value)); return new GltfAssetV1(outputGltf, null); }
Image::getUri); existingShaderUriStrings = collectUriStrings( Optionals.of(inputGltf.getShaders()).values(), Shader::getUri); Optionals.of(outputGltf.getImages()).forEach((id, value) -> storeImageAsDefault(gltfModel, id, value)); Optionals.of(outputGltf.getShaders()).forEach((id, value) -> storeShaderAsDefault(gltfModel, id, value));
/** * Validate the {@link GlTF#getShaders()} * * @param currentContext The optional {@link ValidatorContext} of the glTF * @return The {@link ValidatorResult} */ private ValidatorResult validateShaders(ValidatorContext currentContext) { ValidatorContext context = new ValidatorContext(currentContext); ValidatorResult validatorResult = new ValidatorResult(); validatorResult.add(validateElements( getGltf().getShaders(), "shaders", false, context, shaderValidator::validateShader)); if (validatorResult.hasErrors()) { return validatorResult; } return validatorResult; }
getGltf().getShaders(), vertexShaderId, context)); if (validatorResult.hasErrors()) Shader vertexShader = getGltf().getShaders().get(vertexShaderId); Integer vertexShaderType = vertexShader.getType(); if (vertexShaderType != GltfConstants.GL_VERTEX_SHADER) getGltf().getShaders(), fragmentShaderId, context)); if (validatorResult.hasErrors()) Shader fragmentShader = getGltf().getShaders().get(fragmentShaderId); Integer fragmentShaderType = fragmentShader.getType(); if (fragmentShaderType != GltfConstants.GL_FRAGMENT_SHADER)
Map<String, Shader> oldShaders = copy(outputGltf.getShaders()); if (inputGltf.getShaders() != null)
Map<String, Shader> shaders = Optionals.of(gltf.getShaders()); for (Entry<String, Shader> entry : shaders.entrySet())
vertexShader.setType(GltfConstants.GL_VERTEX_SHADER); String vertexShaderId = GltfIds.generateId( "vertexShader_for_" + programId, gltf.getShaders()); gltf.addShaders(vertexShaderId, vertexShader); fragmentShader.setType(GltfConstants.GL_FRAGMENT_SHADER); String fragmentShaderId = GltfIds.generateId( "fragmentShader_for_" + programId, gltf.getShaders()); gltf.addShaders(fragmentShaderId, fragmentShader);
/** * Compute the {@link IndexMappingSet} for the given glTF instance. * The {@link IndexMappingSet} will contain index mappings for all * top-level dictionaries of the given glTF. * * @param gltf The glTF * @return The {@link IndexMappingSet} */ static IndexMappingSet create(GlTF gltf) { IndexMappingSet indexMappingSet = new IndexMappingSet(); indexMappingSet.generate("accessors", gltf.getAccessors()); indexMappingSet.generate("animations", gltf.getAnimations()); indexMappingSet.generate("buffers", gltf.getBuffers()); indexMappingSet.generate("bufferViews", gltf.getBufferViews()); indexMappingSet.generate("cameras", gltf.getCameras()); indexMappingSet.generate("images", gltf.getImages()); indexMappingSet.generate("materials", gltf.getMaterials()); indexMappingSet.generate("meshes", gltf.getMeshes()); indexMappingSet.generate("nodes", gltf.getNodes()); indexMappingSet.generate("programs", gltf.getPrograms()); indexMappingSet.generate("samplers", gltf.getSamplers()); indexMappingSet.generate("scenes", gltf.getScenes()); indexMappingSet.generate("shaders", gltf.getShaders()); indexMappingSet.generate("skins", gltf.getSkins()); indexMappingSet.generate("techniques", gltf.getTechniques()); indexMappingSet.generate("textures", gltf.getTextures()); return indexMappingSet; }