/** * 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; }
/** * Convert the given {@link Shader} into an embedded shader, by replacing * its URI with a data URI, if the URI is not already a data URI * * @param gltfModel The {@link GltfModelV1} * @param id The ID of the {@link Shader} * @param shader The {@link Shader} */ private static void convertShaderToEmbedded( GltfModelV1 gltfModel, String id, Shader shader) { String uriString = shader.getUri(); if (IO.isDataUriString(uriString)) { return; } ShaderModel shaderModel = gltfModel.getShaderModelById(id); ByteBuffer shaderData = shaderModel.getShaderData(); byte data[] = new byte[shaderData.capacity()]; shaderData.slice().get(data); String encodedData = Base64.getEncoder().encodeToString(data); String dataUriString = "data:text/plain;base64," + encodedData; shader.removeExtensions(BinaryGltfV1.getBinaryGltfExtensionName()); shader.setUri(dataUriString); }
Shader vertexShader = gltf.getShaders().get(vertexShaderId); Shader fragmentShader = gltf.getShaders().get(fragmentShaderId); String vertexShaderUriString = vertexShader.getUri(); String fragmentShaderUriString = fragmentShader.getUri(); String shaderNames = ""; if (IO.isDataUriString(vertexShaderUriString))
ByteBuffer shaderData = shaderModel.getShaderData(); String oldUriString = shader.getUri(); String newUriString = oldUriString; if (oldUriString == null ||
String uri = shader.getUri(); if (IO.isDataUriString(uri))
/** * Creates a shallow copy of the given {@link Shader} * * @param shader The {@link Shader} * @return The copy */ static Shader copy(Shader shader) { Shader copy = new Shader(); copy.setExtensions(shader.getExtensions()); copy.setExtras(shader.getExtras()); copy.setName(shader.getName()); copy.setType(shader.getType()); copy.setUri(shader.getUri()); return copy; }