bevy/examples/shader
Matthew Taylor 50a44417ba Derive AsBindGroup Improvements: Better errors, more options, update examples (#5364)
# Objective

- Provide better compile-time errors and diagnostics.
- Add more options to allow more textures types and sampler types.
- Update array_texture example to use upgraded AsBindGroup derive macro.

## Solution

Split out the parsing of the inner struct/field attributes (the inside part of a `#[foo(...)]` attribute) for better clarity

Parse the binding index for all inner attributes, as it is part of all attributes (`#[foo(0, ...)`), then allow each attribute implementer to parse the rest of the attribute metadata as needed. This should make it very trivial to extend/change if needed in the future.

Replaced invocations of `panic!` with the `syn::Error` type, providing fine-grained errors that retains span information. This provides much nicer compile-time errors, and even better IDE errors.

![image](https://user-images.githubusercontent.com/7478134/179452241-6d85d440-4b67-44da-80a7-9d47e8c88b8a.png)

Updated the array_texture example to demonstrate the new changes.

## New AsBindGroup attribute options


### `#[texture(u32, ...)]`
Where `...` is an optional list of arguments.
| Arguments    	| Values                                                         	| Default |
|--------------	|----------------------------------------------------------------	| ----------- |
| dimension = "..."    	| `"1d"`, `"2d"`, `"2d_array"`, `"3d"`, `"cube"`, `"cube_array"` 	|    `"2d"`    |
| sample_type = "..."  	| `"float"`, `"depth"`, `"s_int"` or `"u_int"`                   	|    `"float"`    |
| filterable = ...   	| `true`, `false`                                                	|    `true`     |
| multisampled = ... 	| `true`, `false`                                                	|    `false` |
| visibility(...) 	| `all`, `none`, or a list-combination of `vertex`, `fragment`, `compute` |   `vertex`, `fragment`   |

Example: `#[texture(0, dimension = "2d_array", visibility(vertex, fragment))]`


### `#[sampler(u32, ...)]`
Where `...` is an optional list of arguments.
| Arguments 	| Values                                            	| Default |
|-----------	|---------------------------------------------------	| ----------- |
| sampler_type = "..."   	| `"filtering"`, `"non_filtering"`, `"comparison"`. 	|  `"filtering"`  |
| visibility(...) 	| `all`, `none`, or a list-combination of `vertex`, `fragment`, `compute` |   `vertex`, `fragment`   |

Example: `#[sampler(0, sampler_type = "filtering", visibility(vertex, fragment)]`

## Changelog

- Added more options to `#[texture(...)]` and `#[sampler(...)]` attributes, supporting more kinds of materials. See above for details.
- Upgraded IDE and compile-time error messages.
- Updated array_texture example using the new options.
2022-07-19 22:05:43 +00:00
..
animate_shader.rs Update codebase to use IntoIterator where possible. (#5269) 2022-07-11 15:28:50 +00:00
array_texture.rs Derive AsBindGroup Improvements: Better errors, more options, update examples (#5364) 2022-07-19 22:05:43 +00:00
compute_shader_game_of_life.rs update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00
custom_vertex_attribute.rs Better Materials: AsBindGroup trait and derive, simpler Material trait (#5053) 2022-06-30 23:48:46 +00:00
post_processing.rs Support AsBindGroup for 2d materials as well (#5312) 2022-07-16 00:20:04 +00:00
shader_defs.rs Better Materials: AsBindGroup trait and derive, simpler Material trait (#5053) 2022-06-30 23:48:46 +00:00
shader_instancing.rs Update codebase to use IntoIterator where possible. (#5269) 2022-07-11 15:28:50 +00:00
shader_material.rs Better Materials: AsBindGroup trait and derive, simpler Material trait (#5053) 2022-06-30 23:48:46 +00:00
shader_material_glsl.rs Update shader_material_glsl example to include texture sampling (#5215) 2022-07-08 01:14:22 +00:00
shader_material_screenspace_texture.rs Better Materials: AsBindGroup trait and derive, simpler Material trait (#5053) 2022-06-30 23:48:46 +00:00