
Rx – Extensible pixel editor implemented in Rust, inspired by Vi - cloudhead
https://cloudhead.io/rx
======
rvz
I find this very interesting. This is the first time I've seen a developer
provide a AppImage for Linux and a build-it-yourself for Mac and Windows. Not
sure if the dev owns any computer that runs Windows or Mac, but that seems
reasonable. Also is there a reason for using Metal rather than MoltenVK for
macOS?

Other than that, great project, spot on license choice, and best of all, Rust!

~~~
kvark
> Also is there a reason for using Metal rather than MoltenVK for macOS?

Let me ask it the other way: is there a reason to use MoltenVK if we have a
Metal backend?

~~~
Const-me
In OP’s corner case maybe there is, to have a single GPU API and single shader
language across all platforms they support.

This doesn’t apply to commercial software. Even if MoltenVK works flawlessly
(I don't have experience with the technology), the only GPU API which does on
Windows is Direct3D. For cross-platform stuff you want to support multiple GPU
APIs, or you’ll have to spend a lot of money supporting users with
broken/missing/nonexistent GL/VK drivers.

~~~
kvark
They do have a single GPU API (wgpu-rs) and only one version of the shaders -
SPIRV.

------
RodgerTheGreat
It's a bit puzzling that the GitHub readme has more information about how to
use the tool than the website. I don't know what to take away from the single
screenshot. Maybe it would be helpful to record an animated GIF or a
screencast to demonstrate it in action?

~~~
AdmiralAsshat
The GH readme file is alot easier to fix than a website. It likely evolves
naturally as people open issues to complain that a command doesn't work or
that instructions for platform X are missing. The author reads the issues on
GH, commits fixes on GH. It's easy to forget the website part.

~~~
cloudhead
Pretty much this - I copy stuff over from the README once in a while. I guess
the website could benefit from having some of the usage instructions though.

------
wingerlang
I wonder what the overlap between pixel artists and vi users is.

And perhaps for this overlap a tutorial is not needed, but it would be
interesting to me to see it in action.

~~~
Karliss
Single person game developers who don't want to hire an artist?

~~~
Const-me
I think vast majority of game developers, no matter single or not, use visual
studio. Tools like GPU/CPU profilers/debuggers are easier to use when part of
the IDE.

~~~
njharman
> Tools like GPU/CPU profilers/debuggers are easier to use when part of the
> IDE

Says you. There is reason vim is not "dead" and it's not just cause "old
people" still use it. Also, there are plenty of IDEs besides VS.

Finally, "vast majority" doesn't matter for shit with open source. One
developer with an itch is enough. If there's a handful of others with same,
all the better.

~~~
Const-me
> There is reason vim is not "dead" and it's not just cause "old people" still
> use it.

Developing videogames is not one of these reasons.

> there are plenty of IDEs besides VS.

How many of these IDEs are supported by mainstream 3D engines, or current-gen
console SDKs?

------
xyzzy_plugh
I've been noodling about this concept for several years. I could never quite
figure out how to make it efficient, but it's super appealing as a vim user.
I'm excited to give this a go!

~~~
cloudhead
Great, please send me any feedback you have!

------
FPGAhacker
When did everything become extensible instead of extendable. Do they mean
different things? Is it a case of while vs whilst?

On a more related note, I find it interesting that the GUI doesn’t appear to
be a toolkit like QT, but lower level, like a GUI designed for in-game use.

~~~
samatman
Only one of these, extensible, was a word at all until the 1940s[0], and
extendable is still the less common word.

This is the not-uncommon case where the irregular form is slowly losing ground
to the regular form. It's possible that in a century, 'extensible' will be
considered archaic.

[0]
[https://books.google.com/ngrams/graph?content=extendable%2C+...](https://books.google.com/ngrams/graph?content=extendable%2C+extensible&year_start=1800&year_end=2000&corpus=15&smoothing=3&share=&direct_url=t1%3B%2Cextendable%3B%2Cc0%3B.t1%3B%2Cextensible%3B%2Cc0)

~~~
FPGAhacker
Wow, that’s fascinating. Thanks for thinking of using google’s ngram tool. I
have played around with it a few times but it completely slipped my mind.

------
chrispauley
I'd be interested to try this but it fails to boot from the app image for me.

    
    
      Error of failed request:  BadDrawable (invalid Pixmap or Window parameter)
    
    

On Ubuntu using i3 with vulkan drivers installed.

~~~
kvark
Do other Vulkan samples work for you (e.g. vkcube)? I was getting this issue
on a laptop with both NV and Intel. Problem can be worked around by forcing
the Vulkan loader to use Nvidia GPU (by providing
`VK_ICD_FILENAMES=<path_to_nvidia_icd.json>`).

~~~
chrispauley
This is a problem I did not even know I had. Thanks for pointing it out!

------
makach
would love to see a video of it in action :)

------
Narishma
Why would an image editor need Vulkan?

~~~
Sir_Cmpwn
Why wouldn't an image editor need Vulkan? It's gotta render something somehow.

~~~
Narishma
It just seems like an overkill and unnecessary requirement for a pixel editor.
The first one I used ran just fine with software rendering on a 25Mhz CPU.

~~~
chongli
It’s not about power, it’s about portability. As far as I’m aware there is no
simple, low level, software based, portable, 2D graphics stack.

The software you ran on a 25MHz machine was in all likelihood written in
assembly, directly interfacing with the hardware of your machine, without even
touching your windowing system (if you even had one, maybe you were running
DOS). Modern operating systems frown on that sort of thing with extreme
prejudice.

~~~
Narishma
I don't understand your comment.

How is Vulkan more portable than a software renderer? And if you need hardware
acceleration, OpenGL is more portable than Vulkan.

~~~
tracker1
Today, it seems that Vulkan is really the most portable engine available.
OpenGL support has kind of stagnated.

I would have thought SDL is probably a better target for this type of
application. However, I'm happy to see developers use what they like and push
the envelope how they like.

Just upgraded to Linux kernel 5.3 and beta mesa & vulkan so I can drop in my
rx5700xt, which I still need to do.

~~~
ris
The problem is that vulkan was specifically designed to throw away an amount
of portability in favour of allowing lower level access to hardware features.
If said hardware features don't exist on a platform, you're stuck. Note the
"The Vulkan Portable Subset" having to throw away a number of features to have
it work on a number of underlying platforms
[https://www.khronos.org/vulkan/portability-
initiative](https://www.khronos.org/vulkan/portability-initiative) .

The advantage that opengl has is a number of software implementations that can
be used as a last ditch on unsupported systems. Efforts for software vulkan
implementations are taking a long time to appear.

------
larusso
This is exactly a kind of project I was looking for to get some inspirations
from.

------
jjoonathan
Cool!

Speaking of Rust and UI, has the story moved beyond "DIY GL / Qt bindings /
website backend" or are those still pretty much the options?

~~~
cloudhead
Imgui is quite common these days: [https://github.com/Gekkio/imgui-
rs](https://github.com/Gekkio/imgui-rs)

------
skywal_l
Interesting but why would you need Vulkan?

~~~
Sir_Cmpwn
Why not? This is a bizzare thing for people to get hung up on.

~~~
Hamcha
Because for being such a minimalist editor, it requires something that a lot
of hardware out there doesn't have and that often requires proprietary
drivers.. even though it doesn't need it.

~~~
slezyr
> often requires proprietary drivers

I think it's just Nvidia and GPUs for ARM SOCs. You need GPU drivers to use
desktop anyway.

------
amelius
Curious about what Rust GUI library they used.

~~~
bluejekyll
Looks like winit:
[https://docs.rs/winit/0.20.0-alpha3/winit/](https://docs.rs/winit/0.20.0-alpha3/winit/)

This is based on the cargo manifest:
[https://github.com/cloudhead/rx/blob/master/Cargo.toml](https://github.com/cloudhead/rx/blob/master/Cargo.toml)

If you're interested in this space, there's also a lot of effort going into
druid: [https://github.com/xi-editor/druid](https://github.com/xi-
editor/druid)

Edit: actually just see this sibling comment:
[https://news.ycombinator.com/item?id=21115680](https://news.ycombinator.com/item?id=21115680)

------
drizze
Rx has a bit of a "namespace collision" with the functional reactive
programming library ReactiveX, which has implementations in many different
languages. Often these libraries are called Rx(Java|Swift|Ruby|PHP|js|$LANG).

Paradigm: [http://reactivex.io/](http://reactivex.io/) Implementations:
[http://reactivex.io/languages.html](http://reactivex.io/languages.html)

That being said the editor looks very cool! Congrats on shipping!

~~~
mlevental
people bring this kind of thing up in every thread as if it's a useful comment
for either the reader or the poster (presumably project author). it's almost
as common as "this page sucks on mobile".

who cares? we all know how to use Google by now to narrow results by adding
qualifying keywords to the query; it's not like I'm just going to search "rx"
or even "rx rust" when I'm looking for this project (probably "rx rust
pixel"). it's a complete non-issue.

~~~
nonconvergent
I care. Also it's a potential legal issue for any given project if there's a
registered trademark involved.

Plus first result for "rx rust" lead me to
[https://github.com/ReactiveX/RxRust](https://github.com/ReactiveX/RxRust)

~~~
johnisgood
> Also it's a potential legal issue for any given project if there's a
> registered trademark involved.

At some point we will have to generate random strings for the name of our
projects because all the "good" (or even "bad") ones are taken. :P

~~~
nonconvergent
Already a thing:
[https://namelix.com/app/?keywords=poop+scoop](https://namelix.com/app/?keywords=poop+scoop)

Highlights for a "poop+scoop" related startup include: Flingo, Trash.ly,
Fastpoop, Stinkere, Guunk, and Spoop

~~~
Waterluvian
I'm surprised it didn't come up with Scoopr.

------
sprash
How is "implemented in Rust" relevant for anything but bragging rights for
using some obscure programming language.

Your software has not more inherent value just because it is written in Rust.

~~~
Jallal
Rust is far from being "an obscure programming language", and I'm pretty sure
there are people here on HN that may find useful to browse the source code of
a real world application in Rust (and who don't give a shit about the software
per se).

Such comment would have made sense if this software was promoted in a more
general board/website, but HN audience is mostly compound by developers, so
technical aspects matter. On top of that, it also gives an idea about the
popularity of a programming language.

