ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/SDL/video_sdl.cpp
(Generate patch)

Comparing BasiliskII/src/SDL/video_sdl.cpp (file contents):
Revision 1.5 by gbeauche, 2004-06-24T21:46:55Z vs.
Revision 1.7 by gbeauche, 2004-06-26T15:22:01Z

# Line 35 | Line 35
35   *  - Events processing is bound to the general emulation thread as SDL requires
36   *    to PumpEvents() within the same thread as the one that called SetVideoMode().
37   *    Besides, there can't seem to be a way to call SetVideoMode() from a child thread.
38 + *  - Refresh performance is still slow. Use SDL_CreateRGBSurface()?
39 + *  - Backport hw cursor acceleration to Basilisk II?
40 + *  - Move generic Native QuickDraw acceleration routines to gfxaccel.cpp
41   */
42  
43   #include "sysdeps.h"
# Line 96 | Line 99 | static volatile bool redraw_thread_cance
99   static SDL_Thread *redraw_thread = NULL;                        // Redraw thread
100  
101   #ifdef ENABLE_VOSF
102 < static bool use_vosf = true;                                            // Flag: VOSF enabled
102 > static bool use_vosf = false;                                           // Flag: VOSF enabled
103   #else
104   static const bool use_vosf = false;                                     // VOSF not possible
105   #endif
# Line 114 | Line 117 | static int keycode_table[256];                                         // X
117  
118   // SDL variables
119   static int screen_depth;                                                        // Depth of current screen
120 + static SDL_Cursor *sdl_cursor;                                          // Copy of Mac cursor
121 + static volatile bool cursor_changed = false;            // Flag: cursor changed, redraw_func must update the cursor
122   static SDL_Color sdl_palette[256];                                      // Color palette to be used as CLUT and gamma table
123   static bool sdl_palette_changed = false;                        // Flag: Palette changed, redraw thread must set new colors
124   static const int sdl_eventmask = SDL_MOUSEBUTTONDOWNMASK | SDL_MOUSEBUTTONUPMASK | SDL_MOUSEMOTIONMASK | SDL_KEYUPMASK | SDL_KEYDOWNMASK | SDL_VIDEOEXPOSEMASK | SDL_QUITMASK;
# Line 255 | Line 260 | static void ErrorAlert(int error)
260   {
261          ErrorAlert(GetString(error));
262   }
263 +
264 + // Display warning alert
265 + static void WarningAlert(int warning)
266 + {
267 +        WarningAlert(GetString(warning));
268 + }
269   #endif
270  
271  
# Line 619 | Line 630 | driver_window::driver_window(SDL_monitor
630          the_buffer = (uint8 *)vm_acquire(the_buffer_size);
631          the_buffer_copy = (uint8 *)malloc(the_buffer_size);
632          D(bug("the_buffer = %p, the_buffer_copy = %p, the_host_buffer = %p\n", the_buffer, the_buffer_copy, the_host_buffer));
633 +
634 +        // Check whether we can initialize the VOSF subsystem and it's profitable
635 +        if (!video_vosf_init(m)) {
636 +                WarningAlert(STR_VOSF_INIT_ERR);
637 +                use_vosf = false;
638 +        }
639 +        else if (!video_vosf_profitable()) {
640 +                video_vosf_exit();
641 +                // WarningAlert(STR_VOSF_NOT_PROFITABLE_WARN);
642 +                printf("VOSF acceleration is not profitable on this platform\n");
643 +                use_vosf = false;
644 +        }
645 +        if (!use_vosf) {
646 +                free(the_buffer_copy);
647 +                vm_release(the_buffer, the_buffer_size);
648 +                the_host_buffer = NULL;
649 +        }
650 + #endif
651 +        if (!use_vosf) {
652 +                // Allocate memory for frame buffer
653 +                the_buffer_size = (aligned_height + 2) * s->pitch;
654 +                the_buffer_copy = (uint8 *)calloc(1, the_buffer_size);
655 +                the_buffer = (uint8 *)calloc(1, the_buffer_size);
656 +                D(bug("the_buffer = %p, the_buffer_copy = %p\n", the_buffer, the_buffer_copy));
657 +        }
658 +        
659 + #ifdef SHEEPSHAVER
660 +        // Create cursor
661 +        if ((sdl_cursor = SDL_CreateCursor(MacCursor + 4, MacCursor + 36, 16, 16, 0, 0)) != NULL) {
662 +                SDL_SetCursor(sdl_cursor);
663 +                cursor_changed = false;
664 +        }
665   #else
666 <        // Allocate memory for frame buffer
667 <        the_buffer_size = (aligned_height + 2) * s->pitch;
625 <        the_buffer_copy = (uint8 *)calloc(1, the_buffer_size);
626 <        the_buffer = (uint8 *)calloc(1, the_buffer_size);
627 <        D(bug("the_buffer = %p, the_buffer_copy = %p\n", the_buffer, the_buffer_copy));
666 >        // Hide cursor
667 >        SDL_ShowCursor(0);
668   #endif
669  
670          // Set window name/class
671          set_window_name(STR_WINDOW_TITLE);
672  
633        // Hide cursor
634        SDL_ShowCursor(0);
635
673          // Init blitting routines
674          SDL_PixelFormat *f = s->format;
675          VisualFormat visualFormat;
# Line 810 | Line 847 | bool SDL_monitor_desc::video_open(void)
847                  return false;
848          }
849  
813 #ifdef ENABLE_VOSF
814        if (use_vosf) {
815                // Initialize the VOSF system
816                if (!video_vosf_init(*this)) {
817                        ErrorAlert(STR_VOSF_INIT_ERR);
818                return false;
819                }
820        }
821 #endif
822        
850          // Initialize VideoRefresh function
851          VideoRefreshInit();
852  
# Line 1146 | Line 1173 | void SDL_monitor_desc::set_palette(uint8
1173                  }
1174  
1175   #ifdef ENABLE_VOSF
1176 <                // We have to redraw everything because the interpretation of pixel values changed
1177 <                LOCK_VOSF;
1178 <                PFLAG_SET_ALL;
1179 <                UNLOCK_VOSF;
1180 <                memset(the_buffer_copy, 0, VIDEO_MODE_ROW_BYTES * VIDEO_MODE_Y);
1176 >                if (use_vosf) {
1177 >                        // We have to redraw everything because the interpretation of pixel values changed
1178 >                        LOCK_VOSF;
1179 >                        PFLAG_SET_ALL;
1180 >                        UNLOCK_VOSF;
1181 >                        memset(the_buffer_copy, 0, VIDEO_MODE_ROW_BYTES * VIDEO_MODE_Y);
1182 >                }
1183   #endif
1184          }
1185  
# Line 1221 | Line 1250 | void SDL_monitor_desc::switch_to_current
1250   #ifdef SHEEPSHAVER
1251   bool video_can_change_cursor(void)
1252   {
1253 < //      return hw_mac_cursor_accl && (display_type != DISPLAY_SCREEN);
1225 <        return false;
1253 >        return (display_type == DISPLAY_WINDOW);
1254   }
1255   #endif
1256  
# Line 1234 | Line 1262 | bool video_can_change_cursor(void)
1262   #ifdef SHEEPSHAVER
1263   void video_set_cursor(void)
1264   {
1265 < //      cursor_changed = true;
1265 >        cursor_changed = true;
1266   }
1267   #endif
1268  
# Line 2158 | Line 2186 | static int redraw_func(void *arg)
2186                  // Refresh display
2187                  video_refresh();
2188  
2189 + #ifdef SHEEPSHAVER
2190 +                // Set new cursor image if it was changed
2191 +                if (cursor_changed && sdl_cursor) {
2192 +                        cursor_changed = false;
2193 +                        SDL_FreeCursor(sdl_cursor);
2194 +                        sdl_cursor = SDL_CreateCursor(MacCursor + 4, MacCursor + 36, 16, 16, MacCursor[2], MacCursor[3]);
2195 +                        if (sdl_cursor)
2196 +                                SDL_SetCursor(sdl_cursor);
2197 +                }
2198 + #endif
2199 +
2200                  // Set new palette if it was changed
2201                  handle_palette_changes();
2202          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines