On Fri, 6 Mar 2020 at 05:04, Zebediah Figura z.figura12@gmail.com wrote:
- if (set_rasterizer_state)
- {
struct wined3d_rasterizer_state *rasterizer_state;
struct wined3d_rasterizer_state_desc desc;
struct wine_rb_entry *entry;
desc.fill_mode = state->rs[WINED3D_RS_FILLMODE];
desc.front_ccw = FALSE;
desc.depth_bias_clamp = 0.0f;
desc.depth_clip = TRUE;
if ((entry = wine_rb_get(&device->rasterizer_states, &desc)))
{
rasterizer_state = WINE_RB_ENTRY_VALUE(entry, struct wined3d_rasterizer_state, entry);
wined3d_device_set_rasterizer_state(device, rasterizer_state);
}
...
+static int wined3d_rasterizer_state_compare(const void *key, const struct wine_rb_entry *entry) +{
- const struct wined3d_rasterizer_state *state = WINE_RB_ENTRY_VALUE(entry, struct wined3d_rasterizer_state, entry);
- return memcmp(&state->desc, key, sizeof(state->desc));
+}
This works, but note that it's a little fragile; you're depending on there not being any holes or padding in the wined3d_rasterizer_state_desc structure.