Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
thedocruby committed Nov 6, 2023
1 parent dcb24db commit 6055732
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,42 @@

###### _Ya know, my momma always said everything's better with Gravy..._

**Gravy** is a shader programming framework built on the union of the GPU and the [Rust Programming Language](https://www.rust-lang.org/). Gravy brings amazing features to shader development, such as **custom data structures** and even **dependency/library support**, to name a few. With Gravy, you can build off of the work of other shader devs without the need to copy-paste code from a blog, or fork someone else's code. This is the future of the shaderdev.
**Gravy** is a shader programming framework and toolkit built on the union of GPU programming and the [Rust Programming Language](https://www.rust-lang.org/). Gravy brings amazing features to shader development, such as **custom data structures**, **node-based pipelining**, and even **package manager support**. With Gravy, you can implement existing techniques with a simple package install, and construct novel techniques with the latest programming tools, all while effortlessly building and testing your render pipeline. **This is the future of the shaderdev.**

## What is Gravy?

**Gravy** sits in a niche with the likes of [**Shadertoy**](https://www.shadertoy.com/) and Unity's [**ShaderGraph**](https://unity.com/features/shader-graph) but stands apart in some key ways:

- **Gravy is a library.** You can build other applications on top of `gravylib` like building a game on a game engine, or like building a web browser on `curl`. The possibilities are endless
- **Gravy is a framework *and* a toolkit.** You can build other applications on top of `gravylib` in flexible ways. You can use it as a a framework, like a game engine, or you can use it as a toolkit, like `raylib`. The possibilities are endless.
- **Gravy is a development environment.** Like Shadertoy, Gravy gives you the power to build amazing and beautiful shader programs, without having to worry about asset loading, windowing, i/o, graphics APIs, etc. You can focus on building your masterpiece, and leave the dirty work to us.
- **Gravy is a node graph.** Like ShaderGraph, `gravylib` allows you to build your shader program quickly and intuitively with a simple node-based API. Eventually, the Gravy IDE will even have a built-in visual node editor!
- **Gravy is a node graph.** Like ShaderGraph, `gravylib` allows you to build your shader program quickly and intuitively with a simple node-oriented API. Eventually, the Gravy IDE will even have a built-in visual node editor!
- **Gravy is Rusty.** Featuring a core built on Embark's [`rust-gpu`](https://github.com/EmbarkStudios/rust-gpu), `gravylib` lets you leverage the power of the beautiful [Rust Programming Language](https://www.rust-lang.org/), to make more complex and powerful shaders than ever possible before, and all without the need to write everything by hand.


#### *For the nerds:*

*More technically, `gravylib` is an attempt to build a modern programming framework for GPU-first development. It builds on [`rust-gpu`](https://github.com/EmbarkStudios/rust-gpu) as a backend to convert Rust syntax into a GPU program, and then makes use of [`wgpu`](https://github.com/gfx-rs/wgpu) and [`winit`](https://github.com/rust-windowing/winit) to run the program with cross-platform support. Gravy is usable as a standalone Rust library crate (`gravylib`), but the goal is to build an IDE-like experience on top of `gravylib` to make GPU-first development simple and accessible for all developers.*
*More technically, `gravylib` is an attempt to build a modern programming framework and development toolkit to enable GPU-first development. It builds on [`rust-gpu`](https://github.com/EmbarkStudios/rust-gpu) as a backend to convert Rust syntax into a GPU program, and then makes use of [`wgpu`](https://github.com/gfx-rs/wgpu) and [`winit`](https://github.com/rust-windowing/winit) to run the program with cross-platform support. Gravy is usable as a standalone Rust library crate (`gravylib`), but the goal is to build an IDE-like experience on top of `gravylib` to make GPU-first development simple and accessible for all developers.*

## Why Gravy?

Perhaps the most compelling feature of Gravy is **shader crates**. Using Rust's [official package manager](https://github.com/rust-lang/cargo) and [public user repository](https://crates.io/), you can build your own Rust packages (called *crates*) with Gravy's shader framework, and **publish them for anyone to use**. Gone are the days of copy-pasting code from another dev's blog just to implement a standard technique. With package manager support, you can use the latest tools and techniques in your own piplene just by adding the package to your project. When you start using shader crates, shader development quickly becomes more powerful and more dev-friendly at the same time.

On top of that, Gravy takes Still, Rust has more to give to shader devs; It's also the most developer friendly language of our age, **rated highest in developer satisfaction for the last 8 years!**[^1] For an industry plagued by confusing errors and complex code bases, this is a much needed improvement. It also lowers the barrier to entry for learning shader development, by using a language people already know and love, instead of requiring developers to learn an entirely new language.

> `## Why Gravy? (TODO)`
But it doesn't end there. Gravy empowers the devs of today to create the **digital masterpieces of tomorrow**, with powerful features like **node-based render graphs**, **platform-agnostic APIs**, and more. **This is the future of shader dev.**

> `## Where do I start? (TODO, merge with below)`
## Where do I start?

### NOTE:
This project is still a **Work In Progress**, so it's not recommended to use it in it's current state.
**_However_**, if you would like to try it out, head over to the [`official example repo`](https://github.com/thedocruby/gravylib_examples) for a tutorial of sorts. Pull requests are discouraged until the initial alpha release.
If you would like to try it out, head over to the [official example repo](https://github.com/thedocruby/gravylib_examples) for a tutorial of sorts.
**_However_**, this project is still a **Work In Progress**: The structure and API is in a highly fluid state and is constantly being reworked. Keep this in mind before starting any big projects.

To learn more about the project, you can join the [**Discord**](https://discord.gg/7cBw5KHe6q).

## How can I help?

As stated above, the structure is constantly changing, so Pull Requests are discouraged until the initial alpha release.

**That being said,** if you think you could help with any of the unfinished tasks below, please reach out to me on [**Discord**](https://discord.gg/7cBw5KHe6q). I'd love to work with you!

## Alpha release checklist (v0.1.0)
**(SUBJECT TO CHANGE, NO ETA)**

Expand All @@ -37,8 +47,9 @@ To learn more about the project, you can join the [**Discord**](https://discord.
- [x] Use macros to reduce boilerplate
- [x] Upgrade wgpu version
- [x] Upgrade winit version
- [x] Isolate examples (https://github.com/thedocruby/gravylib_examples)
- [x] Isolate examples (they live [here](https://github.com/thedocruby/gravylib_examples) now)
- [ ] Implement hot reloading
- [ ] Basic image buffer support
- [ ] More examples from shadertoy
- [ ] Make a custom example or two to showcase rust features in shaders
- [ ] Add an example library shader crate to showcase dependency powers
Expand All @@ -52,3 +63,5 @@ To learn more about the project, you can join the [**Discord**](https://discord.
- [ ] Shiny new README (with images!)
- [ ] Branding? Logo? Website? mdBook?
- [ ] Release on crates.io

[^1]: According to the [Annual Stack Overflow Developer Survey](https://survey.stackoverflow.co/), Rust has been voted as most loved/most admired language by developers every year since 2015.

0 comments on commit 6055732

Please sign in to comment.