trunk/src/osd/modules/render/d3d/d3dhlsl.c
| r250285 | r250286 | |
| 182 | 182 | { |
| 183 | 183 | master_enable = false; |
| 184 | 184 | vector_enable = true; |
| 185 | | prescale_size_x = 1; |
| 186 | | prescale_size_y = 1; |
| 187 | | prescale_force_x = 0; |
| 188 | | prescale_force_y = 0; |
| 185 | hlsl_prescale_x = 1; |
| 186 | hlsl_prescale_x = 1; |
| 189 | 187 | preset = -1; |
| 190 | 188 | shadow_texture = NULL; |
| 191 | 189 | options = NULL; |
| r250285 | r250286 | |
| 754 | 752 | this->machine = machine; |
| 755 | 753 | this->d3d = renderer; |
| 756 | 754 | |
| 757 | | master_enable = downcast<windows_options &>(machine->options()).d3d_hlsl_enable(); |
| 758 | | prescale_size_x = 1; |
| 759 | | prescale_size_y = 1; |
| 760 | | preset = downcast<windows_options &>(machine->options()).d3d_hlsl_preset(); |
| 755 | windows_options &winoptions = downcast<windows_options &>(machine->options()); |
| 756 | |
| 757 | master_enable = winoptions.d3d_hlsl_enable(); |
| 758 | hlsl_prescale_x = winoptions.d3d_hlsl_prescale_x(); |
| 759 | hlsl_prescale_y = winoptions.d3d_hlsl_prescale_y(); |
| 760 | snap_width = winoptions.d3d_snap_width(); |
| 761 | snap_height = winoptions.d3d_snap_height(); |
| 762 | preset = winoptions.d3d_hlsl_preset(); |
| 763 | |
| 761 | 764 | if (preset < -1 || preset > 3) |
| 762 | 765 | { |
| 763 | 766 | preset = -1; |
| 764 | 767 | } |
| 765 | 768 | |
| 766 | | snap_width = downcast<windows_options &>(machine->options()).d3d_snap_width(); |
| 767 | | snap_height = downcast<windows_options &>(machine->options()).d3d_snap_height(); |
| 768 | | prescale_force_x = 0; |
| 769 | | prescale_force_y = 0; |
| 770 | | |
| 771 | | windows_options &winoptions = downcast<windows_options &>(machine->options()); |
| 772 | | |
| 773 | 769 | options = (hlsl_options*)global_alloc_clear(hlsl_options); |
| 774 | 770 | |
| 775 | | options->params_dirty = true; |
| 776 | | strcpy(options->shadow_mask_texture, downcast<windows_options &>(machine->options()).screen_shadow_mask_texture()); // unsafe |
| 771 | // unsafe |
| 772 | strcpy(options->shadow_mask_texture, winoptions.screen_shadow_mask_texture()); |
| 777 | 773 | |
| 778 | | prescale_force_x = winoptions.d3d_hlsl_prescale_x(); |
| 779 | | prescale_force_y = winoptions.d3d_hlsl_prescale_y(); |
| 780 | 774 | if (preset == -1) |
| 781 | 775 | { |
| 782 | 776 | options->shadow_mask_alpha = winoptions.screen_shadow_mask_alpha(); |
| r250285 | r250286 | |
| 1456 | 1450 | texture_info *texture = poly->get_texture(); |
| 1457 | 1451 | |
| 1458 | 1452 | bool prepare_vector = |
| 1459 | | PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; |
| 1453 | (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; |
| 1454 | bool prepare_raster = |
| 1455 | (machine->first_screen()->screen_type() & SCREEN_TYPE_RASTER) == SCREEN_TYPE_RASTER; |
| 1460 | 1456 | bool orientation_swap_xy = |
| 1461 | 1457 | (d3d->window().machine().system().flags & ORIENTATION_SWAP_XY) == ORIENTATION_SWAP_XY; |
| 1462 | 1458 | bool rotation_swap_xy = |
| r250285 | r250286 | |
| 1481 | 1477 | curr_effect->set_int("RotationType", rotation_type); // backward compatibility |
| 1482 | 1478 | curr_effect->set_bool("PrepareBloom", prepare_bloom); |
| 1483 | 1479 | curr_effect->set_bool("PrepareVector", prepare_vector); |
| 1480 | curr_effect->set_bool("PrepareRaster", prepare_raster); |
| 1484 | 1481 | |
| 1485 | 1482 | next_index = rt->next_index(next_index); |
| 1486 | 1483 | blit(prepare_bloom ? rt->native_target[next_index] : rt->prescale_target[next_index], true, poly->get_type(), vertnum, poly->get_count()); |
| r250285 | r250286 | |
| 1493 | 1490 | int next_index = source_index; |
| 1494 | 1491 | |
| 1495 | 1492 | bool prepare_vector = |
| 1496 | | PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; |
| 1493 | (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; |
| 1497 | 1494 | float bloom_rescale = options->bloom_scale; |
| 1498 | 1495 | |
| 1499 | 1496 | // skip downsample if no influencing settings |
| r250285 | r250286 | |
| 1697 | 1694 | { |
| 1698 | 1695 | int next_index = source_index; |
| 1699 | 1696 | |
| 1700 | | bool prepare_vector = PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; |
| 1697 | bool prepare_vector = |
| 1698 | (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; |
| 1701 | 1699 | |
| 1702 | 1700 | curr_effect = default_effect; |
| 1703 | 1701 | curr_effect->update_uniforms(); |
| r250285 | r250286 | |
| 2058 | 2056 | |
| 2059 | 2057 | enumerate_screens(); |
| 2060 | 2058 | |
| 2061 | | hlsl_prescale_x = prescale_force_x; |
| 2062 | | hlsl_prescale_y = prescale_force_y; |
| 2063 | | |
| 2064 | 2059 | // Find the nearest prescale factor that is over our screen size |
| 2065 | 2060 | if (hlsl_prescale_x == 0) |
| 2066 | 2061 | { |
| r250285 | r250286 | |
| 2776 | 2771 | |
| 2777 | 2772 | shaders::slider_desc shaders::s_sliders[] = |
| 2778 | 2773 | { |
| 2779 | | { "Shadow Mask Darkness", 0, 0, 100, 1, slider_shadow_mask_alpha }, |
| 2780 | | { "Shadow Mask X Count", 1, 6, 1024, 1, slider_shadow_mask_x_count }, |
| 2781 | | { "Shadow Mask Y Count", 1, 6, 1024, 1, slider_shadow_mask_y_count }, |
| 2782 | | { "Shadow Mask Pixel Count X", 1, 6, 64, 1, slider_shadow_mask_usize }, |
| 2783 | | { "Shadow Mask Pixel Count Y", 1, 6, 64, 1, slider_shadow_mask_vsize }, |
| 2784 | | { "Shadow Mask Offset X", -100, 0, 100, 1, slider_shadow_mask_uoffset }, |
| 2785 | | { "Shadow Mask Offset Y", -100, 0, 100, 1, slider_shadow_mask_voffset }, |
| 2786 | | { "Screen Curvature", 0, 0, 100, 1, slider_curvature }, |
| 2787 | | { "Screen Round Corner", 0, 0, 100, 1, slider_round_corner }, |
| 2788 | | { "Screen Smooth Border", 0, 0, 100, 1, slider_smooth_border }, |
| 2789 | | { "Screen Reflection", 0, 0, 100, 1, slider_reflection }, |
| 2790 | | { "Image Vignetting", 0, 0, 100, 1, slider_vignetting }, |
| 2791 | | { "Scanline Darkness", 0, 100, 100, 1, slider_scanline_alpha }, |
| 2792 | | { "Scanline Screen Height", 1, 20, 80, 1, slider_scanline_scale }, |
| 2793 | | { "Scanline Indiv. Height", 1, 20, 80, 1, slider_scanline_height }, |
| 2794 | | { "Scanline Brightness", 0, 20, 40, 1, slider_scanline_bright_scale }, |
| 2795 | | { "Scanline Brightness Overdrive", 0, 0, 20, 1, slider_scanline_bright_offset }, |
| 2796 | | { "Scanline Jitter", 0, 0, 40, 1, slider_scanline_offset }, |
| 2797 | | { "Defocus X", 0, 0, 64, 1, slider_defocus_x }, |
| 2798 | | { "Defocus Y", 0, 0, 64, 1, slider_defocus_y }, |
| 2799 | | { "Red Position Offset X", -1500, 3, 1500, 1, slider_red_converge_x }, |
| 2800 | | { "Red Position Offset Y", -1500, 0, 1500, 1, slider_red_converge_y }, |
| 2801 | | { "Green Position Offset X", -1500, 0, 1500, 1, slider_green_converge_x }, |
| 2802 | | { "Green Position Offset Y", -1500, 3, 1500, 1, slider_green_converge_y }, |
| 2803 | | { "Blue Position Offset X", -1500, 3, 1500, 1, slider_blue_converge_x }, |
| 2804 | | { "Blue Position Offset Y", -1500, 3, 1500, 1, slider_blue_converge_y }, |
| 2805 | | { "Red Convergence X", -1500, 0, 1500, 1, slider_red_radial_converge_x }, |
| 2806 | | { "Red Convergence Y", -1500, 0, 1500, 1, slider_red_radial_converge_y }, |
| 2807 | | { "Green Convergence X", -1500, 0, 1500, 1, slider_green_radial_converge_x }, |
| 2808 | | { "Green Convergence Y", -1500, 0, 1500, 1, slider_green_radial_converge_y }, |
| 2809 | | { "Blue Convergence X", -1500, 0, 1500, 1, slider_blue_radial_converge_x }, |
| 2810 | | { "Blue Convergence Y", -1500, 0, 1500, 1, slider_blue_radial_converge_y }, |
| 2811 | | { "Red Output from Red Input", -400, 0, 400, 5, slider_red_from_r }, |
| 2812 | | { "Red Output from Green Input", -400, 0, 400, 5, slider_red_from_g }, |
| 2813 | | { "Red Output from Blue Input", -400, 0, 400, 5, slider_red_from_b }, |
| 2814 | | { "Green Output from Red Input", -400, 0, 400, 5, slider_green_from_r }, |
| 2815 | | { "Green Output from Green Input", -400, 0, 400, 5, slider_green_from_g }, |
| 2816 | | { "Green Output from Blue Input", -400, 0, 400, 5, slider_green_from_b }, |
| 2817 | | { "Blue Output from Red Input", -400, 0, 400, 5, slider_blue_from_r }, |
| 2818 | | { "Blue Output from Green Input", -400, 0, 400, 5, slider_blue_from_g }, |
| 2819 | | { "Blue Output from Blue Input", -400, 0, 400, 5, slider_blue_from_b }, |
| 2820 | | { "Saturation", 0, 140, 400, 1, slider_saturation }, |
| 2821 | | { "Red DC Offset", -100, 0, 100, 1, slider_red_offset }, |
| 2822 | | { "Green DC Offset", -100, 0, 100, 1, slider_green_offset }, |
| 2823 | | { "Blue DC Offset", -100, 0, 100, 1, slider_blue_offset }, |
| 2824 | | { "Red Scale", -200, 95, 200, 1, slider_red_scale }, |
| 2825 | | { "Green Scale", -200, 95, 200, 1, slider_green_scale }, |
| 2826 | | { "Blue Scale", -200, 95, 200, 1, slider_blue_scale }, |
| 2827 | | { "Red Gamma", -80, 16, 80, 1, slider_red_power }, |
| 2828 | | { "Green Gamma", -80, 16, 80, 1, slider_green_power }, |
| 2829 | | { "Blue Gamma", -80, 16, 80, 1, slider_blue_power }, |
| 2830 | | { "Red Floor", 0, 5, 100, 1, slider_red_floor }, |
| 2831 | | { "Green Floor", 0, 5, 100, 1, slider_green_floor }, |
| 2832 | | { "Blue Floor", 0, 5, 100, 1, slider_blue_floor }, |
| 2833 | | { "Red Phosphor Life", 0, 40, 100, 1, slider_red_phosphor_life }, |
| 2834 | | { "Green Phosphor Life", 0, 40, 100, 1, slider_green_phosphor_life }, |
| 2835 | | { "Blue Phosphor Life", 0, 40, 100, 1, slider_blue_phosphor_life }, |
| 2836 | | { "Vector Length Attenuation", 0, 80, 100, 1, slider_vector_attenuation }, |
| 2837 | | { "Vector Attenuation Length Limit", 1, 500, 1000, 1, slider_vector_length_max }, |
| 2838 | | { "Bloom Scale", 0, 250, 2000, 5, slider_bloom_scale }, |
| 2839 | | { "Bloom Red Overdrive", 0, 250, 2000, 5, slider_bloom_red_overdrive }, |
| 2840 | | { "Bloom Green Overdrive", 0, 250, 2000, 5, slider_bloom_green_overdrive }, |
| 2841 | | { "Bloom Blue Overdrive", 0, 250, 2000, 5, slider_bloom_blue_overdrive }, |
| 2842 | | { "Bloom Level 0 Scale", 0, 100, 100, 1, slider_bloom_lvl0_scale }, |
| 2843 | | { "Bloom Level 1 Scale", 0, 21, 100, 1, slider_bloom_lvl1_scale }, |
| 2844 | | { "Bloom Level 2 Scale", 0, 19, 100, 1, slider_bloom_lvl2_scale }, |
| 2845 | | { "Bloom Level 3 Scale", 0, 17, 100, 1, slider_bloom_lvl3_scale }, |
| 2846 | | { "Bloom Level 4 Scale", 0, 15, 100, 1, slider_bloom_lvl4_scale }, |
| 2847 | | { "Bloom Level 5 Scale", 0, 14, 100, 1, slider_bloom_lvl5_scale }, |
| 2848 | | { "Bloom Level 6 Scale", 0, 13, 100, 1, slider_bloom_lvl6_scale }, |
| 2849 | | { "Bloom Level 7 Scale", 0, 12, 100, 1, slider_bloom_lvl7_scale }, |
| 2850 | | { "Bloom Level 8 Scale", 0, 11, 100, 1, slider_bloom_lvl8_scale }, |
| 2851 | | { "Bloom Level 9 Scale", 0, 10, 100, 1, slider_bloom_lvl9_scale }, |
| 2852 | | { "Bloom Level 10 Scale", 0, 9, 100, 1, slider_bloom_lvl10_scale }, |
| 2853 | | { NULL, 0, 0, 0, 0, NULL }, |
| 2774 | { "Vector Length Attenuation", 0, 80, 100, 1, 2, slider_vector_attenuation }, |
| 2775 | { "Vector Attenuation Length Limit", 1, 500, 1000, 1, 2, slider_vector_length_max }, |
| 2776 | { "Shadow Mask Darkness", 0, 0, 100, 1, 7, slider_shadow_mask_alpha }, |
| 2777 | { "Shadow Mask X Count", 1, 6, 1024, 1, 7, slider_shadow_mask_x_count }, |
| 2778 | { "Shadow Mask Y Count", 1, 6, 1024, 1, 7, slider_shadow_mask_y_count }, |
| 2779 | { "Shadow Mask Pixel Count X", 1, 6, 64, 1, 7, slider_shadow_mask_usize }, |
| 2780 | { "Shadow Mask Pixel Count Y", 1, 6, 64, 1, 7, slider_shadow_mask_vsize }, |
| 2781 | { "Shadow Mask Offset X", -100, 0, 100, 1, 7, slider_shadow_mask_uoffset }, |
| 2782 | { "Shadow Mask Offset Y", -100, 0, 100, 1, 7, slider_shadow_mask_voffset }, |
| 2783 | { "Screen Curvature", 0, 0, 100, 1, 7, slider_curvature }, |
| 2784 | { "Screen Round Corner", 0, 0, 100, 1, 7, slider_round_corner }, |
| 2785 | { "Screen Smooth Border", 0, 0, 100, 1, 7, slider_smooth_border }, |
| 2786 | { "Screen Reflection", 0, 0, 100, 1, 7, slider_reflection }, |
| 2787 | { "Image Vignetting", 0, 0, 100, 1, 7, slider_vignetting }, |
| 2788 | { "Scanline Darkness", 0, 100, 100, 1, 1, slider_scanline_alpha }, |
| 2789 | { "Scanline Screen Height", 1, 20, 80, 1, 1, slider_scanline_scale }, |
| 2790 | { "Scanline Indiv. Height", 1, 20, 80, 1, 1, slider_scanline_height }, |
| 2791 | { "Scanline Brightness", 0, 20, 40, 1, 1, slider_scanline_bright_scale }, |
| 2792 | { "Scanline Brightness Overdrive", 0, 0, 20, 1, 1, slider_scanline_bright_offset }, |
| 2793 | { "Scanline Jitter", 0, 0, 40, 1, 1, slider_scanline_offset }, |
| 2794 | { "Defocus X", 0, 0, 64, 1, 3, slider_defocus_x }, |
| 2795 | { "Defocus Y", 0, 0, 64, 1, 3, slider_defocus_y }, |
| 2796 | { "Red Position Offset X", -1500, 3, 1500, 1, 3, slider_red_converge_x }, |
| 2797 | { "Red Position Offset Y", -1500, 0, 1500, 1, 3, slider_red_converge_y }, |
| 2798 | { "Green Position Offset X", -1500, 0, 1500, 1, 3, slider_green_converge_x }, |
| 2799 | { "Green Position Offset Y", -1500, 3, 1500, 1, 3, slider_green_converge_y }, |
| 2800 | { "Blue Position Offset X", -1500, 3, 1500, 1, 3, slider_blue_converge_x }, |
| 2801 | { "Blue Position Offset Y", -1500, 3, 1500, 1, 3, slider_blue_converge_y }, |
| 2802 | { "Red Convergence X", -1500, 0, 1500, 1, 3, slider_red_radial_converge_x }, |
| 2803 | { "Red Convergence Y", -1500, 0, 1500, 1, 3, slider_red_radial_converge_y }, |
| 2804 | { "Green Convergence X", -1500, 0, 1500, 1, 3, slider_green_radial_converge_x }, |
| 2805 | { "Green Convergence Y", -1500, 0, 1500, 1, 3, slider_green_radial_converge_y }, |
| 2806 | { "Blue Convergence X", -1500, 0, 1500, 1, 3, slider_blue_radial_converge_x }, |
| 2807 | { "Blue Convergence Y", -1500, 0, 1500, 1, 3, slider_blue_radial_converge_y }, |
| 2808 | { "Red Output from Red Input", -400, 0, 400, 5, 7, slider_red_from_r }, |
| 2809 | { "Red Output from Green Input", -400, 0, 400, 5, 7, slider_red_from_g }, |
| 2810 | { "Red Output from Blue Input", -400, 0, 400, 5, 7, slider_red_from_b }, |
| 2811 | { "Green Output from Red Input", -400, 0, 400, 5, 7, slider_green_from_r }, |
| 2812 | { "Green Output from Green Input", -400, 0, 400, 5, 7, slider_green_from_g }, |
| 2813 | { "Green Output from Blue Input", -400, 0, 400, 5, 7, slider_green_from_b }, |
| 2814 | { "Blue Output from Red Input", -400, 0, 400, 5, 7, slider_blue_from_r }, |
| 2815 | { "Blue Output from Green Input", -400, 0, 400, 5, 7, slider_blue_from_g }, |
| 2816 | { "Blue Output from Blue Input", -400, 0, 400, 5, 7, slider_blue_from_b }, |
| 2817 | { "Saturation", 0, 140, 400, 1, 7, slider_saturation }, |
| 2818 | { "Red DC Offset", -100, 0, 100, 1, 7, slider_red_offset }, |
| 2819 | { "Green DC Offset", -100, 0, 100, 1, 7, slider_green_offset }, |
| 2820 | { "Blue DC Offset", -100, 0, 100, 1, 7, slider_blue_offset }, |
| 2821 | { "Red Scale", -200, 95, 200, 1, 7, slider_red_scale }, |
| 2822 | { "Green Scale", -200, 95, 200, 1, 7, slider_green_scale }, |
| 2823 | { "Blue Scale", -200, 95, 200, 1, 7, slider_blue_scale }, |
| 2824 | { "Red Gamma", -80, 16, 80, 1, 7, slider_red_power }, |
| 2825 | { "Green Gamma", -80, 16, 80, 1, 7, slider_green_power }, |
| 2826 | { "Blue Gamma", -80, 16, 80, 1, 7, slider_blue_power }, |
| 2827 | { "Red Floor", 0, 5, 100, 1, 7, slider_red_floor }, |
| 2828 | { "Green Floor", 0, 5, 100, 1, 7, slider_green_floor }, |
| 2829 | { "Blue Floor", 0, 5, 100, 1, 7, slider_blue_floor }, |
| 2830 | { "Red Phosphor Life", 0, 40, 100, 1, 7, slider_red_phosphor_life }, |
| 2831 | { "Green Phosphor Life", 0, 40, 100, 1, 7, slider_green_phosphor_life }, |
| 2832 | { "Blue Phosphor Life", 0, 40, 100, 1, 7, slider_blue_phosphor_life }, |
| 2833 | { "Bloom Scale", 0, 250, 2000, 5, 7, slider_bloom_scale }, |
| 2834 | { "Bloom Red Overdrive", 0, 250, 2000, 5, 7, slider_bloom_red_overdrive }, |
| 2835 | { "Bloom Green Overdrive", 0, 250, 2000, 5, 7, slider_bloom_green_overdrive }, |
| 2836 | { "Bloom Blue Overdrive", 0, 250, 2000, 5, 7, slider_bloom_blue_overdrive }, |
| 2837 | { "Bloom Level 0 Scale", 0, 100, 100, 1, 7, slider_bloom_lvl0_scale }, |
| 2838 | { "Bloom Level 1 Scale", 0, 21, 100, 1, 7, slider_bloom_lvl1_scale }, |
| 2839 | { "Bloom Level 2 Scale", 0, 19, 100, 1, 7, slider_bloom_lvl2_scale }, |
| 2840 | { "Bloom Level 3 Scale", 0, 17, 100, 1, 7, slider_bloom_lvl3_scale }, |
| 2841 | { "Bloom Level 4 Scale", 0, 15, 100, 1, 7, slider_bloom_lvl4_scale }, |
| 2842 | { "Bloom Level 5 Scale", 0, 14, 100, 1, 7, slider_bloom_lvl5_scale }, |
| 2843 | { "Bloom Level 6 Scale", 0, 13, 100, 1, 7, slider_bloom_lvl6_scale }, |
| 2844 | { "Bloom Level 7 Scale", 0, 12, 100, 1, 7, slider_bloom_lvl7_scale }, |
| 2845 | { "Bloom Level 8 Scale", 0, 11, 100, 1, 7, slider_bloom_lvl8_scale }, |
| 2846 | { "Bloom Level 9 Scale", 0, 10, 100, 1, 7, slider_bloom_lvl9_scale }, |
| 2847 | { "Bloom Level 10 Scale", 0, 9, 100, 1, 7, slider_bloom_lvl10_scale }, |
| 2848 | { NULL, 0, 0, 0, 0, 0, NULL }, |
| 2854 | 2849 | }; |
| 2855 | 2850 | |
| 2856 | 2851 | slider_state *shaders::init_slider_list() |
| r250285 | r250286 | |
| 2867 | 2862 | for (int index = 0; s_sliders[index].name != NULL; index++) |
| 2868 | 2863 | { |
| 2869 | 2864 | slider_desc *slider = &s_sliders[index]; |
| 2870 | | *tailptr = slider_alloc(*machine, slider->name, slider->minval, slider->defval, slider->maxval, slider->step, slider->adjustor, (void*)options); |
| 2871 | | tailptr = &(*tailptr)->next; |
| 2865 | |
| 2866 | int screen_type = machine->first_screen()->screen_type(); |
| 2867 | if ((screen_type == SCREEN_TYPE_VECTOR && (slider->screen_type & SLIDER_SCREEN_TYPE_VECTOR) == SLIDER_SCREEN_TYPE_VECTOR) || |
| 2868 | (screen_type == SCREEN_TYPE_RASTER && (slider->screen_type & SLIDER_SCREEN_TYPE_RASTER) == SLIDER_SCREEN_TYPE_RASTER) || |
| 2869 | (screen_type == SCREEN_TYPE_LCD && (slider->screen_type & SLIDER_SCREEN_TYPE_LCD) == SLIDER_SCREEN_TYPE_LCD)) |
| 2870 | { |
| 2871 | *tailptr = slider_alloc(*machine, slider->name, slider->minval, slider->defval, slider->maxval, slider->step, slider->adjustor, (void*)options); |
| 2872 | tailptr = &(*tailptr)->next; |
| 2873 | } |
| 2872 | 2874 | } |
| 2873 | 2875 | |
| 2874 | 2876 | return listhead; |