/** * Creates a default vertex {@link Shader}, with an embedded * representation of the source code in form of a data URI.<br> * <br> * The returned {@link Shader} is the vertex {@link Shader} for the * default {@link Material}, as described in "Appendix A" of the * specification. * * @return The default {@link Shader} */ static Shader createDefaultVertexShader() { Shader shader = new Shader(); shader.setType(GltfConstants.GL_VERTEX_SHADER); String encodedCode = Base64.getEncoder().encodeToString( DEFAULT_VERTEX_SHADER_CODE.getBytes()); String dataUriString = "data:text/plain;base64," + encodedCode; shader.setUri(dataUriString); return shader; }
/** * Creates a default fragment {@link Shader}, with an embedded * representation of the source code in form of a data URI.<br> * <br> * The returned {@link Shader} is the fragment {@link Shader} for the * default {@link Material}, as described in "Appendix A" of the * specification. * * @return The default {@link Shader} */ static Shader createDefaultFragmentShader() { Shader shader = new Shader(); shader.setType(GltfConstants.GL_FRAGMENT_SHADER); String encodedCode = Base64.getEncoder().encodeToString( DEFAULT_FRAGMENT_SHADER_CODE.getBytes()); String dataUriString = "data:text/plain;base64," + encodedCode; shader.setUri(dataUriString); return shader; }
/** * 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.setUri(newUriString); existingShaderUriStrings.add(newUriString);
/** * 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; }