1/* 2 * Copyright 2002-2009, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Michael Lotz <mmlr@mlotz.ch> 7 * DarkWyrm <bpmagic@columbus.rr.com> 8 * Stephan A��mus <superstippi@gmx.de> 9 */ 10 11 12#include <new> 13#include <stdio.h> 14#include <string.h> 15 16#include "Bitmap.h" 17#include "BitmapBuffer.h" 18#include "BBitmapBuffer.h" 19 20#include "BitmapHWInterface.h" 21 22using std::nothrow; 23 24 25BitmapHWInterface::BitmapHWInterface(ServerBitmap* bitmap) 26 : 27 HWInterface(), 28 fBackBuffer(NULL), 29 fFrontBuffer(new(nothrow) BitmapBuffer(bitmap)) 30{ 31} 32 33 34BitmapHWInterface::~BitmapHWInterface() 35{ 36} 37 38 39status_t 40BitmapHWInterface::Initialize() 41{ 42 status_t ret = HWInterface::Initialize(); 43 if (ret < B_OK) 44 return ret; 45 46 ret = fFrontBuffer->InitCheck(); 47 if (ret < B_OK) 48 return ret; 49 50// TODO: Remove once unnecessary... 51 // fall back to double buffered mode until Painter knows how 52 // to draw onto non 32-bit surfaces... 53 if (fFrontBuffer->ColorSpace() != B_RGB32 54 && fFrontBuffer->ColorSpace() != B_RGBA32) { 55 BBitmap* backBitmap = new BBitmap(fFrontBuffer->Bounds(), 56 B_BITMAP_NO_SERVER_LINK, B_RGBA32); 57 fBackBuffer.SetTo(new BBitmapBuffer(backBitmap)); 58 59 ret = fBackBuffer->InitCheck(); 60 if (ret < B_OK) { 61 fBackBuffer.Unset(); 62 } else { 63 // import the current contents of the bitmap 64 // into the back bitmap 65 backBitmap->ImportBits(fFrontBuffer->Bits(), 66 fFrontBuffer->BitsLength(), fFrontBuffer->BytesPerRow(), 0, 67 fFrontBuffer->ColorSpace()); 68 } 69 } 70 71 return ret; 72} 73 74 75status_t 76BitmapHWInterface::Shutdown() 77{ 78 return B_OK; 79} 80 81 82status_t 83BitmapHWInterface::SetMode(const display_mode& mode) 84{ 85 return B_UNSUPPORTED; 86} 87 88 89void 90BitmapHWInterface::GetMode(display_mode* mode) 91{ 92 if (mode != NULL) 93 memset(mode, 0, sizeof(display_mode)); 94} 95 96 97status_t 98BitmapHWInterface::GetDeviceInfo(accelerant_device_info* info) 99{ 100 return B_UNSUPPORTED; 101} 102 103 104status_t 105BitmapHWInterface::GetFrameBufferConfig(frame_buffer_config& config) 106{ 107 return B_UNSUPPORTED; 108} 109 110 111status_t 112BitmapHWInterface::GetModeList(display_mode** modes, uint32 *count) 113{ 114 return B_UNSUPPORTED; 115} 116 117 118status_t 119BitmapHWInterface::GetPixelClockLimits(display_mode* mode, uint32* low, 120 uint32* high) 121{ 122 return B_UNSUPPORTED; 123} 124 125 126status_t 127BitmapHWInterface::GetTimingConstraints(display_timing_constraints* constraints) 128{ 129 return B_UNSUPPORTED; 130} 131 132 133status_t 134BitmapHWInterface::ProposeMode(display_mode* candidate, const display_mode* low, 135 const display_mode* high) 136{ 137 return B_UNSUPPORTED; 138} 139 140 141sem_id 142BitmapHWInterface::RetraceSemaphore() 143{ 144 return -1; 145} 146 147 148status_t 149BitmapHWInterface::WaitForRetrace(bigtime_t timeout) 150{ 151 return B_UNSUPPORTED; 152} 153 154 155status_t 156BitmapHWInterface::SetDPMSMode(uint32 state) 157{ 158 return B_UNSUPPORTED; 159} 160 161 162uint32 163BitmapHWInterface::DPMSMode() 164{ 165 return 0; 166} 167 168 169uint32 170BitmapHWInterface::DPMSCapabilities() 171{ 172 return 0; 173} 174 175 176status_t 177BitmapHWInterface::SetBrightness(float) 178{ 179 return B_UNSUPPORTED; 180} 181 182 183status_t 184BitmapHWInterface::GetBrightness(float*) 185{ 186 return B_UNSUPPORTED; 187} 188 189 190RenderingBuffer* 191BitmapHWInterface::FrontBuffer() const 192{ 193 return fFrontBuffer.Get(); 194} 195 196 197RenderingBuffer* 198BitmapHWInterface::BackBuffer() const 199{ 200 return fBackBuffer.Get(); 201} 202 203 204bool 205BitmapHWInterface::IsDoubleBuffered() const 206{ 207 if (fFrontBuffer.IsSet()) 208 return fBackBuffer.IsSet(); 209 210 return false; 211} 212