rust-gpu icon indicating copy to clipboard operation
rust-gpu copied to clipboard

need to assign the result of texture fetches to an explicitly Vec4 variable, before actually using it as something smaller

Open oisyn opened this issue 3 years ago • 0 comments

Currently, this doesn't work:

let pixel = image.fetch(coords);

Because fetch needs to infer the return type. So you have to write this:

let pixel: Vec4 = image.fetch(coords);

This also implies you cannot do something like:

let result = calculate(image.fetch(coords).xy + somevec);

Although it's nice to be able to use your own vector library with rust-gpu, this inconvenience makes writing shaders a bit of a pain in the rear end.

But there is a solution. As fetch and similar functions require some input, we can combine the different vector types into a single "vector type library" type that's referenced by all vector types. So by having a certain implementation of Vertor<T,N>, we can look up another Vector<T2,N2> from the same implementing library.

This way, in above example, fetch can simply return a concrete Vector<f32,4> type based on the concrete type of coords, which is likely coming from the same vector library.

oisyn avatar Aug 10 '22 14:08 oisyn