File: pixel_buffer.h

package info (click to toggle)
clanlib 1.0~svn3827-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 24,696 kB
  • sloc: cpp: 101,591; xml: 6,410; makefile: 1,742; ansic: 463; perl: 424; php: 247; sh: 53
file content (162 lines) | stat: -rw-r--r-- 5,317 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
**  ClanLib SDK
**  Copyright (c) 1997-2005 The ClanLib Team
**
**  This software is provided 'as-is', without any express or implied
**  warranty.  In no event will the authors be held liable for any damages
**  arising from the use of this software.
**
**  Permission is granted to anyone to use this software for any purpose,
**  including commercial applications, and to alter it and redistribute it
**  freely, subject to the following restrictions:
**
**  1. The origin of this software must not be misrepresented; you must not
**     claim that you wrote the original software. If you use this software
**     in a product, an acknowledgment in the product documentation would be
**     appreciated but is not required.
**  2. Altered source versions must be plainly marked as such, and must not be
**     misrepresented as being the original software.
**  3. This notice may not be removed or altered from any source distribution.
**
**  Note: Some of the libraries ClanLib may link to may have additional
**  requirements or restrictions.
**
**  File Author(s):
**
**    Magnus Norddahl
**    (if your name is missing here, please add it)
*/

//! clanDisplay="Display 2D"
//! header=display.h

#ifndef header_pixel_buffer
#define header_pixel_buffer

#ifdef CL_API_DLL
#ifdef CL_DISPLAY_EXPORT
#define CL_API_DISPLAY __declspec(dllexport)
#else
#define CL_API_DISPLAY __declspec(dllimport)
#endif
#else
#define CL_API_DISPLAY
#endif

#if _MSC_VER > 1000
#pragma once
#endif

#include "../Core/Math/rect.h"

class CL_PixelFormat;
class CL_Palette;
class CL_PixelBuffer_Generic;
class CL_GraphicContext;
class CL_Color;

//: Pixel data access.
//- !group=Display/Display 2D!
//- !header=display.h!
class CL_API_DISPLAY CL_PixelBuffer
{
//! Construction:
public:
	//: Constructs a pixel buffer.
	//param width: Width of pixel buffer, in pixels.
	//param height: Height of pixel buffer, in pixels.
	//param pitch: Bytes per line in pixel buffer.
	//param format: Pixel format of pixel buffer.
	//param palette: Palette used in pixel buffer.
	//param data: Data pointer to pixel data. If null, will construct a memory pixel buffer with the given dimensions.
	//- <p>If the data pointer is not null, it will internally just point at the memory location specified by data.
	//- In other words, CL_PixelBuffer do not copy the data, and it does not delete the data pointer when destroyed itself.</p>
	CL_PixelBuffer(int width, int height, int pitch, const CL_PixelFormat &format, void *data = 0);

	CL_PixelBuffer(int width, int height, int pitch, const CL_PixelFormat &format, const CL_Palette &palette, void *data = 0);

	CL_PixelBuffer(const CL_PixelBuffer &copy);

	CL_PixelBuffer();

	virtual ~CL_PixelBuffer();

//! Attributes:
public:
	//: Returns the pixel format of the pixel buffer.
	const CL_PixelFormat &get_format() const;

	//: Returns the palette of the pixel buffer.
	const CL_Palette &get_palette() const;

	//: Returns the buffer width.
	int get_width() const;

	//: Returns the buffer height.
	int get_height() const;

	//: Returns the pitch (bytes per scanline).
	unsigned int get_pitch() const;

	//: Returns a pointer to the beginning of the pixel buffer. Pointer
	//: is only valid inside a lock/unlock session.
	void *get_data();
	
	//: Returns the pixel at coordinates x and y.
	//: Only valid within a lock/unlock session.
	CL_Color get_pixel(int x, int y);

//! Operations:
public:
	//: Copy assignment operator.
	CL_PixelBuffer &operator =(const CL_PixelBuffer &copy);

	//: Return true if the CL_PixelBuffer is valid and useable
	operator bool () const;

	//: Locks the pixel buffer, making calls to get_data() valid.
	void lock();

	//: Unlocks the pixelbuffer.
	void unlock();

	//: Convert pixel buffer to the pixel format of the target buffer, storing
	//: the result in the target buffer.
	//param target: Target pixel buffer.
	//param buffer: Buffer getting stored pixels in the specified format and pitch.
	//param format: Pixel format of target buffer.
	//param dest_pitch: Bytes per line of target buffer.
	//param dest_rect: Destination rectangle for conversion.
	//param src_rect: Source rectangle for conversion.
	void convert(CL_PixelBuffer target);

	void convert(void *buffer, const CL_PixelFormat &format, int dest_pitch, const CL_Rect &dest_rect, const CL_Rect &src_rect=CL_Rect(0,0,0,0));

	//: Convert one line of pixel data to target buffer.
	//param buffer: Buffer getting stored pixels in the specified format
	//param format: Pixel format of target buffer.
	//param y: Specifies which line to convert when converting one single line.
	void convert_line(void *buffer, const CL_PixelFormat &format, int y);

	//: Converts current buffer to a new pixel format and returns the result.
	CL_PixelBuffer to_format(const CL_PixelFormat &format);

	//: Sets a new colorkey without converting the buffer.
	//param enabled: Enable or disable the colorkey.
	//param colorkey: New colorkey to use.
	void set_colorkey(bool enabled, unsigned int colorkey);
	
	//: Draw a pixel at (x, y) using the specified color.
	//: Only valid within a lock/unlock session.
	void draw_pixel(int x, int y, const CL_Color &color);

//! Implementation:
public:
	CL_PixelBuffer(CL_PixelBuffer_Generic *impl);

protected:
	//: Pixel data implementation.
	CL_PixelBuffer_Generic *impl;
};

#endif