1/* 2 * Copyright 2005 Michael Lotz <mmlr@mlotz.ch> 3 * All rights reserved. Distributed under the terms of the MIT license. 4 */ 5 6//! A RenderingBuffer implementation that accesses graphics memory directly. 7 8 9#include "AccelerantBuffer.h" 10 11 12AccelerantBuffer::AccelerantBuffer() 13 : fDisplayModeSet(false), 14 fFrameBufferConfigSet(false), 15 fIsOffscreenBuffer(false) 16{ 17} 18 19 20AccelerantBuffer::AccelerantBuffer(const display_mode& mode, 21 const frame_buffer_config& config) 22 : fDisplayModeSet(false), 23 fFrameBufferConfigSet(false), 24 fIsOffscreenBuffer(false) 25{ 26 SetDisplayMode(mode); 27 SetFrameBufferConfig(config); 28} 29 30 31AccelerantBuffer::AccelerantBuffer(const AccelerantBuffer& other, 32 bool offscreenBuffer) 33 : fDisplayMode(other.fDisplayMode), 34 fFrameBufferConfig(other.fFrameBufferConfig), 35 fDisplayModeSet(other.fDisplayModeSet), 36 fFrameBufferConfigSet(other.fFrameBufferConfigSet), 37 fIsOffscreenBuffer(other.fIsOffscreenBuffer || offscreenBuffer) 38{ 39} 40 41 42AccelerantBuffer::~AccelerantBuffer() 43{ 44} 45 46 47status_t 48AccelerantBuffer::InitCheck() const 49{ 50 if (fDisplayModeSet && fFrameBufferConfigSet) 51 return B_OK; 52 53 return B_NO_INIT; 54} 55 56 57color_space 58AccelerantBuffer::ColorSpace() const 59{ 60 if (InitCheck() == B_OK) 61 return (color_space)fDisplayMode.space; 62 63 return B_NO_COLOR_SPACE; 64} 65 66 67void* 68AccelerantBuffer::Bits() const 69{ 70 if (InitCheck() != B_OK) 71 return NULL; 72 73 uint8* bits = (uint8*)fFrameBufferConfig.frame_buffer; 74 75 if (fIsOffscreenBuffer) 76 bits += fDisplayMode.virtual_height * fFrameBufferConfig.bytes_per_row; 77 78 return bits; 79} 80 81 82uint32 83AccelerantBuffer::BytesPerRow() const 84{ 85 if (InitCheck() == B_OK) 86 return fFrameBufferConfig.bytes_per_row; 87 88 return 0; 89} 90 91 92uint32 93AccelerantBuffer::Width() const 94{ 95 if (InitCheck() == B_OK) 96 return fDisplayMode.virtual_width; 97 98 return 0; 99} 100 101 102uint32 103AccelerantBuffer::Height() const 104{ 105 if (InitCheck() == B_OK) 106 return fDisplayMode.virtual_height; 107 108 return 0; 109} 110 111 112void 113AccelerantBuffer::SetDisplayMode(const display_mode& mode) 114{ 115 fDisplayMode = mode; 116 fDisplayModeSet = true; 117} 118 119 120void 121AccelerantBuffer::SetFrameBufferConfig(const frame_buffer_config& config) 122{ 123 fFrameBufferConfig = config; 124 fFrameBufferConfigSet = true; 125} 126 127 128void 129AccelerantBuffer::SetOffscreenBuffer(bool offscreenBuffer) 130{ 131 fIsOffscreenBuffer = offscreenBuffer; 132} 133