OPENRNDR. A Kotlin/JVM library for creative coding, real-time and interactive graphics

Overview

OPENRNDR 0.4

Download Build status

A Kotlin/JVM and Kotlin/JS library for creative coding, real-time and interactive graphics. Can currently be used on Windows, macOS and Linux/x64 to create standalone graphical applications.

Basics and use are further explained in the OPENRNDR guide.

Repository structure

module description
openrndr-animatable Tooling for interactive animations
openrndr-application Application and Program classes
openrndr-binpack Binpacking algorithm used for texture atlasses
openrndr-color Color spaces
openrndr-dds DirectDraw Surface file (.dds) loader
openrndr-demos A collection of small in-repository demos
openrndr-draw Drawing primitives
openrndr-event Event classes
openrndr-extensions Built-in OPENRNDR extensions
openrndr-filter Built-in filters
openrndr-js Kotlin/JS specific modules
openrndr-jvm Kotlin/JVM specific modules
openrndr-math Math functions and classes
openrndr-nullgl Mock graphics back-end
openrndr-shape Classes and functions for working with 2D shapes
openrndr-svg Loading and saving SVG
openrndr-utils Assorted utilities

Using OPENRNDR

You are advised to use the OPENRNDR template which provides a quick start to using the library.

OPENRNDR's Javascript/WebGL is still experimental and under development. However, if you feel like trying it you should use the OPENRNDR JS template.

Building OPENRNDR

On a system that has JDK 1.8.x or more recent installed one can run the following commands from a terminal:

cd <path-to-checkout>
./gradlew build

This should start the build process, which will take some time to complete.

Note that OPENRNDR does not depend on anything that is not on Maven Central, builds should be easy and predictable.

Installing OPENRNDR as Maven artifacts

In order to use the OPENRNDR build from your applications one has to install OPENRNDR's Maven artifacts in the local Maven repository.

./gradlew -Prelease.version=0.5.1-SNAPSHOT publishToMavenLocal

Community

Visit the OPENRNDR website for the latest news on OPENRNDR, showcases and events

Join us on the OPENRNDR forum for questions, tutorials and showcases.

Reach us more directly on the OPENRNDR Slack.

Comments
  • Color manipulation

    Color manipulation

    Hello !

    When working with color on others langs like JS or Dart you'll find some libraries like

    • https://gka.github.io/chroma.js
    • https://github.com/bgrins/TinyColor

    I'm looking for an equivalent or recommandation when working with OpenRNDR.

    Regards

    enhancement question 
    opened by Solido 19
  • add feature DrawRate

    add feature DrawRate

    Feature Drawrate() is an extension that allows finer control of the draw loop between the extremes of AUTOMATIC and MANUAL presentation modes.

    This is under active development. It currently works for the base general case i.e. DRAWRATE and one special case viz. MINIMISE.

    The ffg. key issues still need discussion/resolution.

    • The context of the coroutine. (program.launch is problematic and GlobalScope.launch is not recommended.)
    • Special Case UNFOCUS. (use case needs detailing)
    • Special Case SIZE. (use case needs detailing)

    (@edwinRNDR Do you want me to initiate this discussion on the Slack-Development Channel or here?)

    I will attach some documentation and example code to this PR for now (it will be the basis of what goes into the Guide when Dokgen becomes available to collaborators!)

    P.S. This requires v0.3.31 at minimum.

    opened by CodeCox 13
  • Creating a ShapeContour .offset() may produce a first segment with NaN value

    Creating a ShapeContour .offset() may produce a first segment with NaN value

    Describe the bug Calling .offset() on a ShapeContour produces an invalid curve in some cases

    To Reproduce

        program {
    
            val curve = contour {
                moveTo(Vector2(0.1 * width, 0.3 * height))
                continueTo(Vector2(0.5 * width, 0.5 * height))
                continueTo(Vector2(0.9 * width, 0.3 * height))
                continueTo(Vector2(0.1 * width, 0.3 * height))
                close()
            }
    
            val curve2 = curve.offset(20.0, SegmentJoin.ROUND)
    
            println(curve2.segments[0])
            println(curve2.segments[1])
            println(curve2.segments[curve2.segments.size-2])
            println(curve2.segments[curve2.segments.size-1])
    
            extend {
                drawer.contour(curve)
                drawer.contour(curve2) // <-- crash
    
                drawer.fill = null
                drawer.rectangle(curve.bounds)
                drawer.rectangle(curve2.bounds)
            }
        }
    

    Expected behavior Drawing two offset curves.

    Output

    Segment(start=Vector2(x=NaN, y=NaN), end=Vector2(x=111.05572809000084, y=227.88854381999832), control=[Vector2(x=NaN, y=NaN), Vector2(x=NaN, y=NaN)])
    Segment(start=Vector2(x=111.05572809000084, y=227.88854381999832), end=Vector2(x=291.05572809000085, y=317.8885438199983), control=[Vector2(x=168.94427190999915, y=212.11145618000168), Vector2(x=228.94427190999915, y=242.11145618000168)])
    Segment(start=Vector2(x=55.87973916815717, y=159.7054959036708), end=Vector2(x=53.47067495099499, y=160.90549399722113), control=[Vector2(x=55.07772582253885, y=160.10448872737393), Vector2(x=54.2747044156394, y=160.50448808867085)])
    Segment(start=Vector2(x=53.47067495099499, y=160.90549399722113), end=Vector2(x=51.05572809000071, y=162.11145618000174), control=[Vector2(x=52.66670065119528, y=161.30647490590087), Vector2(x=51.86171836303135, y=161.70846229698998)])
    

    Context:

    • OS and version: ArchLinux
    • OpenRNDR version 0.4.0
    • Java Version 11
    bug 
    opened by hamoid 11
  • Let the user specify which monitor OPENRNDR uses

    Let the user specify which monitor OPENRNDR uses

    This is a bit trickier than I first assumed. It's a complicated feature to test so I will initially be publishing this PR as a draft until I'm more confident it can handle all the edge cases. Fixes #113. Fixes #304.

    opened by Vechro 10
  • Variable color elements; Vector defaults

    Variable color elements; Vector defaults

    Small improvements proposal.

    I find myself having to do some copying around to apply changes on a color property/channel.

    The defaults on the vectors is just some glsl-like syntactic sugar.

    opened by ricardomatias 10
  • Text appears blurred

    Text appears blurred

    Describe the bug Text appears blurrier than the characters in the font texture buffer

    To Reproduce

    import org.openrndr.KEY_ARROW_DOWN
    import org.openrndr.KEY_ARROW_UP
    import org.openrndr.application
    import org.openrndr.draw.loadFont
    import org.openrndr.draw.shadeStyle
    
    fun main() = application {
        var fontSz = 8.4
        configure {
            width = 768
            height = 576
        }
    
        program {
            // Here the font: https://www.dafont.com/silkscreen.font
            var font = loadFont(
                "file:/home/funpro/src/OR/openrndr-template/data/fonts/slkscr.ttf",
                fontSz
            )
    
            extend {
                drawer.shadeStyle = shadeStyle {
                    fragmentTransform = """x_fill.gb = vec2(x_fill.r);"""
                }
                drawer.image(font.texture)
                drawer.fontMap = font
                drawer.text("Hello there! #tags @mentions then 3+4*5-6/7...", mouse.position)
            }
    
            fun changeFontSize(inc: Double) {
                fontSz += inc
                font = loadFont(
                    "file:/home/funpro/src/OR/openrndr-template/data/fonts/slkscr.ttf",
                    fontSz
                )
                println(fontSz)
            }
    
            keyboard.keyDown.listen {
                if (it.key == KEY_ARROW_UP) {
                    changeFontSize(0.01)
                }
                if (it.key == KEY_ARROW_DOWN) {
                    changeFontSize(-0.01)
                }
            }
        }
    }
    

    Expected behavior Text should appear as sharp as in the font texture (shown in the image as a grid) but it actually looks quite different.

    Screenshots 2021-01-02-182536_391x326_scrot (scaled to 300% without interpolation, click to observe the difference)

    Context:

    • Ubuntu 20.04, GTX1060, Nvidia driver
    • OpenRNDR from git
    • Java Version unknown
    bug 
    opened by hamoid 9
  • Fix scaling when using withTarget() and isolatedWithTarget()

    Fix scaling when using withTarget() and isolatedWithTarget()

    If the render target's size was different to the application, the scaling would be incorrect because the projection matrix wasn't adjusted for the render target's size. This should fix that and restore the original matrix when done.

    opened by Syngeo 9
  • mouse.position.y contains fractional values when using i3wm

    mouse.position.y contains fractional values when using i3wm

    Describe the bug mouse.position.y contains fractional values. It seems to be calculated against an off-by-one screen height value. The .x value contains whole numbers as expected.

    To Reproduce print mouse.position.y while moving the mouse

    Expected behavior I expected the y value to also be whole numbers

    Screenshots See the .y value at the bottom of https://user-images.githubusercontent.com/108264/103518935-e8923180-4e74-11eb-880e-46e5df667438.png

    Context:

    • Ubuntu 20.04, Nvidia drivers
    • OpenRNDR from git
    opened by hamoid 8
  • IllegalArgumentException when using ScreenRecorder

    IllegalArgumentException when using ScreenRecorder

    Describe the bug A program fails to start with an IllegalArgumentException when the app is extended with ScreenRecorder with some window sizes.

    To Reproduce Here is a small snippet of code:

    class Demo : Program() {
        override fun setup() {
            extend(ScreenRecorder().apply {
                frameRate = 10
            })
    
            extend(FunctionDrawer {
                drawer.circle(width / 2.0, height / 2.0, 10.0)
            })
        }
    }
    
    fun main(args: Array<String>) {
        application(
                Demo(),
                configuration {
                    width = 800
                    height = 600
                    showBeforeSetup = false
                    hideCursor = true
                }
        )
    }
    

    If one starts it without modifications, the exception is given:

    Exception in thread "main" java.lang.IllegalArgumentException: width (800) and height (599) should be divisible by 2
    	at org.openrndr.ffmpeg.VideoWriter.size(VideoWriter.kt:150)
    	at org.openrndr.ffmpeg.ScreenRecorder.setup(ScreenRecorder.kt:38)
    	at org.openrndr.Program.extend(Program.kt:211)
    	at Demo.setup(Posters.kt:9)
    	at org.openrndr.internal.gl3.ApplicationGLFWGL3.loop(ApplicationGLFWGL3.kt:434)
    	at org.openrndr.Application$Companion.run(Application.kt:18)
    	at org.openrndr.ApplicationKt.application(Application.kt:56)
    	at PostersKt.main(Posters.kt:20)
    

    To fix that one can set height to 601 or disable the ScreenRecorder.

    Expected behavior A black window with a small circle in a center

    Context: OS:

    $ cat /etc/lsb-release
    DISTRIB_ID=ManjaroLinux
    DISTRIB_RELEASE=18.0.0-rc
    DISTRIB_CODENAME=Illyria
    DISTRIB_DESCRIPTION="Manjaro Linux"
    

    OpenRNDR:

    0.3.27

    Java:

    $ java -version
    openjdk version "1.8.0_181"
    OpenJDK Runtime Environment (build 1.8.0_181-b13)
    OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
    
    bug 
    opened by madhead 8
  • Running the gradle template does not work

    Running the gradle template does not work

    Hi,

    I wanted to try out OPENRNDR so I followed the guide at http://guide.openrndr.org/#/Tutorial_Start. I managed to checkout the project and build it, but I am unable to run it.

    I get the following error:

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    [LWJGL] Failed to load a library. Possible solutions:
    	a) Add the directory that contains the shared library to -Djava.library.path or -Dorg.lwjgl.librarypath.
    	b) Add the JAR that contains the shared library to the classpath.
    [LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
    [LWJGL] Enable the SharedLibraryLoader debug mode with -Dorg.lwjgl.util.DebugLoader=true for better diagnostics.
    Exception in thread "main" java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at org.openrndr.Application$Companion.run(Application.kt:12)
    	at org.openrndr.ApplicationKt.application(Application.kt:41)
    	at TemplateProgramKt.main(TemplateProgram.kt:23)
    Caused by: java.lang.UnsatisfiedLinkError: Failed to locate library: liblwjgl.so
    	at org.lwjgl.system.Library.loadSystem(Library.java:147)
    	at org.lwjgl.system.Library.loadSystem(Library.java:67)
    	at org.lwjgl.system.Library.<clinit>(Library.java:50)
    	at org.lwjgl.system.MemoryUtil.<clinit>(MemoryUtil.java:61)
    	at org.lwjgl.system.MemoryStack.<init>(MemoryStack.java:61)
    	at org.lwjgl.system.MemoryStack.create(MemoryStack.java:82)
    	at org.lwjgl.system.MemoryStack.create(MemoryStack.java:71)
    	at java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:284)
    	at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
    	at java.lang.ThreadLocal.get(ThreadLocal.java:170)
    	at org.lwjgl.system.MemoryStack.stackGet(MemoryStack.java:628)
    	at org.lwjgl.system.MemoryStack.stackPush(MemoryStack.java:637)
    	at org.lwjgl.system.Callback.<clinit>(Callback.java:40)
    	at org.openrndr.internal.gl3.ApplicationGL3.createPrimaryWindow(ApplicationGL3.kt:251)
    	at org.openrndr.internal.gl3.ApplicationGL3.<init>(ApplicationGL3.kt:96)
    	... 7 more
    
    Process finished with exit code 1
    
    opened by faebser 7
  • Implement default font so drawer.text can be called directly

    Implement default font so drawer.text can be called directly

    Is your feature request related to a problem? If the user calls drawer.text() nothing is visible unless a font is specified earlier

    Describe the solution you'd like Maybe text() detects if the font is undefined. In that case it loads a default font. Another option is to load a default font when starting the program, but that would add some start up latency and it's not needed if .text() is never used.

    I can try implement it if an approach is suggested.

    enhancement 
    opened by hamoid 6
  • OPENRNDR 0.4.2

    OPENRNDR 0.4.2

    Changes since 0.4.1

    • Upgrade to Kotlin 1.7.10
    • Replace Spek tests (#346)

    openrndr-application

    • Fix restartJVM for JVM 18 (https://github.com/openrndr/openrndr/commit/29beddc00d56409dd65b5d0f8c5f68dd28cfe42c)

    openrndr-draw

    • Add color buffer proxy priority (https://github.com/openrndr/openrndr/commit/de62ee242ada742d92ab8292099c58b20580dc1c)
    • DepthBuffer clears depth on creation to avoid undefined behaviors (#354)

    openrndr-gl3

    • Add GL3 tests (#353)

    openrndr-math

    • Add EuclideanVector interface (https://github.com/openrndr/openrndr/commit/a14fb473c7192ca19e4ac01c523f211ed84f1309)
    • Add Vector1 (https://github.com/openrndr/openrndr/commit/eb941a48c24d360fb96f9b4d2e686769155477d2)
    • Add EuclideanVector.map (https://github.com/openrndr/openrndr/commit/f4bd1b86ae1e3f871cd36f82afc3560b5a555da5)
    • Add List/List.catmullRom shorthand (https://github.com/openrndr/openrndr/commit/fd1efd0ff0b50aef5f7eccebd4f1c2b6c8148c9e)

    openrndr-shape

    • Add Segment1D, Path1D (https://github.com/openrndr/openrndr/commit/c1228b42be6b77733874fd5242cd1d1879b0dfb9)
    • Add Rectangle flip methods (#350)

    openrndr-utils

    • Add Quadruple, Quintuple, Sextuple classes (https://github.com/openrndr/openrndr/commit/307231c6287823a0c6e64deb522a2e0427c96e8a)
    • Add Triangle.reversed (https://github.com/openrndr/openrndr/commit/4f159c788e389a4803c40a44a882f8fa9428ac6e)
    future release 
    opened by edwinRNDR 0
  • VertexBuffer count is incorrect when offset > 0

    VertexBuffer count is incorrect when offset > 0

    Operating System

    Windows

    OPENRNDR version

    master

    Java version (if applicable)

    No response

    Describe the bug

    val count = w.positionElements is only correct when offset is zero

    Steps to reproduce the bug

    No response

    bug 
    opened by jbellis 1
  • Path convexity is broken, so renderer never takes stencil-free fast-path

    Path convexity is broken, so renderer never takes stencil-free fast-path

    Operating System

    Windows

    OPENRNDR version

    master

    Java version (if applicable)

    No response

    Describe the bug

    Path.convex is false even for convex polygons

    Steps to reproduce the bug

    Here is a simple test case (but I had to make Path public to do this):

    describe("path should be convex") {
        val loops = listOf(listOf(Vector2(0.0, 0.0), Vector2(0.0, 1.0), Vector2(1.0, 1.0)))
        val corners = listOf(listOf(true, true, true))
        val path = Path.fromLineLoops(loops, corners)
        it("should be equal") {
            path.convex `should be equal to` true
        }
    }
    
    bug 
    opened by jbellis 0
  • Bug report: Strokes of primitive shapes are drawn differently compared to contours

    Bug report: Strokes of primitive shapes are drawn differently compared to contours

    Operating System

    Windows

    OPENRNDR version

    32ae9e909d19343df89444de67e43cf7a88a53c9

    Java version

    Adoptium 17

    Describe the Bug

    Currently, OPENRNDR is a bit inconsistent when it comes to strokes. This is most apparent when using a semi-transparent stroke color.

    When drawing a Rectangle the stroke is drawn over the fill (top-left shape in the screenshot). When drawing a Circle the stroke is drawn outside the fill (bottom-left shape in the screenshot). When drawing a ShapeContour of any kind, the stroke is drawn half-over the fill, leaving the other half outside the fill (top-right and bottom-right shapes in the screenshot). What's more is that Rectangle and Circle are automatically adjusted as to not change their pixels-on-the-screen size when strokeWeight changes, but this is not the case for ShapeContour, where the strokeWeight affects the pixels-on-the-screen size of the shape. This means calling .contour on a Circle and drawing it can create a shape different in size compared to the original Circle (in terms of pixels on the screen).

    I believe the ShapeContour currently has the ideal outcome here, as this matches the behavior of strokes in frameworks such as Processing and is most likely how users expect stroke to work. Therefore the drawing of Rectangle and Circle should be changed to be consistent with ShapeContour.

    Steps to Reproduce

    import org.openrndr.application
    import org.openrndr.color.ColorRGBa
    import org.openrndr.draw.isolated
    import org.openrndr.shape.Circle
    import org.openrndr.shape.Rectangle
    
    fun main() = application {
        configure {
            width = 640
            height = 640
        }
    
        program {
            backgroundColor = ColorRGBa.WHITE
            val rect = Rectangle(0.0, 0.0, 200.0, 200.0)
            val circle = Circle(0.0, 0.0, 100.0)
    
            extend {
                drawer.strokeWeight = 8.0
                drawer.fill = ColorRGBa.PINK
                drawer.stroke = ColorRGBa.BLACK.opacify(0.5)
    
                drawer.isolated {
                    drawer.translate(100.0, 100.0)
                    drawer.rectangle(rect)
    
                    drawer.translate(210.0, 0.0)
                    drawer.contour(rect.contour)
                }
                drawer.isolated {
                    drawer.translate(200.0, 410.0)
                    drawer.circle(circle)
    
                    drawer.translate(210.0, 0.0)
                    drawer.contour(circle.contour)
                }
            }
        }
    }
    

    Screenshots (Optional)

    image

    bug 
    opened by Vechro 1
  • add exr compressions to saveToFile, fix colour components order

    add exr compressions to saveToFile, fix colour components order

    This commit propose exhancement to saving EXR files. I avoided changing signature of abstract method in superclass and instead propose new public property in jvm class implementation. It is not ideal for user, but this commit is open for discussion and critic and call for better design is highly welcomed. Also, there is a bug in colour data transfer to ByteBuffers and it seems that red and blue channel are swapped in a final exr file.

    opened by sidec 0
Releases(v0.4.1)
  • v0.4.1(Aug 18, 2022)

    Thanks to @jbellis, @hamoid, @Vechro for their kind contributions.

    Changes since 0.4.0

    openrndr

    • Introduce ExtensionDslMarker (#330)
    • Upgrade to Gradle 7.5 (db5555ba3868ff535c540a94db382ff2a7ddaaf9)
    • Remove ApplicationDslMarker (#336)
    • Upgrade to kotlinx.coroutines 1.6.4, kotlin-logging 2.1.23, spek 2.0.18 (5e70d5016f956519d2a3c04dfc7823e6bb2786ab)
    • Update versions and use caching (#341)
    • Target JVM 11 (#343)
    • Upgrade to Gradle 7.5.1 (73de895ccfdcc40a8a21a0eb57cf36ac2e33bfe8)
    • Add missing dependencies (#349)

    openrndr-color

    • Add 4-digit and 8-digit support for fromHex (#327)
    • Color model changes, rename a to alpha (#326)
    • Fix and simplify ColorHSVa, ColorHSLa (7166a9436759c879c6bb8b3c425e54833d916ab6)

    openrndr-extensions

    • Fix multisample content scale bug in Screenshots (73de895ccfdcc40a8a21a0eb57cf36ac2e33bfe8)

    openrndr-ffmpeg

    • Rename MP4Profile to H264Profile and improve its interface. Add fun ScreenRecorder.h264(configure:H264Profile.()->Unit) to configure h264 profile (8d508d7898bd940ed5994e3281a5c24ab361de23)

    openrndr-gl3

    • Improve shader error reporting (4f7e84be8ec4557cdb47c6d415f250c6bfab109f, #329)
    • Place experimental pointer events behind -Dorg.openrndr.pointerevents (47fbbbddae8f94c75ecd2a30f62ebae77748163e)
    • Restore glfwPollEvents in setup (29a8cddbfd6de89718b56ff4f6a00aa606f105e9)

    openrndr-math

    • Add TransformBuilder.rotate (#331)
    • Add pointAtLength (#333)
    • Remove inaccurate pointAtLength optimization (#341)

    openndr-shape

    • Implement .segment/s() in CompositionDrawer (#332)

    openrndr-webgl

    • Fix issue with render targets with stencil or depth-stencil attachments (#337, 8ed73fef04605a3b33fb3631a326ce9707140031)
    • Fix vertex buffer calls at non-zero offsets (#338)

    Full Changelog: https://github.com/openrndr/openrndr/compare/v0.4.0...v0.4.1

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jul 8, 2022)

    Thanks to @Vechro, @hamoid, @morisil, @jbellis, @goudreinette, @Yvee1, @ricardomatias, @tortila and @sam-tsao for their kind contributions.

    Changes since 0.3.58

    • Introduction of multi platform support with a WebGL backend (alpha quality) https://github.com/openrndr/openrndr-js-template will get you started.
    • Reimplementation of Artifex in pure Kotlin, tweaked error thresholds to improve clipper quality
    • Reimplementation of GLUTessellator in pure Kotlin
    • Support for Apple silicon (M1)
    • Improved SVG support (@Vechro)
    • Support for querying and selecting displays (@Vechro)
    • Upgrade to LWJGL 3.3.1
    • Introduction of asset creation events
    • Upgrade to Kotlin 1.6.21

    Merged pull requests

    • Deprecate rgba and hsva (#322)
    • Implement CastableToVector4 for all colors (#323)
    • Improve RenderTarget docs (#318)
    • Convert to version catalogs (#313)
    • Add nesting workaround for olive (#317)
    • Cache artifex conversions so that operations like contains can re-use them (#305)
    • Fix findGroup not finding non-terminal groups, add CompositionNode.find (#307)
    • Respect PresentationMode.MANUAL in js application (#306)
    • Add display queries and selection (#303)
    • Re-add default font (#299)
    • Add dot product to Vector4 (#302)
    • Update bug_report.yml (#301)
    • Improve demos and README.md (#298)
    • Fix polyline and polygon parsing. (#297)
    • Make it possible to pause and resume ScreenRecorder (#296)
    • Delay PreloadClass so ScreenRecorder can be preloaded successfully (#295)
    • Explain the behavior of ut in ShapeContour.position (#280)
    • Expose Vector2.clamp(rect) (#290)
    • Integer backed color buffers created and interacted with using proper OpenGL types (#293)
    • Make Circle.tangents not return null, fix edge cases (#291)
    • make Segment.length by lazy (#292)
    • Add ShapeContour.segment() (#289)
    • Implement missing / additional events (#285)
    • Add a minimal web version of the Screenshots extension (#283)
    • Implemented window title (#284)
    • Make loadImageSuspend use createColorBufferFromUrlSuspend (#286)
    • JvmOverloads annotations (#271)
    • Update Slack link (#268)
    • Add implicit height to Drawer.rectangle(s) (#267)
    • Add paragraph about writing tests in CONTRIBUTING.md (#266)
    • Modify resourceUrl to use the class argument as provided, and not its class (#265)
    • Change Rectangle's inherited method return types to self, fix Circle/Ellipse scaling (#262)
    • Rewrite tests to use kotlin.test API (#263)
    • Fix 3-point Circle (failed when two points had same x) (#260)
    • Make Circle contains an operator function (#257)
    • Remove debug statement in openrndr-shape (#258)
    • Document code, fix one deprecated call (#253)
    • Add basic CONTRIBUTING.md (#252)
    • Explain dokka on windows and update dokka (#251)
    • Deduplicate code in FontImageMapDrawer, make use of instance (#250)
    • Fix unused position bug in Drawer.texts (#249)
    • Use asset metadata in ScreenRecorder (#248)
    • Nested composition: alternative implementation without copying entire composition (#247)
    • Fix color serialization for Composition and add test (#246)
    • Cubic segment of linear Segment3D (#244)
    • Fix stroke getter in CompositionDrawer.kt (#243)
    • Document Color classes (#242)
    • Primitive shapes inherit from common interfaces (#240)
    • Add more idiomatic map functions (#241)
    • Add default value of 1.0 to scaleZ in scale function (#238)
    • Adjust commas in Matrix33/44 toString, implement Matrix55 toString (#237)
    • Upgrade project to Kotlin 1.5; use variables for version numbers wherever possible (#236)
    • Greatly improve SVG support (#227)
    • Switch to new Issue Forms (#235)
    • Catch error with absolute paths in Screenshots.kt (#233)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.45(Mar 1, 2021)

    OPENRNDR 0.3.45

    • 7efe40b1 Add ADD blend mode to RenderTargetGL3, fix outputs for imageFragmentShader (Edwin Jakobs)
    • d27f9cee Add captureEveryFrame and name properties (#165) (Eric Yancey Dauenhauer)
    • 4bb6ceeb Add .clear() to Composition (#182) (Abe Pazos)
    • d082ea82 Add CompositionDrawer.composition (#177) (Abe Pazos)
    • 4af2e2bb Add cursorHideMode to mouse and configuration (Edwin Jakobs)
    • 96a7ba6c Add disableCursor support (Edwin Jakobs)
    • 4d6be002 Add drawStyle.smooth control for shapes, add drawStyle.miterLimit (Edwin Jakobs)
    • c0c777f8 Add frameSkip variable to ScreenRecorder (Yvee1)
    • 4c0805ff Add imageProxy helper functions (Edwin Jakobs)
    • e7f0eaed Add javacpp native libraries to ffmpeg-natives (Edwin Jakobs)
    • 41eb29a9 add JvmOverloads for conversion functions (Jonathan Ellis)
    • 77ecfaef add JvmOverloads for LineSegment intersection (Jonathan Ellis)
    • 1d975289 Add LinearType interface, implement in most linear types (Edwin Jakobs)
    • cc636074 Add new Animatable implementation (Edwin Jakobs)
    • e211ab65 Add openrndr-demos (Edwin Jakobs)
    • 0b561819 Add Rectangle.position(uv: Vector2) (#195) (Abe Pazos)
    • dabda8c9 add resettableLazy and apply to Shape (#183) (Jonathan Ellis)
    • 3b97a6ed Add REVERSE_DIFFERENCE clip mode (Edwin Jakobs)
    • fa20386b Add Segment.contour (Edwin Jakobs)
    • 63807560 Add Segment.contour ShapeContour.contour (Edwin Jakobs)
    • b63ff5a3 Add Shape.toString (Edwin Jakobs)
    • 2a0b7da7 Add support for IntArray, DoubleArray in ShadeStyle (Edwin Jakobs)
    • f55b1f09 Add support for loading colorbuffers from .dds files (Edwin Jakobs)
    • e67a655e Add synchronized to writes to toRemove in CompositionDrawer (Edwin Jakobs)
    • 6d549e5c Add tools to get the last programmed animation for a property (Edwin Jakobs)
    • 2c3d6c3a Add triangle creation from centroid (#200) (Ricardo Matias)
    • 8c45cb27 Add window transparency (Edwin Jakobs)
    • 85c478a1 allow mixing lineTo with continueTo (Jonathan Ellis)
    • 6985a64f Blendmode: fix MULTIPLY and add REMOVE (Yvee1)
    • 26d6226a Convert from grayscale to RGB instead of forcing to RGBA (Edwin Jakobs)
    • fa4375fa Document shape and math classes/methods (#189) (Vechro)
    • 2e79b8ef Fix adaptivePositionsAndCorners (Edwin Jakobs)
    • 73380f08 Fix argument order in Polar.makeSafe() (#169) (Steven van den Broek)
    • 869938a2 Fix artifex intersections edge case (#201) (Abe Pazos)
    • 7d540f30 Fix circle strokes (Edwin Jakobs)
    • 66f0fce7 Fix concurrent modification problem in CompositionDrawer (Edwin Jakobs)
    • 56234fcf Fix empty shape handling in difference() (Edwin Jakobs)
    • 2ce26901 Fix equidistantPositions fixes #166 (Edwin Jakobs)
    • f0a2c31e Fix for grayscale to RGB conversion at load (Edwin Jakobs)
    • e6e02e79 Fix for linecaps (Edwin Jakobs)
    • acb8d77c Fix index out of bounds bug in drawing single line segments (Edwin Jakobs)
    • f497b539 Fix loading of stroke weights from SVG Add dimension overrides to ScreenRecorder.kt Add option to disable setting the pink application icon (Edwin Jakobs)
    • 78ac12c9 Fix mesh lines to work with orthogonal projections (Edwin Jakobs)
    • 421e6d01 Fix missing cursorHideMode in ApplicationNullGL (Edwin Jakobs)
    • c140c68e Fix problem in Artifex where Curve2.split is called with consecutive duplicates (Edwin Jakobs)
    • fed0a4f3 Fix zero division bug in Drawer when modelViewScaling is zero (Edwin Jakobs)
    • 708c4ab2 Force loading images through stb to result in RGBA formatted ColorBuffers (Edwin Jakobs)
    • e0da5326 Ignore vertical scale factor (Edwin Jakobs)
    • 687a35c2 Implement split(ShapeContour, ShapeContour) (#186) (Abe Pazos)
    • f3366023 Improve calculation of mirrored points in CatmullRomChain2/CatmullRomChain3 (Edwin Jakobs)
    • ac2a5f8f Improve character positioning (Edwin Jakobs)
    • 79e59a79 Improve ColorBufferGL3.copyTo(ArrayTexture such that it deals with compressed texture copies on GPU (Edwin Jakobs)
    • 1dc43c34 Improve DDS support, add support for copying from compressed ColorBuffer to compressed ArrayTexture (Edwin Jakobs)
    • b470e76b Improve documentation of LineSegment, remove unused functions (Edwin Jakobs)
    • 5c2462c8 Improve font rendering, add DrawStyle.textSetting (Edwin Jakobs)
    • a58312c4 Improve handling of corners in ExpansionDrawer, include stroke weight in distance tolerance (Edwin Jakobs)
    • d3c20702 Improve left-side bearing (Edwin Jakobs)
    • 17859a45 Improve minimum line width calculation in ShaderGeneratorsGL3 (Edwin Jakobs)
    • 9a834c6e Improve mouse cursor handling, add standard cursor types (Edwin Jakobs)
    • 4b0c48a7 Improve rectangle.scale, add List.bounds, List.bounds, Vector2.map(Rectangle, Rectangle) (Edwin Jakobs)
    • b6f9b0c7 Improve stroke rendering (Edwin Jakobs)
    • 74201418 Improve svg transform parsing (#178) (Steven van den Broek)
    • 4276fb15 Improve text rendering (Edwin Jakobs)
    • d07d8f04 Improve writer {} api by adding return values (Edwin Jakobs)
    • 68ab39ba Recover Vector2.fromPolar (Edwin Jakobs)
    • 816559c0 Rectangle: move intersects(), test, add ReplaceWith (#202) (Abe Pazos)
    • c9ce8be1 Refactor image loading, improve kdocs (Edwin Jakobs)
    • 0490113f Resolve toByte() conversion warnings (Edwin Jakobs)
    • b6b1a8b7 Revert and fix Expansion (Edwin Jakobs)
    • c49e445c Simplify shape boolean ops and intersections api (Edwin Jakobs)
    • b39d9f2f Split shape kt (#181) (Abe Pazos)
    • 8454b31f Tweak fringeWidth (Edwin Jakobs)
    • 7e6239ae Unify function argument names in ShapeOperations (Abe Pazos)
    • 3acd2579 update Gradle to 6.8 (#176) (Abe Pazos)
    • 97a93ef8 Upgrade to Gradle 6.8.2 (Edwin Jakobs)
    • c713ed7f Upgrade to Kotlin 1.4.30 (Edwin Jakobs)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.44(Oct 16, 2020)

    OPENRNDR 0.3.44

    Summary of changes (from commit logs)

    • Add array size definitions to generated shaders in ShadeStructureGL3
    • Add Catmul-Rom to bezier conversions
    • Add Chaikin's cutting corners algorithm
    • Add Circle.fromPoints to construct a circle through 3 non co-linear points
    • Add ColorBuffer.crop Closes #147
    • Add CompositionNode.visitAll
    • Add fileExtension property to VideoWriterProfile
    • Add function overload to loadSVG which accepts a File
    • Add functions to add rectangles to batch
    • Add instance offset in Driver, add circle batching
    • Add intersection clip mode to CompositionDrawer
    • Add intersections(ShapeContour, ShapeContour)
    • Add Matrix44.toDoubleArray
    • Add normalization of t-values
    • Add org.openrndr.gl3.version property
    • Add OrientedRectangle
    • Add point batching
    • Add Ramer–Douglas–Peucker iterative end-point fit algorithm
    • Add rectangle batching
    • Add robustness in case RDP is used on looped point list
    • Add rotation to rectangle vertex shader generator
    • Add Segment and ShapeContour tForLength functions
    • Add segment/contour nearest point queries
    • Add ShaderStorageBuffer support
    • Add shader types, image bindings, OpenGL 4.5 support
    • Add support for layered RenderTarget attachments
    • Add SVG attribute support, improve CompositionDrawer interface
    • Add transformation targets to Drawer
    • Add uniform array
    • Add UNION clipmode
    • Allow optional UniformBlocks as some drivers detect they are not always used
    • Check for null in .parentFile()
    • Add outer and inner tangents calclations for Circle (#156)
    • Add luminance and contrast ratio to ColorRGBa (#151)
    • Fix #120, in file dialogs allow extension sets (#150)
    • Fix #97 - Implement namedTimestamp
    • Fix bounds for ShapeNode
    • Fix bug in contour position
    • Fix bug in sampleEquidistant Closes #135
    • Fix CatmullRomChains (too many points) (#142)
    • Fix ColorBufferGL3 copyTo behavior
    • Fix drawer matrices comment order
    • Fix for scaled shapes
    • Fix fringe geometry for beveled fills
    • Fix issue in ShadeStructureGL3 array definition generator
    • Fix issue with 3d line loops
    • Fix issue with UBOs that can be optimized away
    • Fix off-by-one bug in CatmullRom
    • Fix quotes in CompositionNode.svgId
    • Fix rendering circles and rectangles with negative width / height / radius (#154)
    • Fix uniform from parameter generation issue
    • Implement Array uniform
    • Implement CompositionDrawer.isolated/pushStyle/popStyle Closes #100
    • Implement default font for writing text
    • Improve color unification
    • Improve CompositionDrawer and SVG writing
    • Improve contour and segment intersection APIs
    • Improve shape/contour rendering
    • Improve stored circle batch interface
    • Make it easy to create squares out of Rectangle
    • Make namedTimestamp() accept no args
    • Merge openrndr-shape and openrndr-binpack into openrndr-core
    • Add support for loading images from SVG
    • Add shade styles to CompositionNode
    • Remove drawer style UBOs from shaders that don't use them
    • Remove newlines from base64 strings in ColorBufferDataGL3
    • Replace ShapeContour/Segment.project for nearest, update intersections API
    • Sanitize Catmull-Rom inputs
    • Unify color interfaces
    • Unify resolveTo and copyTo
    • Upgrade to Kotlin 1.4.10, JavaCPP 1.5.4, Gradle 6.6.1
    • Upgrade to Kotlin 1.4, Gradle 6.6
    • Work-around for issues in Drawer.contours
    • Work-around GLFW inconsistency Closes #127, #133
    Source code(tar.gz)
    Source code(zip)
  • v0.3.43(Jul 6, 2020)

    OPENRNDR 0.3.43

    Changelog

    • Add ability to disable clock synchronization in VideoPlayerFFMPEG
    • Add ArrayCubemap support, add character set customization
    • Add autodetection of video device instead of hardcoded name Closes #111
    • Add BufferTexture read/write
    • Add comparison to VertexFormat
    • Add configuration options to MP4Profile
    • Add Cubemap read
    • Add duration to VideoPlayerFFMPEG.kt, add h264_nvenc to MP4Profile
    • Add equals and turn types into data classes where possible
    • Add first and last segment to CamullRomChain2/3
    • Add flat qualifiers for integer varyings
    • Add geometry shader basics
    • Add integer vertex types
    • Add Matrix33.inversed Closes #125
    • Add Matrix44.fromDoubleArray
    • Add profiling and state tracking
    • Add program.ended and window.closed events Closes #126;
    • Add right property to CubemapSide
    • Add rotation method to Vector2 & LineSegment
    • Add saving and loading of BufferTexture
    • Add support for array cubemap filter parameters
    • Add support for boolean parameters in shade styles
    • Add support for float16 surfaces in DDSReader
    • Add support for integer outputs in shade styles
    • Add support for integer sampled buffer textures
    • Add support for IntVector2/3/4 uniforms and parameters
    • Add support for loading 16 bit PNG files
    • Add support for Vector2/3/4 arrays to ShadeStyle parameters
    • Add support for writing Int/IntVector2/3/4/ using BufferWriter
    • Add userArguments to MP4Profile
    • Add vsync configuration
    • Allow ColorBufferGL3 to used as texture when in multisample mode
    • Implement VideoPlayerFFMPEG.fromScreen() for capturing the desktop
    • Fix ApplicationEGLGL3
    • Fix argument name of BufferWriter.copyBuffer
    • Fix array cubemap creation
    • Fix buffer rewind issue in ColorBufferGL3
    • Fix bug in ArrayCubemapGL4.copyTo
    • Fix bug in DDSReader when loading mipmapped cubemaps
    • Fix bug in ffmpeg pix_fmt arguments
    • Fix clock bug in ApplicationEGLGL3
    • Fix cubemap mipmap issues, remove Cubemap.side interface
    • Fix custom character sets
    • Fix default levels argument for cubemap
    • Fix default/unnormalized path issues on Windows
    • Fix deprecation warnings
    • Fix EGL back-end render target
    • Fix hashCode of ColorRGBa
    • Fix issue #95 : Drawer accepts more types
    • Fix issue with display thread not stopping on dispose
    • Fix polar operations with swapped argument order
    • Fix Rectangle copypasta
    • Fix RenderTarget.attach(Cubemap, CubemapSide, Int, String) default argument
    • Fix RenderTargetGL3 array cubemap attaches
    • Fix unit test for Matrix33
    • Fix unproject
    • Improve OpenGL version checks
    • Improve profiling, increase cache size from 100 to 10000
    • Improve RenderTarget interface
    • Improve support for integer attributes. Add matrix44 array parameters
    • Make mouse drag event transmit the last pressed button
    • Remove Matrix44 * Vector3 as it is mathematically ambiguous
    • Upgrade gradle to 6.5.1
    Source code(tar.gz)
    Source code(zip)
  • v0.3.42(May 14, 2020)

    Video

    • Add ScreenRecorder.shutdown
    • Add frame format/type checking in VideoWriter to prevent hard crashes
    • Fix x265 profile

    Screenshots

    • Fix null-check for parentFile in Screenshots
    • Add Screenshots.beforeScreenshot and afterScreenshot events Closes #98
    • Add Screenshots.trigger
    • Allow delaying screenshots

    ​

    Math and Vectors

    • Add addition/subtraction operators for Doubles/Vectors
    • Add clamp to map() (#85)
    • Add dimensions vector to Rectangle
    • Add distanceTo, squaredDistanceTo
    • Prevent division by zero in map
    • Add mixAngle, use it when mixing hues
    • Add Vector mix funcs, tests, fix Vec4.normalized
    • Add NaN tests to Double.map ​

    Documentation

    • Update README.md
    • Improve API CSS
    • Add documentation for FileDialogs.kt

    ​

    Development

    • Create pick-me.yml
    • Add workflows for bintray and apidocs

    ​

    Contours and lines

    • Address shape contour split issue
    • Improve point deduplication for lineloops
    • Improve handling of compound shapes
    • Improve Shape.splitCompounds and triangulate
    • Improve ShapeContour.offset
    • Improve ShapeContour.sub
    • Improve shape winding and handling consistency
    • Make Shape and ShapeContour assumptions explicit, add contours {}
    • Add default argument value for ShapeContour.fromPoints
    • Fix bug in Contour.equidistantPositions
    • Fix bug in Drawer.contours
    • Fix consecutive duplicate point issues
    • Fix derivative for 3d quadratic beziers
    • Fix for quadratic bezier derivative
    • Fix for zero-length segments generated by BezierCubicSampler2D
    • Fix rounding bug in sampleEquidistant
    • Fix ShapeContour.offset issue where segments are disjoints
    • Change default tolerance for line-line intersection to 0

    ​

    Interaction

    • Change mouse.clicked event to be an alias for mouse.buttonUp
    • Keep state of mouse buttons so it can be queried
    • Rename mouse.left to mouse.exited

    Text writing

    • extend latin alphabet with Polish diacritics

    Rendering

    • Add compound support for triangulateIndexed
    • Add (partial) openrndr-nullgl back-end, which can be used for testing
    • Add support for BufferTexture parameters in Filter
    • Fix handling of default VAO
    • Deprecate Drawer.background in favor of Drawer.clear
    • Add ignore options to ColorBuffer.isEquivalentTo
    • Add standard blend mode for non-premultiplied alpha
    • Change clear color to black to prevent flashes when working on installations
    • Switch to Java implementation of GLUTessellator
    • Add destroyContext to Driver

    ​

    Other

    • Add elementOffset argument to VertexBuffer.put
    • Add feature request template for issues
    • Add multiplication symbol to default alphabet
    • Allow rgb(gray)
    • Disable sanitizing exception handler on windows, show cause chain
    • Fix bounds in ExpansionDrawer.kt
    • Fix small issues in SVGLoader
    • Resolve warnings emitted by compiler
    • Upgrade ffmpeg, kotlin, dokka, Gradle, kotlin-coroutines-core, Kluent
    • Work around lateinit issues in Application / Program

    ​

    Source code(tar.gz)
    Source code(zip)
  • v0.3.40(Mar 27, 2020)

    openrndr_0340-800

    OPENRNDR 0.3.40

    What's new

    • Improved exception reporting
    • Improved handling of default locations for file dialog
    • Improved default names for ScreenRecorder and Screenshots
    • Improved controlPoints in continueTo
    • Improved ShadeStyle class
    • Added ColorBuffer.isEquivalentTo and ColorBuffer.createEquivalent
    • Added rgb, rgba, hsl, hsla, hsv, hsva short-hands
    • Added keyboard.pressedKeys
    • Added mouse.entered and mouse.left events
    • Fixed by in blend modes when using multiple Filter outputs
    • Added window resizing through program.window.size
    • Fixed bug in stencil buffer settings of ExpansionDrawer
    • Fixed visual artifacts in arcTo
    • Added names to events
    • Added names to shaders
    • Fixed bug in font loading that caused crash when loading multiple fonts
    • Fixed bugs in ShapeContour.offset
    • Fixed missing preambles in shade styles
    Source code(tar.gz)
    Source code(zip)
  • v0.3.39(Feb 14, 2020)

    openrndr_39

    OPENRNDR 0.3.39

    What's new

    OPENRNDR 0.3.39 is accompanied by ORX 0.3.47 and Panel 0.3.21. The template project openrndr-template has been updated to work with the latest versions.

    In this release most of the new features are to be found in ORX.

    • Improved loading times of scripts and added async loading of scripts in orx-olive
    • Added orx-gui which provides tooling for automatic generation of user interfaces for prototyping and hacking. See the orx-gui chapter in the guide.
    • Added many filters to `orx-fx. Check out the filter index
    • Added preset shade styles in orx-shade-styles, check the shade style index
    • Revived and document orx-compositor, which is now an incredibly powerful tool to build layered graphics with extensive support for blending and post-processing. It now even has documentation in the guide.

    OPENRNDR changelog

    • Add check for propagationCancelled in Screenshots
    • Fix bug that causes Screenshots to always work in async mode
    • Change Program.extend signatures to return generic type instead of Extension
    • Fix bug in ShapeContour where last segment is omitted in ShapeContour.offset()
    • Fix output of ShapeNode transforms to SVGWriter
    • Change Screenshots to use KeyEvent.name
    • Add key names for non-printable key
    • Fix for HiDPI inconsistencies on Linux
    • Add support for OpenGL / linux-arm64 platforms
    Source code(tar.gz)
    Source code(zip)
  • v0.3.38(Jan 27, 2020)

    0338-800

    OPENRNDR 0.3.38

    What's new

    • A new GPU resource tracking system
    • Add writer {} extension methods that make the use Writer more fun
    • Mip-map level controls in ColorBuffer and ArrayTexture copy/write/read/resolve/attach operations
    • Change the default ShadeStyleFilter behaviour to be more like a Filter
    • Add Filter.apply(array<ColorBuffer>, RenderTarget)
    • Add OpenEXR loading and saving support to ColorBuffer
    • Fix shade style support for 3d lines
    • Add strokeWeight support when drawing Composition (submitted by @ilyasshafigin) ilyasshafigin
    • Add LINE_STRIP primitive support (submitted by @ricardomatias)
    • Add loadVideo and loadVideoDevice for easier video loading
    • Add ColorBuffer.anisotropy
    • Fix for ContourBuilder.close not adding an extra segment when needed
    • Add support for pausing and resuming VideoPlayerFFMPEG
    Source code(tar.gz)
    Source code(zip)
  • v0.3.37(Dec 17, 2019)

    0337_openrndr-3

    OPENRNDR 0.3.37

    What's new

    • Deprecated Drawer.reset()
    • Fixed small bug in grayscale() where c4r4 was not set to 1.0
    • Changed Vector2/3/4 get operator to be public
    • Added ColorBuffer.fromArray, ColorBuffer.fromBuffer
    • Moved most of openrndr-filter to orx-fx
    • Added clock synchronization between Program and Animatable
    • Added from and to base64 data url representations for ColorBuffer
    • Added ShadeStyleFilter
    • Moved AudioPlayer to openrndr-openal
    • Change Animatable to use nanosecond precision
    • Added Program.frameCount
    • Decommissioned FFMpegVideoPlayer

    This release includes contributions by @ricardomatias and @MinteZ

    Source code(tar.gz)
    Source code(zip)
  • v0.3.36(Nov 25, 2019)

    openrndr-0 3 36

    OPENRNDR 0.3.36

    What’s new

    • A major revamp of VideoPlayerFFMPEG that adds OpenAL based sound support and simple input device listing.

    • VideoPlayerFFMPEG now has support for seeking.

    • VideoPlayerFFMPEG will now guess the right FPS when no FPS argument has been passed to VideoPlayerFFMPEG.fromDevice()

    • VideoPlayerFFMPEG now has draw functions with position and dimension arguments as well as source and target rectangles.

    • This release uses an OpenGL 4.3 context where available, it will drop back to a 3.3 core context if a 4.3 context can not be created.

    • The reason for using a 4.3 context is the added support for compute shaders. This release comes with basic (and somewhat experimental) support for compute shaders.

    • Program has an added deltaTime property that reflects that time (in seconds) since the last screen refresh.

    • Added support for 3D Beziers through Path3D an Segment3D. Drawer now has added path and segment primitives.

    • Added a point primitive to Drawer.

    • A shutdown() function has been added to the Extension class. Shutdown is called whenever an OPENRNDR application exits.

    • Added support for integer samplers.

    • Added extra constructors to Vector2, Vector3, Vector4 that allow GLSL like construction. For example one can now write Vector3(2.0) which is a short-hand for Vector3(2.0, 2.0, 2.0)

    • Added invoke() functions to Vector2, Vector3, Vector4, ColorRGBa, ColorHSVa, ColorHSLa that work exactly like the copy function but should be more convenient to use.

    • Added a Polar class that works analogous to the Spherical class.

    • Made the coroutine dispatcher code part of the public API, you can now create public dispatchers in an OPENRNDR program using the Dispatcher class.

    • Several tweaks and fixes to improve orx-olive

    • Upgraded LWJGL to 3.2.3 and Bytedeco JavaCPP to 1.5.2

    This release includes contributions by @ricardomatias

    Source code(tar.gz)
    Source code(zip)
  • v0.3.30(Nov 27, 2018)

    Features

    This release features:

    • Bugfix for performance bug in BufferTexture
    • Bugfix for degenerate triangle generation in mesh lines
    • Bugfix for Drawer.LineSegment(Vector3, Vector3) that would always dispatch to FastLineDrawer
    • Bugfix for Matrix44's column accessor
    • Improved CubeMapSide enumeration
    • Added support for DepthBuffer as ShadeStyle parameters
    • Added DEPTH16 DepthFormat
    • Added Mouse.position writability, and can now be used to set the cursor position
    • Added Mouse.cursorVisible
    • Added suppression of writing to default output in shader generator
    • Added safety checks to ColorBuffer.resolveTo

    Api incompatibility

    Several APIs have been changed and OPENRNDR 0.3.30 is binary incompatible with version 0.3.29. Additionally this version introduces source incompatibilities in the Mouse and Keyboard APIs. Add-on libraries will have to be recompiled for the 0.3.30 API.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.29(Nov 16, 2018)

    Features

    This release features:

    • Drawer improvements; notably 3d line rendering has been improved.
    • functional interface for Application; low-overhead API for quick sketches.
    • Triangulator improvements; replaced implementation with earcut4j, which provides support for polygons with holes
    • Bugfixes for ColorBufferShadow.read() when using R/RG formats
    • Bugfix for normal matrices that weren't stored in the ContextBlock UBO
    • CompoundBuilder improvements; unions / differences / intersections can now use more than 2 operands
    • Added Program.clock interface which can be used to override the time provided by seconds
    • ScreenRecorder uses Program.clock to provide time based on the frame index
    • ScreenRecorder now has maximumFrames, maximumDuration, quitAfterMaximum, multisample and frameClock configuration options
    • Subtractive blending, contributed by @MinteZ
    • Automated updates to the online API docs
    • Improved API docs for openrndr-animatable, contributed by @CodeCox
    • Multisample support through multisample ColorBuffer and DepthBuffer

    Functional Application

    The newly provided application builder function can be used to declare applications as simple as:

    fun main() = application {
        configure {
            width = 640
            height = 480
        }
    
        program {
            extend {
                drawer.circle(width / 2.0, height / 2.0, 100.0)
            }
        }
    }
    

    Api incompatibility

    Several APIs have been changed and OPENRNDR 0.3.29 will be binary incompatible with version 0.3.28. Add-on libraries will have to be recompiled for the 0.3.29 API.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.28(Nov 5, 2018)

    This release features:

    • Kotlin 1.3.0
    • Multithreaded rendering and coroutine dispatchers on Program thread
    • Improved Program.extend interface
    • Code in Drawer.kt spread over multiple files
    • Implemented multiply blendmode

    Bugfixes:

    • Contour winding in SVG loader
    • ShapeContour.sub now works correctly for sub-segments across the contour origin
    • Default path for openFilesDialog
    Source code(tar.gz)
    Source code(zip)
  • v0.3.27(Oct 10, 2018)

    This release features:

    • Improved API consistency
    • ColorBufferShadow map functions
    • Reduced overhead from FFMPEG platform libraries
    • Upgrade to Gradle 4.10.2
    • Support for Cyrillic alphabets
    • Bugfix for problems with shared uniform blocks
    • Bugfix for dropping multiple files on program window
    • Bugfix for Writer.textWidth ignoring tracking
    Source code(tar.gz)
    Source code(zip)
  • v0.3.26(Sep 19, 2018)

    Features:

    • easier Composition generation through CompositionDrawer
    • ColorBufferShadow []-accessors
    • kotlin 1.2.70 libraries
    • Screenshots a screenshot extension with up-scaling support
    • bezier bounds and ShapeContour offsets
    • Shape and ShapeContour boolean ops using Artifex
    • ColorBuffers can now be saved in JPEG format (thanks to @daniel5gh)

    Bugfixes:

    • leading in multi-line texts is now correct
    • FontImageMapDrawer no longer generates out of bounds exceptions
    Source code(tar.gz)
    Source code(zip)
  • v0.3.25(Aug 29, 2018)

    New features

    • Async headless mode support
    • Index buffer support
    • Improved transform builder
    • Improved drawer and driver API

    Thanks to @ernstnaezer and @MinteZ for their contributions.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.24(Aug 14, 2018)

    Features:

    • Added lineStrips, lineSegments, lineLoops with stroke weights per instance

    Bugfixes:

    • Added resolution checks for VideoWriter
    • ScreenRecorder now resets shadeStyle before drawing the screen contents
    • Proper uniform locations for arrays in vertex attributes
    • Fixes for VAO hashing
    Source code(tar.gz)
    Source code(zip)
  • v0.3.23(Aug 3, 2018)

    Features

    • Improved VertexFormat (breaking the <= 0.3.22 API)
    • Added cancelling of queued asynchronous images
    • Added headless application mode using EGL
    • Upgraded LWJGL to 3.2.0
    • Upgraded Kotlin to 1.2.60
    Source code(tar.gz)
    Source code(zip)
  • v0.3.21(Jul 27, 2018)

    Features

    • Added uniform buffer objects / blocks
    • Improved ColorBufferLoader
    • Added ShadeStyle.attributes
    • Added IntVector3, IntVector4

    Bug-fixes

    • tint with opacity
    Source code(tar.gz)
    Source code(zip)
  • v0.3.20(Jul 27, 2018)

  • v0.3.19(Jul 13, 2018)

    New features:

    • Rectangular clipping masks
    • Presentation control

    Improvements:

    • Support for GLX_swap_control_tear
    • Better performance of ShaderWatcher on macOS
    • Better debugging support in GL3 driver
    Source code(tar.gz)
    Source code(zip)
  • v0.3.18(Jul 6, 2018)

    New features:

    • Shader watchers
    • Asynchronous image loading
    • Webcam support through FFMPEG

    Bugfixes:

    • Shade styles: c_screenPosition was reported in pixels, is now reported in device coordinates
    • Shade styles: parameters not properly exposed in the expansion (shape / contour / line) shaders
    Source code(tar.gz)
    Source code(zip)
  • v0.3.17(Jun 29, 2018)

    • Incremented number of circles in CircleDrawer
    • Replaced hardcoded ffmpeg path with global ffmpeg
    • Fixed memory leak in ColorBuffer loading
    • Improved interfaces for opening videos
    • Fixed bug that caused out images to saved upside-down
    Source code(tar.gz)
    Source code(zip)
  • v0.3.16(Jun 20, 2018)

    • Added extra key definitions
    • Fixed color transform for images with alpha channels.
    • Resolved concurrent modification problems in postponed Events
    • Added missing fragment and vertex preambles to rectangle shader
    • Fixed loading of images with odd number of columns, GL_UNPACK_ALIGNMENT
    Source code(tar.gz)
    Source code(zip)
  • v0.3.15(Jun 15, 2018)

    • Added keyboard character event for improved input handling
    • Added openrndr-dialogs to settings.gradle
    • Added check for org.openrndr.gl3.debug property at runtime
    • Bumped Kotlin version to 1.2.50
    • Added keyboard character event for improved input handling
    • Added framerate and profile settings to ScreenRecorder
    Source code(tar.gz)
    Source code(zip)
  • v0.3.8(Mar 27, 2018)

Owner
OPENRNDR
Open source framework for creative coding written in Kotlin
OPENRNDR
Library dibuat untuk autentifikasi whatsapp di buat tim CAN Creative

wagos Library dibuat untuk autentifikasi whatsapp di buat tim CAN Creative. hany

Rafli Ramadhan 0 Jan 4, 2022
Communicating between Wear OS and Android device using the OpWear module and a sample of displaying real-time camera on the watch and sending commands to the mobile by Wear OS.

OpWear-Cam Communicating between Wear OS and Android device using the OpWear module and a sample of displaying real-time camera on the watch and sendi

AmirHosseinAghajari 6 Nov 8, 2022
Real time gps location based alarming system tracking the road accident and providing medical assitance plus concern from near by police station.

Real time gps location based alarming system tracking the road accident and providing medical assitance plus concern from near by police station.

Sandeep Verma 1 Mar 12, 2022
This android app fetches the data from the USGS API in real time to display a list of earthquakes.

This android app fetches the data from the USGS API in real time to display a list of earthquakes. On clicking an earthquake it opens a browser window with the complete information of the earthquake along with the location on a map.

null 5 Jan 11, 2022
Ipify allows users to get current public IP address for connected network in real-time

Ipify-Android Ipify allows you to get current public IP address when connected to internet in real-time Add Dependency Use Gradle: Step 1: Add it in y

null 9 Nov 21, 2022
A real time notification App which reminds its user with daily schedules

On Time Pro ⌚ A real time notification App which reminds its user with daily schedules, time-table βŒ› , due assignments ?? , regular classes with just

Elevate Lab 3 Feb 1, 2022
Linux GUI for Kuri's userspace tablet drivers. Supports non-wacom (XP-Pen, Huion, Gaomon) graphics tablets and pen displays

Kuri's Userspace tablet driver utility (GUI) This is a new GUI implementation for the userland driver I've written here: https://github.com/kurikaesu/

Aren Villanueva 12 Jan 4, 2023
Turtle Graphics 🐒 implementation for Android Platform with Code Editor, Preview Screen and packages

Turtle Graphics Download Turtle is an Android Application inspired from the original Turtle Graphics and Logo, Logo is an educational programming lang

Amr Hesham 15 Dec 30, 2022
Java/Kotlin lightweight implementation of RFC-6238 and RFC-4226 to generate and validate time-based one-time passwords (TOTP).

1time Java/Kotlin lightweight implementation of RFC-6238 and RFC-4226 to generate and validate time-based one-time passwords (TOTP). Maven / gradle de

Atlassian Labs 31 Dec 21, 2022
Android-basics-kotlin-tip-time-app - Tip Time app from Android Basics in Kotlin

Tip Time Tip Time app from Android Basics in Kotlin at developers.google.com. It

Ramon Lima e Meira 0 Jan 2, 2022
Episodie is a TV show time tracker app with unusual design written in kotlin and clean architecture approach. Get to know how much time you spent watching tv shows.

Episodie Episodie is a TV show time tracker app with unusual design. Get to know how much time you spent watching tv shows. Track easily overall progr

Przemek 126 Dec 7, 2022
Help users of coding platforms to create findable, well documented, secure and offering good quality projects

The Ambassador The Ambassador will help users of coding platforms to create findable, well documented and offering good quality projects. It measures

F. Hoffmann-La Roche 15 Nov 7, 2022
Simple Android app during a coding night. Just Learning Firebase and Android

KUI-App Simple Android app during a coding night. Just Learning Firebase and Android What we learned: Some basics of Android Basic setup of Firebase:

Kibabii University Informatics Club (KUI) 7 Aug 28, 2022
An open source application to make your own android applications without coding!

Stif An Open source project for building Android Application at a go both with and without coding. This project was inspired from Scratch and Sketchwa

Nethical org 5 Aug 28, 2021
Coding Challenge for ParadoxCat

WavDecoder Coding Challenge for ParadoxCat WavHeaderReader This class takes the ByteArray which supposed to be a 44 bytes length array from the very s

Alexander Styagov 0 Nov 5, 2021
An Android application sample for ClearScore coding challenge

ClearScoreChallenge An Android application sample for ClearScore coding challenge Libraries Coroutines for managing background threads. (A coroutine i

Ozan Topuz 1 Nov 18, 2021
Android Clone Coding Project #11 μ•ŒλžŒ

Android Clone Coding Project #11 μ•ŒλžŒ μ§€μ •λœ μ‹œκ°„μ— μ•ŒλžŒμ΄ 울리게 ν•  수 있음 μ§€μ •λœ μ‹œκ°„ μ΄ν›„μ—λŠ” 맀일 같은 μ‹œκ°„μ— 반볡되게 μ•ŒλžŒμ΄ 울리게 ν•  수 있음 κ²°κ³Όν™”λ©΄ Screenshot1 Screenshot2 배운 λ‚΄μš© 정리 AlarmManage

Kim Si Jin 0 Dec 24, 2021
UP42 backend coding challenge

UP42 backend coding challenge by PaweΕ‚ Radecki Build and deploy locally ./gradle

PaweΕ‚ Radecki 0 Jan 10, 2022
Clone of real world Chatting application Whatsapp built on Android Studio and Firebase

Clone of real world Chatting application Whatsapp built on Android Studio and Firebase

Aditya Bonde 11 May 23, 2022