Giter Site home page Giter Site logo

auburnsounds / dplug Goto Github PK

View Code? Open in Web Editor NEW
476.0 476.0 32.0 34.51 MB

Audio plugin framework. VST2/VST3/AU/AAX/LV2 for Linux/macOS/Windows.

Home Page: https://dplug.org/

License: Other

D 99.34% HTML 0.18% JavaScript 0.22% Wren 0.13% Rez 0.13%
aax audio-library audio-plugin audio-processing audio-unit dsp flstudio lv2 pbr-shading physically-based-rendering vst vst3

dplug's People

Contributors

0xeab avatar abaga129 avatar aminya avatar andrejmitrovic avatar detomastah avatar drug007 avatar gedaiu avatar ibara avatar jpcima avatar klknn avatar lunathefoxgirl avatar mickaelistria avatar mrsmith33 avatar nilsding avatar p0nce avatar rikkimax avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dplug's Issues

Screen space reflection

Would be cool.
It requires a separate buffer and pass for reflections, the problem is that the reflection pass would have to be full GUI all the time, so very slow.

Audio concept

Concept for buffers and processors, or both at once.

Started as dplug:audio (nothing depends on it for now). It's not easy.

Overdraw

Easy to reproduce with automation. Background is not redrawn but control is redrawn.
overdraw

Seen in at least Cubase / FLStudio / Orion

Fix license

Boost + IPlug license should be used in a per-file basis

VST: FLStudio problems when bridged

These problems are only with bridged plugins:

  • connection lost with plugin: leads to the plugin being reopened, but no redraw / dirtying
  • redraw does not work well when other window are invalidating an area

UI depth maps

Because shadows are desirable and baking them takes huge space, it would be desirable to have sort of a SSAO effect software renderered. So far a solution with a 8-bit depth map would be winning. This needs multiple render buffers and a deffered pass for SSAO (and another for lights?). All this requires lazy UI updates for elements and z-order.

Chunks

Useful for versionned parameters

Faster rendering performance

Measurements based on rendering 2 bargraphs

Do nothing => 3.5ms
AO => 11ms
cast shadows => 5ms
secundary light => 1ms
specular => 2.5ms
skybox => 10ms
emissive => 20ms
Total => 58ms

Some things are very expensive, eg: a sqrt() cost 1ms.

Race in text rendering

Now that UIElement render concurrently, it creates problems when sharing something like a Font.

  • either make Font thread-safe
  • or find something else

Building with a good codegen on Windows

This won't be easy.

Windows

Assertion failed: !(Pair.first != Ty && Pair.second == Ty) && "mapping to a sour
ce type", file D:\Temp\LDC-BUILD\src\llvm-3.6.0.src\lib\Linker\LinkModules.cpp,
line 265
  • LDC with 32-bit target => also an ICE
Error: 0x7536F1AB (0x0028FABC 0x0119070D 0x00000000 0x0028FBF0), tolower() + 0x2
B bytes(s)
0x7536FA44 (0x1AD22330 0x00000080 0x0119070D 0x00000000), _vsnprintf_l() + 0x54
bytes(s)
0x7536F9D8 (0x1AD22330 0x00000080 0x0119070D 0x0028FBF0), _vsnprintf() + 0x18 by
tes(s)
0x0042F599 (0x00000000 0x0195FA20 0x778A9950 0x0028FD70)
0x778A1EAA (0x0028FD0C 0x0028FD22 0x0028FD8C 0x6275642E), RtlFreeHeap() + 0x1BA
bytes(s)
0x7536B197 (0x00000023 0x0195FA20 0x0028FD60 0x778B47C4), malloc() + 0x57 bytes(
s)
0x6FC8A669 (0x1AABF6B0 0x1B15A8E8 0x1AABF6BC 0x6FC89FE7), _ZNSs4_Rep9_S_createEj
jRKSaIcE() + 0x59 bytes(s)
0x778B47C4 (0x1B15A8E8 0x1B15A8FE 0x0028FE1C 0x1B15A8E8), RtlFreeUnicodeString()
 + 0x34 bytes(s)
0x6FC8BAE7 (0x0DF25D68 0x0028FE14 0x0028FE03 0x00000000), _ZNSsC1EPKcRKSaIcE() +
 0x37 bytes(s)
0x01144E0B (0x00032A80 0x00000056 0x00000002 0x004013DE)
0x004013DE (0x7FFDE000 0x75237BE0 0x2B77CE40 0x0028FFDC)
0x75237C04 (0x7FFDE000 0x29D3E292 0x00000000 0x00000000), BaseThreadInitThunk()
+ 0x24 bytes(s)
0x778BAD1F (0xFFFFFFFF 0x778A0240 0x00000000 0x00000000), RtlInitializeException
Chain() + 0x8F bytes(s)
0x778BACEA (0x004014E0 0x7FFDE000 0x00000000 0x78746341), RtlInitializeException
Chain() + 0x5A bytes(s)
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x12): undefined reference to `_tlsstart'
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x1a): undefined reference to `_tlsend'
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x21): undefined reference to `_tls_callbacks_a'

Windows VST hosts compatibility

Current Status

  • Orion: OK
  • VSTHost: OK in 32 and 64-bit, crash at the end though (EDIT: only sometimes)
  • Reaper: OK in 32 and 64-bit, even when bridged
  • Live: looks OK
  • Audacity (Windows): OK in 32-bit (does not seem to be available in 64-bit)
  • Savihost: OK in 32-bit and 64-bit
  • Presonus Studio One: OK in 32-bit and 64-bit
  • Bitwig: One issue #33 OK in 32-bit
  • Fruity Loops: issues when bridged #43, OK in 32-bit and 64-bit otherwise
  • BlueCat Patchwork:
    • VST 32-bit hosting VST 32-bit: OK
    • VST 64-bit hosting VST 64-bit: OK
  • Cubase: OK, 32-bit and 64-bit

TODO: Samplitude, Sonar, and other VST hosts first

Separate color bleed and AO

4th component in depth map could be "emissive strenght", to be looked at for color bleed. Allows many lights. there is no reasons low-depth widgets don't color bleed on high-depth things.
Make bleed multiscale and multiply it by the emissive factor.

AO could look more like textbook SSAO and be color-less. Currently high

Are spinlock really worth it?

Critical sections / mutexes usually have a lock-free part if no contention, and that is as fast as a spin-lock. If the lock is taken, then we'd better pause the thread than spin all that time.

Maybe synchronized can help in staying @nogc.

Problems with dirty state being a single rectangle

The dirty rect of toplevel element expands when a widget is dirty.
The problem is that some of the area isn't redrawn, so some widget may flicker and be erased by toplevel redraw.

Solution:

  • maybe make the dirty state a rectangle list
  • maybe have every UIElement have an intermediate output buffer (meh)

Support parameter changes

For now the parameters are declared, but there is no way to know if they have changed in the audio callback.

Presets

  • Need a preset class which contain all parameters in float form.
  • Number of preset is set upront on plugin creation, strange.
  • Multiple output/input format to be expected: better let the presets be in memory as is.

PBR rendering

Remove shininess and implement roughness and metalness as documented on the Internet, especially UE4.
Get interested in PBR and see what can be done.
Rename diffuse into "albedo" which is the same concept in PBR.
Define defaults albedo colors from UE4 documentation.
Same for metals and materials.

Not scheduled because with envmap metals are metal enough.

@nogc dplug:dsp

For use in audio callbacks.
Including initializations and resets.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.