/*
* Copyright 2006-2008, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler, axeld@pinc-software.de
*/
#ifndef COMMANDS_H
#define COMMANDS_H
#include "accelerant.h"
struct command {
uint32 opcode;
uint32* Data() { return &opcode; }
};
class QueueCommands {
public:
QueueCommands(ring_buffer &ring);
~QueueCommands();
void Put(struct command &command, size_t size);
void PutFlush();
void PutWaitFor(uint32 event);
void PutOverlayFlip(uint32 code, bool updateCoefficients);
void MakeSpace(uint32 size);
void Write(uint32 data);
private:
ring_buffer &fRingBuffer;
};
// commands
struct xy_command : command {
uint16 dest_bytes_per_row;
uint8 raster_operation;
uint8 mode;
uint16 dest_left;
uint16 dest_top;
uint16 dest_right;
uint16 dest_bottom;
uint32 dest_base;
xy_command(uint32 command, uint16 rop)
{
opcode = command;
switch (gInfo->shared_info->bits_per_pixel) {
case 8:
mode = COMMAND_MODE_CMAP8;
break;
case 15:
mode = COMMAND_MODE_RGB15;
break;
case 16:
mode = COMMAND_MODE_RGB16;
break;
case 32:
mode = COMMAND_MODE_RGB32;
opcode |= COMMAND_BLIT_RGBA;
break;
}
dest_bytes_per_row = gInfo->shared_info->bytes_per_row;
dest_base = gInfo->shared_info->frame_buffer_offset;
raster_operation = rop;
}
};
struct xy_source_blit_command : xy_command {
uint16 source_left;
uint16 source_top;
uint16 source_bytes_per_row;
uint16 reserved;
uint32 source_base;
xy_source_blit_command()
: xy_command(XY_COMMAND_SOURCE_BLIT, 0xcc)
{
source_bytes_per_row = dest_bytes_per_row;
source_base = dest_base;
reserved = 0;
}
};
struct xy_color_blit_command : xy_command {
uint32 color;
xy_color_blit_command(bool invert)
: xy_command(XY_COMMAND_COLOR_BLIT, invert ? 0x55 : 0xf0)
{
}
};
struct xy_setup_mono_pattern_command : xy_command {
uint32 background_color;
uint32 foreground_color;
uint64 pattern;
xy_setup_mono_pattern_command()
: xy_command(XY_COMMAND_SETUP_MONO_PATTERN, 0xf0)
{
mode |= COMMAND_MODE_SOLID_PATTERN;
// this defines the clipping window (but clipping is disabled)
dest_left = 0;
dest_top = 0;
dest_right = 0;
dest_bottom = 0;
}
};
struct xy_scanline_blit_command : command {
uint16 dest_left;
uint16 dest_top;
uint16 dest_right;
uint16 dest_bottom;
xy_scanline_blit_command()
{
opcode = XY_COMMAND_SCANLINE_BLIT;
}
};
#endif // COMMANDS_H
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: color.
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: source_left, source_top.
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: background_color, foreground_color, pattern.
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: dest_left, dest_top, dest_right, dest_bottom.