root/src/tests/servers/app/newerClipping/drawing/AccelerantHWInterface.h
/*
 * Copyright 2005, Haiku.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Michael Lotz <mmlr@mlotz.ch>
 *              Stephan Aßmus <superstippi@gmx.de>
 */
#ifndef ACCELERANT_HW_INTERFACE_H
#define ACCELERANT_HW_INTERFACE_H


#include <image.h>

#include <Accelerant.h>
#include <Locker.h>
#include <Region.h>
#include <String.h>

//class MallocBuffer;
//class AccelerantBuffer;


class AccelerantHWInterface : public BLocker/* : public HWInterface*/ {
public:
                                                                AccelerantHWInterface();
        virtual                                         ~AccelerantHWInterface();

        virtual status_t                        Initialize();
        virtual status_t                        Shutdown();

/*      virtual status_t                        SetMode(const display_mode &mode);
        virtual void                            GetMode(display_mode *mode);

        virtual status_t                        GetDeviceInfo(accelerant_device_info *info);
        virtual status_t                        GetFrameBufferConfig(frame_buffer_config& config);

        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 sem_id                          RetraceSemaphore();
        virtual status_t                        WaitForRetrace(bigtime_t timeout = B_INFINITE_TIMEOUT);

        virtual status_t                        SetDPMSMode(const uint32 &state);
        virtual uint32                          DPMSMode();
        virtual uint32                          DPMSCapabilities();*/

        // query for available hardware accleration and perform it
        virtual uint32                          AvailableHWAcceleration() const;

        virtual void                            CopyRegion(const clipping_rect* sortedRectList,
                                                                                   uint32 count,
                                                                                   int32 xOffset, int32 yOffset);
        virtual void                            FillRegion(/*const*/ BRegion& region,
                                                                                   const rgb_color& color);
        virtual void                            InvertRegion(/*const*/ BRegion& region);

        // cursor handling
/*virtual       void                                    SetCursor(ServerCursor* cursor);
virtual void                                    SetCursorVisible(bool visible);
virtual void                                    MoveCursorTo(const float& x,
                                                                                         const float& y);*/

        // frame buffer access
//virtual       RenderingBuffer*                FrontBuffer() const;
//virtual       RenderingBuffer*                BackBuffer() const;
//virtual       bool                                    IsDoubleBuffered() const;

protected:
//virtual       void                                    _DrawCursor(BRect area) const;

private:
                int                                             _OpenGraphicsDevice(int deviceNumber);
                status_t                                _OpenAccelerant(int device);
                status_t                                _SetupDefaultHooks();
                status_t                                _UpdateModeList();
                status_t                                _UpdateFrameBufferConfig();
                void                                    _RegionToRectParams(/*const*/ BRegion* region,
                                                                                                        fill_rect_params** params,
                                                                                                        uint32* count) const;
                uint32                                  _NativeColor(const rgb_color& color) const;

                int                                             fCardFD;
                image_id                                fAccelerantImage;
                GetAccelerantHook               fAccelerantHook;
                engine_token                    *fEngineToken;
                sync_token                              fSyncToken;

                // required hooks - guaranteed to be valid
                acquire_engine                  fAccAcquireEngine;
                release_engine                  fAccReleaseEngine;
                sync_to_token                   fAccSyncToToken;
                accelerant_mode_count   fAccGetModeCount;
                get_mode_list                   fAccGetModeList;
                get_frame_buffer_config fAccGetFrameBufferConfig;
                set_display_mode                fAccSetDisplayMode;
                get_display_mode                fAccGetDisplayMode;
                get_pixel_clock_limits  fAccGetPixelClockLimits;

                // optional accelerant hooks
                get_timing_constraints  fAccGetTimingConstraints;
                propose_display_mode    fAccProposeDisplayMode;
                fill_rectangle                  fAccFillRect;
                invert_rectangle                fAccInvertRect;
                screen_to_screen_blit   fAccScreenBlit;
                set_cursor_shape                fAccSetCursorShape;
                move_cursor                             fAccMoveCursor;
                show_cursor                             fAccShowCursor;                                 

                BString                                 fCardNameInDevFS;
                // dpms hooks
/*              dpms_capabilities               fAccDPMSCapabilities;
                dpms_mode                               fAccDPMSMode;
                set_dpms_mode                   fAccSetDPMSMode;

                frame_buffer_config             fFrameBufferConfig;
                int                                             fModeCount;
                display_mode                    *fModeList;*/


//              MallocBuffer                    *fBackBuffer;
//              AccelerantBuffer                *fFrontBuffer;


//              display_mode                    fDisplayMode;
};

#endif // ACCELERANT_HW_INTERFACE_H