Fast C++ implementation with JSI binding of MD5 for React Native

react-native-quick-md5

Brazingly fast C++ implementation with JSI binding of MD5 for React Native.

Confirmed that it's 10x faster than using spark-md5 on an iPhone 11 Pro and 8x faster on an Essential Phone. You can check out the benchmark tests under example.

Installation

npm install react-native-quick-md5

Usage

import { stringMd5 } from 'react-native-quick-md5';

const md5 = stringMd5('hoge');
// => "ea703e7aa1efda0064eaa507d9e8ab7e"

stringMd5(data: string): string

Calculate MD5 for given UTF-8 string data. Returns hex encoded hash.

binaryMd5(data: string | ArrayBuffer): string

Calculate MD5 for given binary string or ArrayBuffer data. Returns hex encoded hash.

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

See also

Owner
Takuya Matsuyama
Digital craftsman ╥━━━━━━━━╭━━╮━━┳ ╢╭╮╭━━━━━┫┃▋▋━▅┣ ╢┃╰┫┈┈┈┈┈┃┃┈┈╰┫┣ ╢╰━┫┈┈┈┈┈╰╯╰┳━╯┣ ╢┊┊┃┏┳┳━━┓┏┳┫┊┊┣ ╨━━┗┛┗┛━━┗┛┗┛━━┻
Takuya Matsuyama
Comments
  • g.md5FromArrayBuffer is not a function when debugging

    g.md5FromArrayBuffer is not a function when debugging

    @craftzdog Thanks for the work.

    I'm facing this issue only when the debugger is on

    TypeError: g.md5FromArrayBuffer is not a function
        at stringMd5 (index.bundle?platform=ios&dev=true&minify=false:216502)
        at Object.stringMd5 (index.bundle?platform=ios&dev=true&minify=false:216473)
        at getMd5 (index.bundle?platform=ios&dev=true&minify=false:224107)
        at createIndex$1 (index.bundle?platform=ios&dev=true&minify=false:224110)
        at index.bundle?platform=ios&dev=true&minify=false:223657
        at index.bundle?platform=ios&dev=true&minify=false:223650
        at PouchDB.<anonymous> (index.bundle?platform=ios&dev=true&minify=false:224847)
        at index.bundle?platform=ios&dev=true&minify=false:214578
        at tryCallTwo (index.bundle?platform=ios&dev=true&minify=false:3511)
        at doResolve (index.bundle?platform=ios&dev=true&minify=false:3675)
    
  • Skip initialization when the void pointer is returned

    Skip initialization when the void pointer is returned

    If we run the application in debug mode and then connect the React Native Debugger to the application the javascript holder pointer always returns 0 thus it can't inject the native way of calculating md5. Of course, inside the app, I have to supply it with some polyfill to be able to use the module but this is not the point of this pull request.

  • fix(typescript): fix typescript entry path in package.json

    fix(typescript): fix typescript entry path in package.json

    Path in tsconfig.json refers directly to the entry point "./src/index", so the types in package.json should not have subfolder

    Fix types path in package.json, "types": "lib/typescript/src/index.d.ts" -> "types": "lib/typescript/index.d.ts" fix https://github.com/craftzdog/react-native-quick-md5/issues/4

  • Random crash on first startup on Android

    Random crash on first startup on Android

    Description

    After updating to RN 66.4 (might be unrelated), random crash happens on startup on Android. Works fine on iOS.

    This is very similar of https://github.com/craftzdog/react-native-quick-base64/issues/2

    I'm using Hermes, and these JSI Modules: MMKV, Reanimated.

    I tried the same fix, setting QuickMd5Module to public and adding a public static method install

    QuickMd5Module.java

    public class QuickMd5Module extends ReactContextBaseJavaModule {
      static {
        System.loadLibrary("quickmd5");
      }
    
      private static native void initialize(long jsiPtr, String docDir);
      private static native void destruct();
    
      public QuickMd5Module(ReactApplicationContext reactContext) {
        super(reactContext);
      }
    
      @NonNull
      @Override
      public String getName() {
        return "QuickMd5";
      }
    
      public static void install(JavaScriptContextHolder jsContext, String storageDirectory) {
        initialize(jsContext.get(), storageDirectory);
      }
    
      @Override
      public void onCatalystInstanceDestroy() {
        QuickMd5Module.destruct();
      }
    }
    

    And initialize it right after Mmkv

    public class ExploreAppJSIPackage extends ReanimatedJSIModulePackage {
        @Override
        public List<JSIModuleSpec> getJSIModules(ReactApplicationContext reactApplicationContext, JavaScriptContextHolder jsContext) {
            MmkvModule.install(jsContext, reactApplicationContext.getFilesDir().getAbsolutePath() + "/mmkv");
            QuickMd5Module.install(jsContext, reactApplicationContext.getFilesDir().getAbsolutePath());
            return super.getJSIModules(reactApplicationContext, jsContext);
        }
    

    It works, but I'm not sure if it is the right approach. Maybe it is better to chain inheritance of JSIModulePackage ?

    react-native-quick-md5 Version

    1.0.3

    Crash log

    SIGSEGV

    Build fingerprint: 'HUAWEI/ELE-L29EEA/HWELE:10/HUAWEIELE-L29/10.1.0.150C431:user/release-keys' Revision: '0' ABI: 'arm64' Timestamp: 2022-01-06 12:58:36+0100 pid: 23409, tid: 23455, name: mqt_native_modu >>> fr.pilotelevage.exploreapp.dev <<< uid: 11450 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc Cause: null pointer dereference x0 000000000000000b x1 0000006ecbf1a240 x2 0000000000000001 x3 0000006ecabf0660 x4 0000006ecabf0660 x5 0000006ecabf06f8 x6 0000006ecabf0660 x7 0000006ecabf0660 x8 0000006ec83e1e10 x9 0000000000000002 x10 0000000000000000 x11 00000000fffe000e x12 0000000000000007 x13 0000000000000001 x14 000000001fffffff x15 000000001ffffffe x16 0000000000000003 x17 000000000000004b x18 0000006eca820000 x19 0000006ecabf0660 x20 0000006ecbcf9990 x21 0000006ecbf1a240 x22 0000006ecbf1a250 x23 000000000000004b x24 0000006ecabf3020 x25 0000000000000001 x26 0000006ecabf06e0 x27 0000006ecabf0660 x28 0000006ecabf3020 x29 0000006ecabf0630 sp 0000006ecabf05e0 lr 0000006edaa6473c pc 0000006edaa64758

    backtrace backtrace:
      #00 pc 0000000000064758  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes.so (BuildId: eddee6deb8a97571592812907782e8a8e580c0c8)
      #01 pc 00000000000345b0  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes.so (BuildId: eddee6deb8a97571592812907782e8a8e580c0c8)
      #02 pc 000000000007654c  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes.so (BuildId: eddee6deb8a97571592812907782e8a8e580c0c8)
      #03 pc 000000000002fbb8  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes.so (BuildId: eddee6deb8a97571592812907782e8a8e580c0c8)
      #04 pc 00000000000267b0  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes.so (BuildId: eddee6deb8a97571592812907782e8a8e580c0c8)
      #05 pc 0000000000019388  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes-executor-common-release.so (facebook::jsi::RuntimeDecorator<facebook::jsi::Runtime, facebook::jsi::Runtime>::createFunctionFromHostFunction(facebook::jsi::PropNameID const&, unsigned int, std::__ndk1::function<facebook::jsi::Value (facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)>)+336) (BuildId: 7caed4522e7310108f9e74bcb208e2a45dc8a6b9)
      #06 pc 00000000000187f0  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libhermes-executor-common-release.so (BuildId: 7caed4522e7310108f9e74bcb208e2a45dc8a6b9)
      #07 pc 000000000004c728  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libquickmd5.so (installMd5(facebook::jsi::Runtime&)+184) (BuildId: f684c9a23245ae5864d7eaebbdc3017919b7e9ee)
      #08 pc 000000000004ed0c  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/lib/arm64/libquickmd5.so (Java_com_reactnativequickmd5_QuickMd5Module_initialize+32) (BuildId: f684c9a23245ae5864d7eaebbdc3017919b7e9ee)
      #09 pc 0000000000029ed4  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.odex (art_jni_trampoline+180)
      #10 pc 00000000001455b8  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #11 pc 00000000001541c4  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+284) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #12 pc 00000000002efe68  /apex/com.android.runtime/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+384) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #13 pc 00000000002eb138  /apex/com.android.runtime/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+912) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #14 pc 00000000005c3ec4  /apex/com.android.runtime/lib64/libart.so (MterpInvokeStatic+368) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #15 pc 000000000013f994  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_static+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #16 pc 00000000003c3006  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.reactnativequickmd5.QuickMd5Module.initialize+54)
      #17 pc 00000000005c2e1c  /apex/com.android.runtime/lib64/libart.so (MterpInvokeInterface+1752) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #18 pc 000000000013fa14  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_interface+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #19 pc 00000000002ef768  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.ModuleHolder.doInitialize+92)
      #20 pc 00000000005c39b8  /apex/com.android.runtime/lib64/libart.so (MterpInvokeDirect+1168) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #21 pc 000000000013f914  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #22 pc 00000000002ef84e  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.ModuleHolder.markInitializable+50)
      #23 pc 00000000005c7834  /apex/com.android.runtime/lib64/libart.so (MterpInvokeVirtualQuick+1368) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #24 pc 0000000000143594  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_virtual_quick+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #25 pc 00000000002eff6e  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized+82)
      #26 pc 00000000005c7834  /apex/com.android.runtime/lib64/libart.so (MterpInvokeVirtualQuick+1368) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #27 pc 0000000000143594  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_virtual_quick+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #28 pc 00000000002ea328  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.CatalystInstanceImpl$2.run+12)
      #29 pc 00000000002c0988  /apex/com.android.runtime/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEbb.llvm.10666712087520032524+320) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #30 pc 00000000005b2030  /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1012) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #31 pc 000000000014e468  /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #32 pc 00000000008902fc  /system/framework/arm64/boot-framework.oat (android.os.Handler.dispatchMessage+76) (BuildId: acc2776f7433aa810f2e0b2d5361eeaf578cd2e9)
      #33 pc 0000000000145334  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #34 pc 00000000001541a4  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+252) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #35 pc 00000000002efe68  /apex/com.android.runtime/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+384) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #36 pc 00000000002eb138  /apex/com.android.runtime/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+912) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #37 pc 00000000005c1fb4  /apex/com.android.runtime/lib64/libart.so (MterpInvokeSuper+1532) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #38 pc 000000000013f894  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_super+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #39 pc 00000000002f3b74  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage)
      #40 pc 00000000002c0988  /apex/com.android.runtime/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEbb.llvm.10666712087520032524+320) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #41 pc 00000000005b2030  /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1012) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #42 pc 000000000014e468  /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #43 pc 00000000008939d8  /system/framework/arm64/boot-framework.oat (android.os.Looper.loop+1512) (BuildId: acc2776f7433aa810f2e0b2d5361eeaf578cd2e9)
      #44 pc 00000000001455b8  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_static_stub+568) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #45 pc 00000000001541c4  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+284) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #46 pc 00000000002efe68  /apex/com.android.runtime/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+384) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #47 pc 00000000002eb138  /apex/com.android.runtime/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+912) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #48 pc 00000000005c3ec4  /apex/com.android.runtime/lib64/libart.so (MterpInvokeStatic+368) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #49 pc 000000000013f994  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_static+20) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #50 pc 00000000002f3d02  /data/app/fr.pilotelevage.exploreapp.dev-6hvk-Ap-gvhm1ryUYTvcGg==/oat/arm64/base.vdex (com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run+74)
      #51 pc 00000000002c0988  /apex/com.android.runtime/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEbb.llvm.10666712087520032524+320) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #52 pc 00000000005b2030  /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1012) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #53 pc 000000000014e468  /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #54 pc 0000000000217fc8  /system/framework/arm64/boot.oat (java.lang.Thread.run+72) (BuildId: 98726add5977aa1e5df02f40f7b71a9584dc0b72)
      #55 pc 0000000000145334  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #56 pc 00000000001541a4  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+252) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #57 pc 00000000004d0248  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #58 pc 00000000004d12dc  /apex/com.android.runtime/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue const*)+416) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #59 pc 0000000000513bc8  /apex/com.android.runtime/lib64/libart.so (art::Thread::CreateCallback(void*)+1176) (BuildId: 1a0029abc6bafe71a123b0b3c1a098a0)
      #60 pc 00000000000cf700  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: 0f53a45090c371e49b6824269190f1fa)
      #61 pc 00000000000720e8  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 0f53a45090c371e49b6824269190f1fa)
    
  • Typescript: Declaration file not resolved correctly

    Typescript: Declaration file not resolved correctly

    Description

    IDE can't find type declaration file when using this package image

    Version

    1.0.2

    Snack, code example, screenshot, or link to a repository

    Code example in a md5.ts file

    import { stringMd5 } from "react-native-quick-md5";
    
    export const MD5 = (str: string) => stringMd5(str);
    
    

    Solution

    Fix types path in package.json, "types": "lib/typescript/src/index.d.ts" -> "types": "lib/typescript/index.d.ts" Associated pull request: https://github.com/craftzdog/react-native-quick-md5/pull/3

  • Unable to resolve module react-native-quick-md5

    Unable to resolve module react-native-quick-md5

    Created a new react-native with npx react-native init Awesome --template react-native-template-typescript react native version: 0.68.0 react: 17.0.2 react-native-pouchdb-md5: 7.3.0

    To reproduce: I created a new app, and followed the following link to add react native with pouchdb

    I ended up getting this error upon first start up.

    error: Error: Unable to resolve module react-native-quick-md5 from 
    {projectDirectory}/node_modules/react-native-pouchdb-md5/src/index.ts: react-native-quick-md5 could not be found within the project or in these directories:
      node_modules/react-native-pouchdb-md5/node_modules
      node_modules
      3 |   stringMd5 as nativeStringMd5,
      4 |   // @ts-ignore
    > 5 | } from 'react-native-quick-md5';
        |         ^
      6 | // @ts-ignore
      7 | import NativeFileReaderModule from 'react-native/Libraries/Blob/NativeFileReaderModule.js';
      8 |
    
  • FAILURE: Build failed with an exception.

    FAILURE: Build failed with an exception.

    I encountered this error upon running the command npx react-native run-android:

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':react-native-quick-md5:generateJsonModelDebug'.
    > C:\Users\Naufal\OneDrive\Documents\Binus\IT Division\Project IT Div - Mobile\OnlineHotelBooking\node_modules\react-native-quick-md5\android\CMakeLists.txt : C/C++ debug|armeabi-v7a : CMake Error at C:\Users\Naufal\OneDrive\Documents\Binus\IT Division\Project IT Div - Mobile\OnlineHotelBooking\node_modules\react-native-quick-md5\android\CMakeLists.txt:15 (add_library):
        Syntax error in cmake code when parsing string
    
          C:\Users\Naufal\OneDrive\Documents\Binus\IT Division\Project IT Div - Mobile\OnlineHotelBooking\node_modules/react-native/ReactCommon/jsi/jsi/jsi.cpp
    
        Invalid character escape '\U'.
    
A C++ implementation of Fast Simulation of Mass-Spring Systems
A C++ implementation of Fast Simulation of Mass-Spring Systems

Fast Mass-Spring System Simulator A C++ implementation of Fast Simulation of Mass-Spring Systems [1], rendered with OpenGL. The dynamic inverse proced

Jun 5, 2022
Linux/X11 tool for intercepting mouse events and executing commands. Written in Kotlin Native.

XMG XMG (X11 Mouse Grabber) is a Linux/X11 tool for intercepting mouse button press events and triggering actions. It's a way of making use of the ext

Sep 11, 2021
Android studio native project template using cross platform raylib graphics library.

rayturbo Android studio native project template using cross platform raylib graphics library. https://www.raylib.com/ This project use Android Studio

Mar 5, 2022
Blend text in a HLSL shader and have it look like native DirectWrite

dwrite-hlsl This project demonstrates how to blend text in a HLSL shader and have it look like native DirectWrite. License This project is an extract

May 24, 2022
A fast entity component system (ECS) for C & C++
A fast entity component system (ECS) for C & C++

Flecs is a fast and lightweight Entity Component System with a focus on high performance game development (join the Discord!). Highlights of the frame

Jun 23, 2022
This is a fast module to probing an area in a 2d plane for physic objects

Godot AreaProber 2D Checking for neighbour colliders made easy AreaProber allows you to probe for colliders anywhere in your 2D game's world, no need

Feb 14, 2022
Ipsys Particle System Yey letS go, very cool particle system generator and fast renderer
Ipsys Particle System Yey letS go, very cool particle system generator and fast renderer

ipsys - Ipsys Particle System Yey letS go About Ipsys is a piece of software that focuces on running and displaying cool randomly generated particule

May 26, 2022
Minimal A* implementation in C. No dynamic memory allocation.

Micro A Star Path Finder This is a minimal A* path finder implementation in C, without any dynamic memory allocation. Usage The maximum size of the ma

Jun 11, 2022
An open-source implementation of Autodesk's FBX

SmallFBX An open-source implementation of Autodesk's FBX that is capable of import & export mesh, blend shape, skin, and animations. Mainly intended t

Jun 16, 2022
A C++/DirectX 11 implementation of "A Scalable and Production Ready Sky and Atmosphere Rendering Technique"
A C++/DirectX 11 implementation of

Atmosphere Renderer A C++/DirectX 11 implementation of "A Scalable and Production Ready Sky and Atmosphere Rendering Technique" Features interactive e

Jun 5, 2022
Sandbox for graphics paper implementation
Sandbox for graphics paper implementation

Graphics Experiments 適当にグラフィックス関連の論文などを読んで実装・検証したものを置きます。 I'll randomly put something for implementing/validating graphics papers here. 実装 / Implement

Jun 13, 2022
A heterogeneous OpenCL implementation of AutoDock Vina

Vina-GPU A heterogeneous OpenCL implementation of AutoDock Vina Compiling and Running Note: at least one GPU card is required and make sure the versio

Jun 22, 2022
Implementation of light baking system for ray tracing based on Activision's UberBake

Vulkan Light Bakery MSU Graphics Group Student's Diploma Project Treefonov Andrey [GitHub] [LinkedIn] EARLY STAGES OF DEVELOPMENT Project Goal The goa

May 24, 2022
An implementation of OpenGL 3.x-ish in clean C
An implementation of OpenGL 3.x-ish in clean C

PortableGL "Because of the nature of Moore's law, anything that an extremely clever graphics programmer can do at one point can be replicated by a mer

Jun 16, 2022
Deno gl - WIP Low-level OpenGL (GLFW) bindings and WebGL API implementation for Deno.

deno_gl WIP Low-level OpenGL (GLFW) bindings and WebGL API implementation for Deno. Building Make dist directory if it doesn't exist. Build gl helper

Jun 11, 2022
Implementation of Peter Shirley's Ray Tracing In One Weekend book using Vulkan and NVIDIA's RTX extension.
Implementation of Peter Shirley's Ray Tracing In One Weekend book using Vulkan and NVIDIA's RTX extension.

Ray Tracing In Vulkan My implementation of Peter Shirley's Ray Tracing in One Weekend books using Vulkan and NVIDIA's RTX extension (formerly VK_NV_ra

Jun 15, 2022
Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.

pbrt, Version 3 This repository holds the source code to the version of pbrt that is described in the third edition of Physically Based Rendering: Fro

Jun 22, 2022
A standalone Dear ImGui node graph implementation.
A standalone Dear ImGui node graph implementation.

ImNodes A standalone Dear ImGui node graph implementation. Library provides core features needed to create a node graph, while leaving it to the user

Jun 9, 2022
SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL)

SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL), capable of handling subpixel features seamlessly, and featuring an improved and advanced pattern detection & handling mechanism.

May 31, 2022