From 6109122c9b6c1e69decf176f0e37e80b0ce668c2 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 27 Mar 2005 05:29:56 +0000 Subject: [PATCH] Implemented screen to screen blit and cleaned up header. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12067 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/drawing/AccelerantDriver.cpp | 24 +++- src/servers/app/drawing/AccelerantDriver.h | 122 ++++++++++--------- 2 files changed, 86 insertions(+), 60 deletions(-) diff --git a/src/servers/app/drawing/AccelerantDriver.cpp b/src/servers/app/drawing/AccelerantDriver.cpp index c887d0b415..f0b62e9230 100644 --- a/src/servers/app/drawing/AccelerantDriver.cpp +++ b/src/servers/app/drawing/AccelerantDriver.cpp @@ -193,7 +193,8 @@ AccelerantDriver::Initialize() accSetCursorShape = (set_cursor_shape)accelerant_hook(B_SET_CURSOR_SHAPE,NULL); accMoveCursor = (move_cursor)accelerant_hook(B_MOVE_CURSOR,NULL); accShowCursor = (show_cursor)accelerant_hook(B_SHOW_CURSOR,NULL); - + accScreenBlit = (screen_to_screen_blit)accelerant_hook(B_SCREEN_TO_SCREEN_BLIT, NULL); + #ifdef DRAW_TEST // Commented out to remove a couple warnings // RGBColor red(255,0,0,0); @@ -1229,6 +1230,27 @@ AccelerantDriver::GetDepthFromColorspace(int space) void AccelerantDriver::Blit(const BRect &src, const BRect &dest, const DrawData *d) { +#ifndef DISABLE_HARDWARE_ACCELERATION + if (accScreenBlit && AcquireEngine) { + if (AcquireEngine(0, 0, NULL, &mEngineToken) == B_OK) { + blit_params blitParams; + blitParams.src_left = (uint16)src.left; + blitParams.src_top = (uint16)src.top; + blitParams.dest_left = (uint16)dest.left; + blitParams.dest_top = (uint16)dest.top; + blitParams.width = (int16)src.Width() - 1; + blitParams.height = (int16)src.Height() - 1; + + accScreenBlit(mEngineToken, &blitParams, 1); + + if (ReleaseEngine) + ReleaseEngine(mEngineToken, NULL); + + Unlock(); + return; + } + } +#endif } void diff --git a/src/servers/app/drawing/AccelerantDriver.h b/src/servers/app/drawing/AccelerantDriver.h index 161810f11c..50a58acd4f 100644 --- a/src/servers/app/drawing/AccelerantDriver.h +++ b/src/servers/app/drawing/AccelerantDriver.h @@ -39,82 +39,86 @@ class ServerBitmap; class ServerCursor; -class AccelerantDriver : public DisplayDriverImpl -{ +class AccelerantDriver : public DisplayDriverImpl { public: - AccelerantDriver(); - ~AccelerantDriver(); + AccelerantDriver(); + ~AccelerantDriver(); - bool Initialize(); - void Shutdown(); +virtual bool Initialize(); +virtual void Shutdown(); /* - virtual bool Lock(bigtime_t timeout = B_INFINITE_TIMEOUT); - virtual void Unlock(void); +virtual bool Lock(bigtime_t timeout = B_INFINITE_TIMEOUT); +virtual void Unlock(void); */ - virtual void SetMode(const int32 &mode); - virtual void SetMode(const display_mode &mode); +virtual void SetMode(const int32 &mode); +virtual void SetMode(const display_mode &mode); - virtual bool DumpToFile(const char *path); - virtual void InvertRect(const BRect &r); - virtual void StrokeLineArray(const int32 &numlines, const LineArrayData *linedata,const DrawData *d); +virtual bool DumpToFile(const char *path); +virtual void InvertRect(const BRect &r); +virtual void StrokeLineArray(const int32 &numlines, const LineArrayData *linedata,const DrawData *d); /* - virtual status_t SetDPMSMode(const uint32 &state); - virtual uint32 DPMSMode() const; - virtual uint32 DPMSCapabilities() const; +virtual status_t SetDPMSMode(const uint32 &state); +virtual uint32 DPMSMode() const; +virtual uint32 DPMSCapabilities() const; */ - virtual status_t GetDeviceInfo(accelerant_device_info *info); - virtual status_t GetModeList(display_mode **mode_list, uint32 *count); - virtual status_t GetPixelClockLimits(display_mode *mode, uint32 *low, uint32 *high); - virtual status_t GetTimingConstraints(display_timing_constraints *dtc); - virtual status_t ProposeMode(display_mode *candidate, const display_mode *low, const display_mode *high); - virtual status_t WaitForRetrace(bigtime_t timeout=B_INFINITE_TIMEOUT); +virtual status_t GetDeviceInfo(accelerant_device_info *info); +virtual status_t GetModeList(display_mode **mode_list, uint32 *count); +virtual status_t GetPixelClockLimits(display_mode *mode, uint32 *low, uint32 *high); +virtual status_t GetTimingConstraints(display_timing_constraints *dtc); +virtual status_t ProposeMode(display_mode *candidate, const display_mode *low, const display_mode *high); +virtual status_t WaitForRetrace(bigtime_t timeout=B_INFINITE_TIMEOUT); protected: - virtual bool AcquireBuffer(FBBitmap *bmp); - virtual void ReleaseBuffer(void); +virtual bool AcquireBuffer(FBBitmap *bmp); +virtual void ReleaseBuffer(void); - void BlitBitmap(ServerBitmap *sourcebmp, BRect sourcerect, BRect destrect, drawing_mode mode=B_OP_COPY); - void ExtractToBitmap(ServerBitmap *destbmp, BRect destrect, BRect sourcerect); - rgb_color GetBlitColor(rgb_color src, rgb_color dest, LayerData *d, bool use_high=true); - int OpenGraphicsDevice(int deviceNumber); - int GetModeFromResolution(int width, int height, int space); - int GetWidthFromMode(int mode); - int GetHeightFromMode(int mode); - int GetDepthFromMode(int mode); - int GetDepthFromColorspace(int space); + void BlitBitmap(ServerBitmap *sourcebmp, BRect sourcerect, BRect destrect, drawing_mode mode=B_OP_COPY); + void ExtractToBitmap(ServerBitmap *destbmp, BRect destrect, BRect sourcerect); + rgb_color GetBlitColor(rgb_color src, rgb_color dest, LayerData *d, bool use_high=true); + int OpenGraphicsDevice(int deviceNumber); + int GetModeFromResolution(int width, int height, int space); + int GetWidthFromMode(int mode); + int GetHeightFromMode(int mode); + int GetDepthFromMode(int mode); + int GetDepthFromColorspace(int space); // Support functions for the rest of the driver - virtual void Blit(const BRect &src, const BRect &dest, const DrawData *d); - virtual void FillSolidRect(const BRect &rect, const RGBColor &color); - virtual void FillPatternRect(const BRect &rect, const DrawData *d); - virtual void StrokeSolidLine(int32 x1, int32 y1, int32 x2, int32 y2, const RGBColor &color); - virtual void StrokePatternLine(int32 x1, int32 y1, int32 x2, int32 y2, const DrawData *d); - virtual void StrokeSolidRect(const BRect &rect, const RGBColor &color); - virtual void CopyBitmap(ServerBitmap *bitmap, const BRect &source, const BRect &dest, const DrawData *d); - virtual void CopyToBitmap(ServerBitmap *target, const BRect &source); - - ServerCursor *cursor, *under_cursor; +virtual void Blit(const BRect &src, const BRect &dest, const DrawData *d); +virtual void FillSolidRect(const BRect &rect, const RGBColor &color); +virtual void FillPatternRect(const BRect &rect, const DrawData *d); +virtual void StrokeSolidLine(int32 x1, int32 y1, int32 x2, int32 y2, const RGBColor &color); +virtual void StrokePatternLine(int32 x1, int32 y1, int32 x2, int32 y2, const DrawData *d); +virtual void StrokeSolidRect(const BRect &rect, const RGBColor &color); +virtual void CopyBitmap(ServerBitmap *bitmap, const BRect &source, const BRect &dest, const DrawData *d); +virtual void CopyToBitmap(ServerBitmap *target, const BRect &source); - BRect cursorframe; - int card_fd; - image_id accelerant_image; - GetAccelerantHook accelerant_hook; - engine_token *mEngineToken; - acquire_engine AcquireEngine; - release_engine ReleaseEngine; - fill_rectangle accFillRect; - invert_rectangle accInvertRect; - set_cursor_shape accSetCursorShape; - move_cursor accMoveCursor; - show_cursor accShowCursor; - frame_buffer_config mFrameBufferConfig; - int mode_count; - display_mode *mode_list; - display_mode R5DisplayMode; // This should go away once we stop running under r5 + ServerCursor *cursor; + ServerCursor *under_cursor; + BRect cursorframe; + + int card_fd; + image_id accelerant_image; + GetAccelerantHook accelerant_hook; + engine_token *mEngineToken; + acquire_engine AcquireEngine; + release_engine ReleaseEngine; + + // accelerant hooks + fill_rectangle accFillRect; + invert_rectangle accInvertRect; + set_cursor_shape accSetCursorShape; + move_cursor accMoveCursor; + show_cursor accShowCursor; + screen_to_screen_blit accScreenBlit; + + frame_buffer_config mFrameBufferConfig; + int mode_count; + display_mode *mode_list; + display_mode R5DisplayMode; // This should go away once we stop running under r5 }; #endif