Draco is a library for compressing and decompressing 3D geometric meshes and point clouds.

Overview

Build Status

News

Version 1.4.1 release

Version 1.4.0 release

  • WASM and JavaScript decoders are hosted from a static URL.
  • Changed npm modules to use WASM, which increased performance by ~200%.
  • Updated Emscripten to 2.0.
    • This causes the Draco codec modules to return a promise instead of the module directly.
    • Please see the example code on how to handle the promise.
  • Changed NORMAL quantization default to 8.
  • Added new array API to decoder and deprecated DecoderBuffer.
  • Changed WASM/JavaScript behavior of catching exceptions.
  • Code cleanup.
  • Emscripten builds now disable NODEJS_CATCH_EXIT and NODEJS_CATCH_REJECTION.
    • Authors of a CLI tool might want to add their own error handlers.
  • Added Maya plugin builds.
  • Unity plugin builds updated.
  • Bug fixes.

Version 1.3.6 release

  • WASM and JavaScript decoders are now hosted from a static URL
  • Changed web examples to pull Draco decoders from static URL
  • Added new API to Draco WASM decoder, which increased performance by ~15%
  • Decreased Draco WASM decoder size by ~20%
  • Added support for generic and multiple attributes to Draco Unity plug-ins
  • Added new API to Draco Unity, which increased decoder performance by ~15%
  • Changed quantization defaults:
    • POSITION: 11
    • NORMAL: 7
    • TEX_COORD: 10
    • COLOR: 8
    • GENERIC: 8
  • Code cleanup
  • Bug fixes

Version 1.3.5 release

  • Added option to build Draco for Universal Scene Description
  • Code cleanup
  • Bug fixes

Version 1.3.4 release

  • Released Draco Animation code
  • Fixes for Unity
  • Various file location and name changes

Version 1.3.3 release

  • Added ExpertEncoder to the Javascript API
    • Allows developers to set quantization options per attribute id
  • Bug fixes

Version 1.3.2 release

  • Bug fixes

Version 1.3.1 release

  • Fix issue with multiple attributes when skipping an attribute transform

Version 1.3.0 release

  • Improved kD-tree based point cloud encoding
    • Now applicable to point clouds with any number of attributes
    • Support for all integer attribute types and quantized floating point types
  • Improved mesh compression up to 10% (on average ~2%)
    • For meshes, the 1.3.0 bitstream is fully compatible with 1.2.x decoders
  • Improved Javascript API
    • Added support for all signed and unsigned integer types
    • Added support for point clouds to our Javascript encoder API
  • Added support for integer properties to the PLY decoder
  • Bug fixes

Previous releases

https://github.com/google/draco/releases

Description

Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.

Draco was designed and built for compression efficiency and speed. The code supports compressing points, connectivity information, texture coordinates, color information, normals, and any other generic attributes associated with geometry. With Draco, applications using 3D graphics can be significantly smaller without compromising visual fidelity. For users, this means apps can now be downloaded faster, 3D graphics in the browser can load quicker, and VR and AR scenes can now be transmitted with a fraction of the bandwidth and rendered quickly.

Draco is released as C++ source code that can be used to compress 3D graphics as well as C++ and Javascript decoders for the encoded data.

Contents

Building

See BUILDING for building instructions.

Usage

Unity

For the best information about using Unity with Draco please visit https://github.com/atteneder/DracoUnity

For a simple example of using Unity with Draco see README in the unity folder.

WASM and JavaScript Decoders

It is recommended to always pull your Draco WASM and JavaScript decoders from:

https://www.gstatic.com/draco/v1/decoders/

Users will benefit from having the Draco decoder in cache as more sites start using the static URL.

Command Line Applications

The default target created from the build files will be the draco_encoder and draco_decoder command line applications. For both applications, if you run them without any arguments or -h, the applications will output usage and options.

Encoding Tool

draco_encoder will read OBJ or PLY files as input, and output Draco-encoded files. We have included Stanford's Bunny mesh for testing. The basic command line looks like this:

./draco_encoder -i testdata/bun_zipper.ply -o out.drc

A value of 0 for the quantization parameter will not perform any quantization on the specified attribute. Any value other than 0 will quantize the input values for the specified attribute to that number of bits. For example:

./draco_encoder -i testdata/bun_zipper.ply -o out.drc -qp 14

will quantize the positions to 14 bits (default is 11 for the position coordinates).

In general, the more you quantize your attributes the better compression rate you will get. It is up to your project to decide how much deviation it will tolerate. In general, most projects can set quantization values of about 11 without any noticeable difference in quality.

The compression level (-cl) parameter turns on/off different compression features.

./draco_encoder -i testdata/bun_zipper.ply -o out.drc -cl 8

In general, the highest setting, 10, will have the most compression but worst decompression speed. 0 will have the least compression, but best decompression speed. The default setting is 7.

Encoding Point Clouds

You can encode point cloud data with draco_encoder by specifying the -point_cloud parameter. If you specify the -point_cloud parameter with a mesh input file, draco_encoder will ignore the connectivity data and encode the positions from the mesh file.

./draco_encoder -point_cloud -i testdata/bun_zipper.ply -o out.drc

This command line will encode the mesh input as a point cloud, even though the input might not produce compression that is representative of other point clouds. Specifically, one can expect much better compression rates for larger and denser point clouds.

Decoding Tool

draco_decoder will read Draco files as input, and output OBJ or PLY files. The basic command line looks like this:

./draco_decoder -i in.drc -o out.obj

C++ Decoder API

If you'd like to add decoding to your applications you will need to include the draco_dec library. In order to use the Draco decoder you need to initialize a DecoderBuffer with the compressed data. Then call DecodeMeshFromBuffer() to return a decoded mesh object or call DecodePointCloudFromBuffer() to return a decoded PointCloud object. For example:

draco::DecoderBuffer buffer;
buffer.Init(data.data(), data.size());

const draco::EncodedGeometryType geom_type =
    draco::GetEncodedGeometryType(&buffer);
if (geom_type == draco::TRIANGULAR_MESH) {
  unique_ptr mesh = draco::DecodeMeshFromBuffer(&buffer);
} else if (geom_type == draco::POINT_CLOUD) {
  unique_ptr pc = draco::DecodePointCloudFromBuffer(&buffer);
}

Please see src/draco/mesh/mesh.h for the full Mesh class interface and src/draco/point_cloud/point_cloud.h for the full PointCloud class interface.

Javascript Encoder API

The Javascript encoder is located in javascript/draco_encoder.js. The encoder API can be used to compress mesh and point cloud. In order to use the encoder, you need to first create an instance of DracoEncoderModule. Then use this instance to create MeshBuilder and Encoder objects. MeshBuilder is used to construct a mesh from geometry data that could be later compressed by Encoder. First create a mesh object using new encoderModule.Mesh() . Then, use AddFacesToMesh() to add indices to the mesh and use AddFloatAttributeToMesh() to add attribute data to the mesh, e.g. position, normal, color and texture coordinates. After a mesh is constructed, you could then use EncodeMeshToDracoBuffer() to compress the mesh. For example:

const mesh = {
  indices : new Uint32Array(indices),
  vertices : new Float32Array(vertices),
  normals : new Float32Array(normals)
};

const encoderModule = DracoEncoderModule();
const encoder = new encoderModule.Encoder();
const meshBuilder = new encoderModule.MeshBuilder();
const dracoMesh = new encoderModule.Mesh();

const numFaces = mesh.indices.length / 3;
const numPoints = mesh.vertices.length;
meshBuilder.AddFacesToMesh(dracoMesh, numFaces, mesh.indices);

meshBuilder.AddFloatAttributeToMesh(dracoMesh, encoderModule.POSITION,
  numPoints, 3, mesh.vertices);
if (mesh.hasOwnProperty('normals')) {
  meshBuilder.AddFloatAttributeToMesh(
    dracoMesh, encoderModule.NORMAL, numPoints, 3, mesh.normals);
}
if (mesh.hasOwnProperty('colors')) {
  meshBuilder.AddFloatAttributeToMesh(
    dracoMesh, encoderModule.COLOR, numPoints, 3, mesh.colors);
}
if (mesh.hasOwnProperty('texcoords')) {
  meshBuilder.AddFloatAttributeToMesh(
    dracoMesh, encoderModule.TEX_COORD, numPoints, 3, mesh.texcoords);
}

if (method === "edgebreaker") {
  encoder.SetEncodingMethod(encoderModule.MESH_EDGEBREAKER_ENCODING);
} else if (method === "sequential") {
  encoder.SetEncodingMethod(encoderModule.MESH_SEQUENTIAL_ENCODING);
}

const encodedData = new encoderModule.DracoInt8Array();
// Use default encoding setting.
const encodedLen = encoder.EncodeMeshToDracoBuffer(dracoMesh,
                                                   encodedData);
encoderModule.destroy(dracoMesh);
encoderModule.destroy(encoder);
encoderModule.destroy(meshBuilder);

Please see src/draco/javascript/emscripten/draco_web_encoder.idl for the full API.

Javascript Decoder API

The Javascript decoder is located in javascript/draco_decoder.js. The Javascript decoder can decode mesh and point cloud. In order to use the decoder, you must first create an instance of DracoDecoderModule. The instance is then used to create DecoderBuffer and Decoder objects. Set the encoded data in the DecoderBuffer. Then call GetEncodedGeometryType() to identify the type of geometry, e.g. mesh or point cloud. Then call either DecodeBufferToMesh() or DecodeBufferToPointCloud(), which will return a Mesh object or a point cloud. For example:

// Create the Draco decoder.
const decoderModule = DracoDecoderModule();
const buffer = new decoderModule.DecoderBuffer();
buffer.Init(byteArray, byteArray.length);

// Create a buffer to hold the encoded data.
const decoder = new decoderModule.Decoder();
const geometryType = decoder.GetEncodedGeometryType(buffer);

// Decode the encoded geometry.
let outputGeometry;
let status;
if (geometryType == decoderModule.TRIANGULAR_MESH) {
  outputGeometry = new decoderModule.Mesh();
  status = decoder.DecodeBufferToMesh(buffer, outputGeometry);
} else {
  outputGeometry = new decoderModule.PointCloud();
  status = decoder.DecodeBufferToPointCloud(buffer, outputGeometry);
}

// You must explicitly delete objects created from the DracoDecoderModule
// or Decoder.
decoderModule.destroy(outputGeometry);
decoderModule.destroy(decoder);
decoderModule.destroy(buffer);

Please see src/draco/javascript/emscripten/draco_web_decoder.idl for the full API.

Javascript Decoder Performance

The Javascript decoder is built with dynamic memory. This will let the decoder work with all of the compressed data. But this option is not the fastest. Pre-allocating the memory sees about a 2x decoder speed improvement. If you know all of your project's memory requirements, you can turn on static memory by changing CMakeLists.txt accordingly.

Metadata API

Starting from v1.0, Draco provides metadata functionality for encoding data other than geometry. It could be used to encode any custom data along with the geometry. For example, we can enable metadata functionality to encode the name of attributes, name of sub-objects and customized information. For one mesh and point cloud, it can have one top-level geometry metadata class. The top-level metadata then can have hierarchical metadata. Other than that, the top-level metadata can have metadata for each attribute which is called attribute metadata. The attribute metadata should be initialized with the correspondent attribute id within the mesh. The metadata API is provided both in C++ and Javascript. For example, to add metadata in C++:

pos_metadata = std::unique_ptr( new draco::AttributeMetadata(pos_att_id)); pos_metadata->AddEntryString("name", "position"); // Directly add attribute metadata to geometry. // You can do this without explicitly add |GeometryMetadata| to mesh. pc.AddAttributeMetadata(pos_att_id, std::move(pos_metadata)); ">
draco::PointCloud pc;
// Add metadata for the geometry.
std::unique_ptr metadata =
  std::unique_ptr(new draco::GeometryMetadata());
metadata->AddEntryString("description", "This is an example.");
pc.AddMetadata(std::move(metadata));

// Add metadata for attributes.
draco::GeometryAttribute pos_att;
pos_att.Init(draco::GeometryAttribute::POSITION, nullptr, 3,
             draco::DT_FLOAT32, false, 12, 0);
const uint32_t pos_att_id = pc.AddAttribute(pos_att, false, 0);

std::unique_ptr pos_metadata =
    std::unique_ptr(
        new draco::AttributeMetadata(pos_att_id));
pos_metadata->AddEntryString("name", "position");

// Directly add attribute metadata to geometry.
// You can do this without explicitly add |GeometryMetadata| to mesh.
pc.AddAttributeMetadata(pos_att_id, std::move(pos_metadata));

To read metadata from a geometry in C++:

// Get metadata for the geometry.
const draco::GeometryMetadata *pc_metadata = pc.GetMetadata();

// Request metadata for a specific attribute.
const draco::AttributeMetadata *requested_pos_metadata =
  pc.GetAttributeMetadataByStringEntry("name", "position");

Please see src/draco/metadata and src/draco/point_cloud for the full API.

NPM Package

Draco NPM NodeJS package is located in javascript/npm/draco3d. Please see the doc in the folder for detailed usage.

three.js Renderer Example

Here's an example of a geometric compressed with Draco loaded via a Javascript decoder using the three.js renderer.

Please see the javascript/example/README.md file for more information.

Support

For questions/comments please email [email protected]

If you have found an error in this library, please file an issue at https://github.com/google/draco/issues

Patches are encouraged, and may be submitted by forking this project and submitting a pull request through GitHub. See CONTRIBUTING for more detail.

License

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

References

Bunny model from Stanford's graphic department https://graphics.stanford.edu/data/3Dscanrep/

Issues
  • 1.4 release throws RuntimeError in the browser console

    1.4 release throws RuntimeError in the browser console

    Hi,

    Seems like new release broke my 3d viewer that displays Draco compressed files. Anyone else has this issue?

    I'm using https://www.gstatic.com/draco/v1/decoders/* to load *.wasm files.

    Screenshot 2020-12-02 at 14 33 14
    opened by majksner 28
  • Metadata Example: Javascript decoder.

    Metadata Example: Javascript decoder.

    I've an .obj file with multiple sub-objects and an associated .mtl file with texture information. I want to encode it into draco format and then decode again using Javascript decoder (preserving the textures on each component). I assume that with the metadata support in version 1.0.0 this is possible. Can someone provide me an example on how to do this? Or if there are some pointers to make my own DracoLoader to achieve this?

    opened by shubhamagarwal003 23
  • bugfix: attribute NORMAL decoding error in gcc and clang compiler

    bugfix: attribute NORMAL decoding error in gcc and clang compiler

    bugfix: Attribute NORMAL decoding error in gcc and clang compiler: std c lib function int abs(int) can implicitly convert float toint and return an integer, which is not expected as to MSVC compiler.

    opened by HuazyYang 20
  • How to decode generic attributes in Javascript?

    How to decode generic attributes in Javascript?

    I couldn't find any way to do it. Is there any way to search for the custom_id in javascript decoder? I can get the number of vertex attributes but can't iterate over the attributes.

    opened by swomack 18
  • Unity3D bunny.bytes on Resources folder doesn't load

    Unity3D bunny.bytes on Resources folder doesn't load

    Hey there, I imported the unity folder into a new project, places the bunny.drc file into Resources folder under Assets. Renamed bunny to bunny.bytes

    And I'm getting the error:

    Didn't load file!
    UnityEngine.Debug:Log(Object)
    DracoMeshLoader:LoadMeshFromAsset(String, List`1&) (at Assets/unity/DracoMeshLoader.cs:119)
    DracoDecodingObject:Start() (at Assets/unity/DracoDecodingObject.cs:35)
    
    opened by AnaRhisT94 17
  • Feature: Support for encoding Quads

    Feature: Support for encoding Quads

    Below is a simple obj file that represents a single cube.

    mtllib twocubes.mtl
    o Cube2_Cube.001
    v 3.052341 -1.477031 -5.058577
    v 3.052341 -1.477031 -3.058577
    v 1.052340 -1.477031 -3.058577
    v 1.052341 -1.477031 -5.058577
    v 3.052341 0.522969 -5.058576
    v 3.052340 0.522969 -3.058576
    v 1.052340 0.522969 -3.058577
    v 1.052341 0.522969 -5.058577
    vn 0.0000 -1.0000 0.0000
    vn 0.0000 1.0000 0.0000
    vn 1.0000 0.0000 0.0000
    vn -0.0000 -0.0000 1.0000
    vn -1.0000 -0.0000 -0.0000
    vn 0.0000 0.0000 -1.0000
    usemtl Material
    s off
    f 1//1 2//1 3//1 4//1
    f 5//2 8//2 7//2 6//2
    f 1//3 5//3 6//3 2//3
    f 2//4 6//4 7//4 3//4
    f 3//5 7//5 8//5 4//5
    f 5//6 1//6 4//6 8//6
    

    I had it encoded into a drc file (with default encoding settings) and am having them decoded using the Javascript decoder. Some of the numbers am getting don't seem to make sense.

    numFaces = dracoGeometry.num_faces(); //  this returns 6
    numPoints = dracoGeometry.num_points(); // this returns 18
    

    And the resultant geometry ends up being like this image

    It seems impossible to me that encoding would go wrong on a simple model like this. What exactly is the problem then? :-/

    enhancement 
    opened by kappa-gooner 15
  • Comparisons to glTF binary, OpenCTM, etc?

    Comparisons to glTF binary, OpenCTM, etc?

    Nice work. I was on the Brotli guys about the insuitability of their stuff for 3D meshes a while back: https://github.com/google/brotli/issues/165 This seems like a good solution.

    I am interested in the comparision to OpenCTM (quantization + LZMA), glTF's binary format (https://github.com/KhronosGroup/glTF/wiki/Open-3D-Graphics-Compression) and the old Sun Java3D stuff from the late 1995 (http://web.cse.ohio-state.edu/~hwshen/Su01_888/deering.pdf -- which is now just off patent I believe :). I notice you are using the techniques from http://www.cc.gatech.edu/~jarek/papers/EdgeBreaker.pdf

    opened by bhouston 15
  • Possible memory leak in DRACOLoader.js

    Possible memory leak in DRACOLoader.js

    I'm using DRACOLoader.js to load draco files (files holds meshes encoded from .obj files):

    const dracoLoader = new THREE.DRACOLoader('<url-to-gcs-bucket-with warm decoder>');
    dracoLoader.setVerbosity(1);
    dracoLoader.setCrossOrigin('anonymous');
    
    ...
    let mesh = null;
    let scene = null;
    
    // initialize three.js scene
    ...
    
    function loadMesh() {
        dracoLoader.load('<url to drc file>', function(bufferGeometry) {
            const material = new THREE.MeshPhongMaterial({
                        color: 0x996633,
                        specular: 0x050505,
                        shininess: 100
              });
            
              mesh = new THREE.Mesh(bufferGeometry, material);
              scene.add(mesh)
        })
    }
    
    function closeViewer() {
        scene.remove(mesh);
        mesh.geometry.dispose();
    }
    
    

    After having loaded the files, and closing my viewer I never seem to be able to release the memory used to load the files.

    I've tried to NOT add the decoded geometry to my THREE.js scene, just to try to rule out that the problem is with THREE.js. Memory is still not released. I tried to dispose geometry and destroy all the draco objects DRACOLoader.js' convertDracoGeometryTo3JS function:

            convertDracoGeometryTo3JS: function(dracoDecoder, decoder, geometryType,
                                                buffer) {
                if (this.getAttributeOptions('position').skipDequantization === true) {
                   decoder.SkipAttributeTransform(dracoDecoder.POSITION);
                }
                .....
                
                // try to destroy the objects
                dracoDecoder.destroy(posTransform);
                dracoDecoder.destroy(decoder);
                dracoDecoder.destroy(dracoGeometry);
                geometry.dispose();
                return null;
    

    so my thought is that with the above code, the memory should've been released. But from taking a memory snapshot with chrome, I get that more then 1GB of memory is still allocated:

    image

    The draco file is aprox: 6MB with 3295950 verts and 3024128 faces I am using three.js v0.88.0

    opened by simenandresen 14
  • v1/decoders started throwing RuntimeError

    v1/decoders started throwing RuntimeError

    Hello, an existing project started breaking since yesterday with the following error:

    failed to asynchronously prepare wasm: TypeError: WebAssembly.instantiate(): Import #0 module="env" error: module is not 
    an object or function
    
    RuntimeError: abort(TypeError: import object field 'env' is not an Object). Build with -s ASSERTIONS=1 for more info.
    

    Website: https://www.pluto.app/ No code changes have been made in the last 3 months.

    Experienced in:

    • Chrome version 94.0.4606.81 (Official Build) (x86_64)
    • Firefox version 92.0 (64-bit)
    • macOS Catalina version 10.15.7

    Files affected: https://www.gstatic.com/draco/v1/decoders/draco_wasm_wrapper.js https://www.gstatic.com/draco/v1/decoders/draco_decoder.wasm

    opened by ffdead 13
  • documentation confusion for Draco javascript decoder build

    documentation confusion for Draco javascript decoder build

    Hi,

    I've been trying to load 50+ millions points (200MB+) point cloud with DracoLoader for threejs, But it gives me an error on loading: Aborted(). Build with -s ASSERTIONS=1 for more info.

    So I tried to build the decoder, Cloning the emscripten repo, But in your documentation, you have this step: export EMSCRIPTEN=../../emscripten/tools/parent The problem being I do not have this folder on the emscripten repo (I tried multiple version of it but I couldn't find that folder) And when I run make -s ASSERTIONS=1, I can't see any .js files in the build_dir repo.

    So maybe I'm doing something wrong. Forgive me if that's not the right place to ask.

    edit: added some more info

    opened by Gassepouille 12
  • Lossy compression issue ?

    Lossy compression issue ?

    Hello Draco team and thank you for this great work.

    I'm noticing that the compression sometimes happens to output unexpected results : the following image represents the result of a conversion, it has many holes and shifted polys indices.

    compression?

    Is this an identified problem ? Is it always to be expected ? Is there a way to avoid it or to predict it ? Thanks.

    opened by Astrak 11
  • Is the unified_position_quantization option still being worked on?

    Is the unified_position_quantization option still being worked on?

    Is this feature still being worked on? It seems this option only works with the nodejs version with gltf-pipeline by setting --draco.unifiedQuantization true, but it's not available from here yet.

    question 
    opened by DeadlyMagikarps 0
  • OSS-Fuzz issue 49378

    OSS-Fuzz issue 49378

    OSS-Fuzz has found a bug in this project. Please see https://oss-fuzz.com/testcase?key=4544170370400256 for details and reproducers.

    This issue is mirrored from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49378 and will auto-close if the status changes there.

    If you have trouble accessing this report, please file an issue at https://github.com/google/oss-fuzz/issues/new.

    opened by oss-fuzz-robot 0
  • Bump tzinfo from 1.2.5 to 1.2.10 in /docs

    Bump tzinfo from 1.2.5 to 1.2.10 in /docs

    Bumps tzinfo from 1.2.5 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    v1.2.9

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    TZInfo v1.2.9 on RubyGems.org

    v1.2.8

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    TZInfo v1.2.8 on RubyGems.org

    v1.2.7

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    TZInfo v1.2.7 on RubyGems.org

    v1.2.6

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.

    TZInfo v1.2.6 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Version 1.2.9 - 16-Dec-2020

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    Version 1.2.8 - 8-Nov-2020

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    Version 1.2.7 - 2-Apr-2020

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    Version 1.2.6 - 24-Dec-2019

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.
    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • open3d compatibility for mesh compression

    open3d compatibility for mesh compression

    Hi, I am trying to compress a mesh model created using open3d. I see the open3d mesh is not directly compatible with draco expected format. Did anyone try this already?

    There is an issue on Open3d repo here: https://github.com/isl-org/Open3D/issues/844, but it seems it is not complete.

    opened by mdasari823 0
  • OSS-Fuzz issue 48982

    OSS-Fuzz issue 48982

    OSS-Fuzz has found a bug in this project. Please see https://oss-fuzz.com/testcase?key=5478903656873984 for details and reproducers.

    This issue is mirrored from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=48982 and will auto-close if the status changes there.

    If you have trouble accessing this report, please file an issue at https://github.com/google/oss-fuzz/issues/new.

    opened by oss-fuzz-robot 0
  • OSS-Fuzz issue 48975

    OSS-Fuzz issue 48975

    OSS-Fuzz has found a bug in this project. Please see https://oss-fuzz.com/testcase?key=6332513240350720 for details and reproducers.

    This issue is mirrored from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=48975 and will auto-close if the status changes there.

    If you have trouble accessing this report, please file an issue at https://github.com/google/oss-fuzz/issues/new.

    opened by oss-fuzz-robot 0
Releases(1.5.3)
  • 1.5.3(Jul 7, 2022)

    • Using the versioned www.gstatic.com WASM and Javascript decoders continues to be recommended. To use v1.5.3, use this URL:
      • https://www.gstatic.com/draco/versioned/decoders/1.5.3/*
    • Bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • 1.5.2(Feb 17, 2022)

  • 1.5.1(Feb 16, 2022)

    • Adds assertion enabled Emscripten builds to the release, and a subset of the assertion enabled builds to GStatic. See the file listing below.
    • Custom paths to third party dependencies are now supported. See BUILDING.md for more information.
    • The CMake configuration file draco-config.cmake is now tested and known to work for using Draco in Linux, MacOS, and Windows CMake projects. See the install_test subdirectory of src/draco/tools for more information.
    • Bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Dec 9, 2021)

    Version 1.5.0 release

    • Adds the draco_transcoder tool. See the section below on the glTF transcoding tool, and BUILDING.md for build and dependency information.
    • Some changes to configuration variables have been made for this release:
      • The DRACO_GLTF flag has been renamed to DRACO_GLTF_BITSTREAM to help increase understanding of its purpose, which is to limit Draco features to those included in the Draco glTF specification.
      • Variables exported in CMake via draco-config.cmake and find-draco.cmake (formerly FindDraco.cmake) have been renamed. It's unlikely that this impacts any existing projects as the aforementioned files were not formed correctly. See PR775 for full details of the changes.
    • A CMake version file has been added.
    • The CMake install target now uses absolute paths direct from CMake instead of building them using CMAKE_INSTALL_PREFIX. This was done to make Draco easier to use for downstream packagers and should have little to no impact on users picking up Draco from source.
    • Certain MSVC warnings have had their levels changed via compiler flag to reduce the amount of noise output by the MSVC compilers. Set MSVC warning level to 4, or define DRACO_DEBUG_MSVC_WARNINGS at CMake configuration time to restore previous behavior.
    • Bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • 1.4.3(Oct 12, 2021)

    Version 1.4.3 release

    • Using the versioned www.gstatic.com WASM and Javascript decoders continues to be recommended. To use v1.4.3, use this URL:
      • https://www.gstatic.com/draco/versioned/decoders/1.4.3/*
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Dec 8, 2020)

    Version 1.4.1 release

    • Using the versioned gstatic.com WASM and Javascript decoders is now recommended. To use v1.4.1, use this URL:
      • https://www.gstatic.com/draco/versioned/decoders/1.4.1/*
        • Replace the * with the files to load. E.g.
        • https://gstatic.com/draco/versioned/decoders/1.4.1/draco_decoder.js
      • This works with the v1.3.6 and v1.4.0 releases, and will work with future Draco releases.
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Dec 1, 2020)

    Version 1.4.0 release

    • WASM and JavaScript decoders are hosted from a static URL.
      • It is recommended to always pull your Draco WASM and JavaScript decoders from this URL:
      • https://www.gstatic.com/draco/v1/decoders/*
        • Replace * with the files to load. E.g.
        • https://www.gstatic.com/draco/v1/decoders/draco_decoder_gltf.wasm
      • Users will benefit from having the Draco decoder in cache as more sites start using the static URL
    • Changed npm modules to use WASM, which increased performance by ~200%.
    • Updated Emscripten to 2.0.
      • This causes the Draco codec modules to return a promise instead of the module directly.
      • Please see the example code on how to handle the promise.
    • Changed NORMAL quantization default to 8.
    • Added new array API to decoder and deprecated DecoderBuffer.
      • See PR https://github.com/google/draco/issues/513 for more information.
    • Changed WASM/JavaScript behavior of catching exceptions.
      • See issue https://github.com/google/draco/issues/629 for more information.
    • Code cleanup.
    • Emscripten builds now disable NODEJS_CATCH_EXIT and NODEJS_CATCH_REJECTION.
      • Authors of a CLI tool might want to add their own error handlers.
    • Added Maya plugin builds.
    • Unity plugin builds updated.
      • Builds are now stored as archives.
      • Added iOS build.
      • Unity users may want to look into https://github.com/atteneder/DracoUnity.
    • Bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • 1.3.6(Mar 3, 2020)

    Version 1.3.6 release

    • WASM and JavaScript decoders are now hosted from a static URL
      • It is recommended to always pull your Draco WASM and JavaScript decoders from this URL:
      • https://www.gstatic.com/draco/v1/decoders/
      • Users will benefit from having the Draco decoder in cache as more sites start using the static URL
    • Changed web examples to pull Draco decoders from static URL
    • Added new API to Draco WASM decoder, which increased performance by ~15%
    • Decreased Draco WASM decoder size by ~20%
    • Added support for generic and multiple attributes to Draco Unity plug-ins
    • Added new API to Draco Unity, which increased decoder performance by ~15%
    • Changed quantization defaults:
      • POSITION: 11
      • NORMAL: 7
      • TEX_COORD: 10
      • COLOR: 8
      • GENERIC: 8
    • Code cleanup
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.3.5(Jan 31, 2019)

  • 1.3.4(Aug 17, 2018)

  • 1.3.3(Jun 15, 2018)

  • 1.3.2(Jun 6, 2018)

  • 1.3.1(May 2, 2018)

  • 1.3.0(Apr 24, 2018)

    Version 1.3.0 release

    • Improved kD-tree based point cloud encoding
      • Now applicable to point clouds with any number of attributes
      • Support for all integer attribute types and quantized floating point types
    • Improved mesh compression up to 10% (on average ~2%)
      • For meshes, the 1.3.0 bitstream is fully compatible with 1.2.x decoders
    • Improved Javascript API
      • Added support for all signed and unsigned integer types
      • Added support for point clouds to our Javascript encoder API
    • Added support for integer properties to the PLY decoder
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.2.5(Jan 12, 2018)

  • 1.2.4(Dec 13, 2017)

    Version 1.2.4 release

    • Up to 20% faster decoding
    • Added support for integer attributes to our Javascript Encoder
    • Fixed issues with THREE.DracoLoader not releasing memory associated with the Draco module
    • OBJ decoder can now be used to parse pure point clouds
    • Added Unity plugins to support runtime loading and design-time importing of encoded Draco files
    Source code(tar.gz)
    Source code(zip)
  • 1.2.2(Nov 16, 2017)

  • 1.2.1(Nov 13, 2017)

    Version 1.2.1 release

    The latest version of Draco brings a number of enhancements to reduce decoder size and various other fixes

    • Javascript and WebAssembly decoder size reduced by 35%
    • Added specialized Javascript and Webassembly decoders for GLTF (size reduction about 50% compared to the previous version)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Oct 24, 2017)

    Version 1.2.0 release

    The latest version of Draco brings a number of new compression enhancements and readies Draco for glTF 2.0 assets

    • Improved compression:
      • 5% improved compression for small assets
    • Enhancements for upcoming Draco glTF2.0 extension
    • Fixed Android build issues
    • New, easier to use DRACOLoader.js
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Sep 11, 2017)

    Version 1.1.0 release

    The latest version of Draco brings a number of new compression enhancements for even smaller models:

    • Improved compression
      • Up to 40% better compression of normals
      • Up to 5% better compression for models with multiple attributes
    • Faster decode speeds
      • 30% faster decoding for models with multiple attributes for lower compression levels 4 and below
        • Note: Decreases compression by 10%.
    • Encoding of metadata to .obj (e.g. Draco can preserve material or sub-object names)
    • Security fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Jul 28, 2017)

    Version 1.0.0 release

    The latest version of Draco brings many new enhancements to improve the development experience:

    • Stable API release
    • Support for npm Javascript package management
    • Javascript based encoder
    • Generalized metadata for meshes and point clouds
      • Now supporting material properties included along with encoded file
    • Improved compression rates:
      • 15% better compression on smaller models
      • 40% better compression of normals
    • Performance improvements (~10% faster encoding, decoding)
    • Reduced GPU memory usage:
      • Option to store decoded quantized attributes
      • Support for triangle strip connectivity on decoded meshes
    • iOS 9 Javascript decoder
    • Bitstream specification now available
    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Jul 28, 2017)

    Version 0.10.0 released

    This release brings improved mesh compression and faster decoding in browser:

    • On average 10% better compression of triangular meshes (up to 20% for purely spatial meshes without any extra attributes).
    • Up to 2X faster decoding in browsers with our newly provided WebAssembly decoder.
      • Supported in most modern browsers including Chrome, Firefox, and Edge.
      • Decoder size is about 50% smaller compared to the javascript version.
    • New version is backward compatible with 0.9.x encoders.
      • Note that 0.10.0 is not forward compatible, i.e., files encoded with 0.10.0 cannot be decoded with 0.9.x decoders.
    Source code(tar.gz)
    Source code(zip)
Owner
Google
Google ❤️ Open Source
Google
A simple single point light shadow mapping with OpenGL 3.3 and C++

omni-directional-light-example Using OpenGL 3.3 with C++ Basically a single light map, no lighting model was used Usage Build the executable outside A

Mohammad Issawi 4 Feb 10, 2022
Simple OpenGL program to visualize point cloud.

Point Cloud Viewer Simple OpenGL program to visualize point cloud. The input data files should be plain text files. screenshot on Linux: screenshot on

Tang.Anke 3 May 31, 2022
Phyxed is a 2D physics engine with support for fixed point math.

Phyxed is a 2D physics engine with support for fixed point math.

Anders Elfgren 23 Jul 10, 2022
ANSI C library for NURBS, B-Splines, and Bézier curves with interfaces for C++, C#, D, Go, Java, Lua, Octave, PHP, Python, R, and Ruby.

TinySpline TinySpline is a small, yet powerful library for interpolating, transforming, and querying arbitrary NURBS, B-Splines, and Bézier curves. Th

Marcel Steinbeck 807 Jul 30, 2022
StereoKit is an easy-to-use open source mixed reality library for building HoloLens and VR applications with C# and OpenXR!

StereoKit is an easy-to-use open source mixed reality library for building HoloLens and VR applications with C# and OpenXR! Inspired by libraries like XNA and Processing, StereoKit is meant to be fun to use and easy to develop with, yet still quite capable of creating professional and business ready software.

Nick Klingensmith 662 Jul 29, 2022
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

null 2k Aug 7, 2022
DirectX 11 and 12 library that provides a scalable and GCN-optimized solution for deferred shadow filtering

AMD ShadowFX The ShadowFX library provides a scalable and GCN-optimized solution for deferred shadow filtering. Currently the library supports uniform

GPUOpen Effects 165 Jul 13, 2022
The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure.

Open Asset Import Library (assimp) A library to import and export various 3d-model-formats including scene-post-processing to generate missing render

Open Asset Import Library 8.1k Aug 7, 2022
A modern cross-platform low-level graphics library and rendering framework

Diligent Engine A Modern Cross-Platform Low-Level 3D Graphics Library Diligent Engine is a lightweight cross-platform graphics API abstraction library

Diligent Graphics 2.4k Aug 1, 2022
A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

GLFW 9.4k Aug 6, 2022
Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

Low Level Graphics Library (LLGL) Documentation NOTE: This repository receives bug fixes only, but no major updates. Pull requests may still be accept

Lukas Hermanns 1.4k Aug 1, 2022
Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.

This project is not actively maintained. NanoVG NanoVG is small antialiased vector graphics rendering library for OpenGL. It has lean API modeled afte

Mikko Mononen 4.4k Jul 31, 2022
Freecell Solver - a C library for automatically solving Freecell and some other variants of card Solitaire

The Freecell Solver Repository Root README Freecell Solver is an open source (distributed under the MIT/Expat licence) library, written in C, for atte

Shlomi Fish 49 Jun 24, 2022
Pure C math library for 2D and 3D programming

MATHC MATHC is a simple math library for 2D and 3D programming. Features Vectors (2D, 3D and 4D) (integer type and floating-point type) Quaternions Ma

Felipe da Silva 600 Jul 27, 2022
A terminal-based graphics library for both 2D and 3D graphics.

TermGL A terminal-based graphics library for both 2D and 3D graphics. Written in C, created for terminals supporting ANSI escape codes. Table of Conte

null 203 Jul 15, 2022
A minimalist library with basic facilities for developing interactive real-time 3D applications, with a strong emphasis on simplicity and ease of use.

SlimEngine A minimalist and platform-agnostic base project for interactive graphical applications (2D/3D) with a strong emphasis on simplicity, ease o

Arnon Marcus 67 Jul 27, 2022
OpenCorr is an open source C++ library for development of 2D, 3D/stereo, and volumetric digital image correlation

OpenCorr OpenCorr is an open source C++ library for development of 2D, 3D/stereo, and volumetric digital image correlation. It aims to provide a devel

Zhenyu Jiang 53 Jul 30, 2022
Open source Altium Database Library with over 147,000 high quality components and full 3d models.

Open source Altium Database Library with over 147,000 high quality components and full 3d models.

Mark 1.2k Jul 27, 2022