Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | pmbaty | 1 | #include "pmmem.h" |
2 | #include "CORE/FW/object.h" |
||
3 | #include "CORE/FW/resource.h" |
||
4 | #include "CORE/FW/tokenval.h" |
||
5 | #include "CORE/PIXELMAP/genclip.h" |
||
6 | #include "CORE/PIXELMAP/pmgen.h" |
||
7 | #include "CORE/PIXELMAP/pmmemops.h" |
||
8 | #include "CORE/PIXELMAP/pmsetup.h" |
||
9 | #include "harness/trace.h" |
||
10 | #include <stddef.h> |
||
11 | #include <stdlib.h> |
||
12 | #include <string.h> |
||
13 | |||
14 | br_tv_template_entry matchTemplateEntries[6] = { |
||
15 | { BRT_USE_T, NULL, 0, 2, 3, 0, 0 }, |
||
16 | { BRT_PIXEL_TYPE_U8, NULL, 4, 2, 3, 0, 0 }, |
||
17 | { BRT_PIXEL_BITS_I32, NULL, 8, 2, 3, 0, 0 }, |
||
18 | { BRT_RENDERER_O, NULL, 20, 2, 3, 0, 0 }, |
||
19 | { BRT_WIDTH_I32, NULL, 12, 2, 3, 0, 0 }, |
||
20 | { BRT_HEIGHT_I32, NULL, 16, 2, 3, 0, 0 } |
||
21 | }; |
||
22 | br_device_pixelmap_dispatch devicePixelmapDispatch = { |
||
23 | NULL, |
||
24 | NULL, |
||
25 | NULL, |
||
26 | NULL, |
||
27 | (void*)_M_br_device_pixelmap_mem_free, |
||
28 | (void*)_M_br_device_pixelmap_mem_identifier, |
||
29 | (void*)_M_br_device_pixelmap_mem_type, |
||
30 | (void*)_M_br_device_pixelmap_mem_isType, |
||
31 | (void*)_M_br_device_pixelmap_mem_device, |
||
32 | (void*)_M_br_device_pixelmap_mem_space, |
||
33 | (void*)_M_br_device_pixelmap_mem_queryTemplate, |
||
34 | (void*)_M_br_object_query, |
||
35 | (void*)_M_br_object_queryBuffer, |
||
36 | (void*)_M_br_object_queryMany, |
||
37 | (void*)_M_br_object_queryManySize, |
||
38 | (void*)_M_br_object_queryAll, |
||
39 | (void*)_M_br_object_queryAllSize, |
||
40 | (void*)_M_br_device_pixelmap_mem_validSource, |
||
41 | _M_br_device_pixelmap_mem_resize, |
||
42 | _M_br_device_pixelmap_mem_match, |
||
43 | _M_br_device_pixelmap_mem_allocateSub, |
||
44 | _M_br_device_pixelmap_mem_copyTo, |
||
45 | _M_br_device_pixelmap_mem_copyTo, |
||
46 | _M_br_device_pixelmap_mem_copyFrom, |
||
47 | _M_br_device_pixelmap_mem_fill, |
||
48 | _M_br_device_pixelmap_gen_doubleBuffer, |
||
49 | _M_br_device_pixelmap_gen_copyDirty, |
||
50 | _M_br_device_pixelmap_gen_copyToDirty, |
||
51 | _M_br_device_pixelmap_gen_copyFromDirty, |
||
52 | _M_br_device_pixelmap_gen_fillDirty, |
||
53 | _M_br_device_pixelmap_gen_doubleBufferDirty, |
||
54 | _M_br_device_pixelmap_gen_rectangle, |
||
55 | _M_br_device_pixelmap_gen_rectangle2, |
||
56 | _M_br_device_pixelmap_mem_rectangleCopyTo, |
||
57 | _M_br_device_pixelmap_mem_rectangleCopyTo, |
||
58 | _M_br_device_pixelmap_mem_rectangleCopyFrom, |
||
59 | _M_br_device_pixelmap_mem_rectangleStretchCopyTo, |
||
60 | _M_br_device_pixelmap_mem_rectangleStretchCopyTo, |
||
61 | _M_br_device_pixelmap_mem_rectangleStretchCopyFrom, |
||
62 | _M_br_device_pixelmap_mem_rectangleFill, |
||
63 | _M_br_device_pixelmap_mem_pixelSet, |
||
64 | _M_br_device_pixelmap_mem_line, |
||
65 | _M_br_device_pixelmap_mem_copyBits, |
||
66 | _M_br_device_pixelmap_gen_text, |
||
67 | _M_br_device_pixelmap_gen_textBounds, |
||
68 | _M_br_device_pixelmap_mem_rowSize, |
||
69 | (void*)_M_br_device_pixelmap_mem_rowSet, |
||
70 | (void*)_M_br_device_pixelmap_mem_rowQuery, |
||
71 | _M_br_device_pixelmap_mem_pixelQuery, |
||
72 | _M_br_device_pixelmap_mem_pixelAddressQuery, |
||
73 | _M_br_device_pixelmap_mem_pixelAddressSet, |
||
74 | _M_br_device_pixelmap_mem_originSet, |
||
75 | _M_br_device_pixelmap_mem_flush, |
||
76 | _M_br_device_pixelmap_mem_synchronise, |
||
77 | _M_br_device_pixelmap_mem_directLock, |
||
78 | _M_br_device_pixelmap_mem_directUnlock, |
||
79 | }; |
||
80 | |||
81 | br_tv_template_entry devicePixelmapTemplateEntries[4]; |
||
82 | pm_type_info pmTypeInfo[30] = { |
||
83 | { 1u, 1u, 32u, 1u }, |
||
84 | { 2u, 1u, 16u, 1u }, |
||
85 | { 4u, 1u, 8u, 1u }, |
||
86 | { 8u, 1u, 4u, 1u }, |
||
87 | { 16u, 2u, 2u, 2u }, |
||
88 | { 16u, 2u, 2u, 2u }, |
||
89 | { 24u, 3u, 4u, 2u }, |
||
90 | { 32u, 4u, 1u, 2u }, |
||
91 | { 32u, 4u, 1u, 10u }, |
||
92 | { 16u, 1u, 2u, 16u }, |
||
93 | { 32u, 1u, 1u, 16u }, |
||
94 | { 16u, 2u, 4u, 4u }, |
||
95 | { 32u, 4u, 4u, 4u }, |
||
96 | { 8u, 1u, 4u, 8u }, |
||
97 | { 16u, 2u, 2u, 9u }, |
||
98 | { 54u, 0u, 0u, 0u }, |
||
99 | { 4u, 0u, 5u, 3u }, |
||
100 | { 0u, 0u, 0u, 0u }, |
||
101 | { 69u, 0u, 0u, 0u }, |
||
102 | { 52u, 0u, 5u, 13u }, |
||
103 | { 0u, 0u, 0u, 0u }, |
||
104 | { 72u, 0u, 0u, 0u }, |
||
105 | { 54u, 0u, 5u, 13u }, |
||
106 | { 0u, 0u, 0u, 0u }, |
||
107 | { 75u, 0u, 0u, 0u }, |
||
108 | { 44u, 0u, 5u, 12u }, |
||
109 | { 0u, 0u, 0u, 0u }, |
||
110 | { 1u, 0u, 0u, 0u }, |
||
111 | { 0u, 0u, 0u, 0u }, |
||
112 | { 0u, 0u, 0u, 0u } |
||
113 | }; |
||
114 | |||
115 | // IDA: br_device_pixelmap* __usercall DevicePixelmapMemAllocate@<EAX>(br_uint_8 type@<EAX>, br_uint_16 w@<EDX>, br_uint_16 h@<EBX>, void *pixels@<ECX>, int flags) |
||
116 | br_device_pixelmap* DevicePixelmapMemAllocate(br_uint_8 type, br_uint_16 w, br_uint_16 h, void* pixels, int flags) { |
||
117 | br_device_pixelmap* pm; |
||
118 | pm_type_info* tip; |
||
119 | |||
120 | tip = &pmTypeInfo[type]; |
||
121 | pm = BrResAllocate(_pixelmap.res, sizeof(br_device_pixelmap), BR_MEMORY_PIXELMAP); |
||
122 | // pm->dispatch = &devicePixelmapDispatch; |
||
123 | pm->pm_identifier = NULL; |
||
124 | pm->pm_map = NULL; |
||
125 | pm->pm_flags = BR_PMF_LINEAR; |
||
126 | pm->pm_copy_function = BR_PMCOPY_NORMAL; |
||
127 | pm->pm_base_x = 0; |
||
128 | pm->pm_base_y = 0; |
||
129 | |||
130 | pm->pm_origin_x = 0; |
||
131 | pm->pm_origin_y = 0; |
||
132 | pm->pm_type = type; |
||
133 | pm->pm_width = w; |
||
134 | pm->pm_height = h; |
||
135 | // 8 bits, 1, 4 align, 1 |
||
136 | |||
137 | // v11 = (tip->align + w - 1) / tip->align * tip->align * tip->bits; |
||
138 | // pm->pm_row_bytes = (v11 - (__CFSHL__(v11 >> 31, 3) + 8 * (v11 >> 31))) >> 3; |
||
139 | // TODO: calculate this differently |
||
140 | pm->pm_row_bytes = w; |
||
141 | pm->pm_row_bytes = tip->bits * tip->align * ((w + tip->align - 1) / tip->align) / 8; |
||
142 | |||
143 | if ((8 * pm->pm_row_bytes % tip->bits) == 0) { |
||
144 | pm->pm_flags |= BR_PMF_ROW_WHOLEPIXELS; |
||
145 | } |
||
146 | if (!(flags & BR_PMAF_NO_PIXELS)) { |
||
147 | if (pixels != NULL) { |
||
148 | pm->pm_pixels = pixels; |
||
149 | } else { |
||
150 | pm->pm_pixels = BrResAllocate(pm, pm->pm_height * pm->pm_row_bytes, BR_MEMORY_PIXELS); |
||
151 | } |
||
152 | } |
||
153 | // TODO: not sure we need this |
||
154 | // pm->pm_pixels_qualifier = (unsigned __int16)_GetSysQual(); |
||
155 | if (flags & BR_PMAF_INVERTED) { |
||
156 | pm->pm_pixels = (char*)pm->pm_pixels + (pm->pm_height - 1) * pm->pm_row_bytes; |
||
157 | pm->pm_row_bytes *= -1; |
||
158 | } |
||
159 | return pm; |
||
160 | } |
||
161 | |||
162 | void CheckDispatch(br_device_pixelmap* pm) { |
||
163 | if (pm->dispatch == NULL) { |
||
164 | pm->dispatch = &devicePixelmapDispatch; |
||
165 | } |
||
166 | } |
||
167 | |||
168 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_allocateSub(br_device_pixelmap *self, br_device_pixelmap **newpm, br_rectangle *rect) |
||
169 | br_error _M_br_device_pixelmap_mem_allocateSub(br_device_pixelmap* self, br_device_pixelmap** newpm, br_rectangle* rect) { |
||
170 | br_device_pixelmap* pm; |
||
171 | br_rectangle out; |
||
172 | LOG_TRACE("(%p, %p, %p)", self, newpm, rect); |
||
173 | |||
174 | if (PixelmapRectangleClip(&out, rect, (br_pixelmap*)self) == BR_CLIP_REJECT) { |
||
175 | return 4098; |
||
176 | } |
||
177 | |||
178 | pm = (br_device_pixelmap*)BrResAllocate(_pixelmap.res, sizeof(br_pixelmap), BR_MEMORY_PIXELMAP); |
||
179 | memcpy(pm, self, sizeof(br_pixelmap)); |
||
180 | pm->pm_base_x += out.x; |
||
181 | pm->pm_base_y += out.y; |
||
182 | pm->pm_width = out.w; |
||
183 | pm->pm_height = out.h; |
||
184 | pm->pm_origin_x = 0; |
||
185 | pm->pm_origin_y = 0; |
||
186 | pm->pm_stored = 0; |
||
187 | pm->dispatch = &devicePixelmapDispatch; |
||
188 | if (pm->pm_width != self->pm_width) { |
||
189 | pm->pm_flags &= ~BR_PMF_LINEAR; |
||
190 | } |
||
191 | *newpm = pm; |
||
192 | return 0; |
||
193 | } |
||
194 | |||
195 | // IDA: void __cdecl _M_br_device_pixelmap_mem_free(br_device_pixelmap *self) |
||
196 | void _M_br_device_pixelmap_mem_free(br_device_pixelmap* self) { |
||
197 | BrResFree(self); |
||
198 | } |
||
199 | |||
200 | // IDA: char* __cdecl _M_br_device_pixelmap_mem_identifier(br_device_pixelmap *self) |
||
201 | char* _M_br_device_pixelmap_mem_identifier(br_device_pixelmap* self) { |
||
202 | LOG_TRACE("(%p)", self); |
||
203 | |||
204 | return self->pm_identifier; |
||
205 | } |
||
206 | |||
207 | // IDA: br_token __cdecl _M_br_device_pixelmap_mem_type(br_device_pixelmap *self) |
||
208 | br_token _M_br_device_pixelmap_mem_type(br_device_pixelmap* self) { |
||
209 | LOG_TRACE("(%p)", self); |
||
210 | |||
211 | return BRT_DEVICE_PIXELMAP; |
||
212 | } |
||
213 | |||
214 | // IDA: br_boolean __cdecl _M_br_device_pixelmap_mem_isType(br_device_pixelmap *self, br_token t) |
||
215 | br_boolean _M_br_device_pixelmap_mem_isType(br_device_pixelmap* self, br_token t) { |
||
216 | LOG_TRACE("(%p, %d)", self, t); |
||
217 | |||
218 | return t == BRT_DEVICE_PIXELMAP || t == BRT_OBJECT; |
||
219 | } |
||
220 | |||
221 | // IDA: br_device* __cdecl _M_br_device_pixelmap_mem_device(br_device_pixelmap *self) |
||
222 | br_device* _M_br_device_pixelmap_mem_device(br_device_pixelmap* self) { |
||
223 | LOG_TRACE("(%p)", self); |
||
224 | |||
225 | return NULL; |
||
226 | } |
||
227 | |||
228 | // IDA: br_int_32 __cdecl _M_br_device_pixelmap_mem_space(br_device_pixelmap *self) |
||
229 | br_int_32 _M_br_device_pixelmap_mem_space(br_device_pixelmap* self) { |
||
230 | LOG_TRACE("(%p)", self); |
||
231 | |||
232 | return BrResSizeTotal(self); |
||
233 | } |
||
234 | |||
235 | // IDA: br_tv_template* __cdecl _M_br_device_pixelmap_mem_queryTemplate(br_device_pixelmap *self) |
||
236 | br_tv_template* _M_br_device_pixelmap_mem_queryTemplate(br_device_pixelmap* self) { |
||
237 | LOG_TRACE("(%p)", self); |
||
238 | NOT_IMPLEMENTED(); |
||
239 | } |
||
240 | |||
241 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_validSource(br_device_pixelmap *self, br_object *h) |
||
242 | br_error _M_br_device_pixelmap_mem_validSource(br_device_pixelmap* self, br_object* h) { |
||
243 | LOG_TRACE("(%p, %p)", self, h); |
||
244 | |||
245 | return 0; |
||
246 | } |
||
247 | |||
248 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_resize(br_device_pixelmap *self, br_int_32 width, br_int_32 height) |
||
249 | br_error _M_br_device_pixelmap_mem_resize(br_device_pixelmap* self, br_int_32 width, br_int_32 height) { |
||
250 | //char* pixels; // Pierre-Marie Baty -- unused variable |
||
251 | //pm_type_info* tip; // Pierre-Marie Baty -- unused variable |
||
252 | //br_int_16 old_row_bytes; // Pierre-Marie Baty -- unused variable |
||
253 | LOG_TRACE("(%p, %d, %d)", self, width, height); |
||
254 | NOT_IMPLEMENTED(); |
||
255 | } |
||
256 | |||
257 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_match(br_device_pixelmap *self, br_device_pixelmap **newpm, br_token_value *tv) |
||
258 | br_error _M_br_device_pixelmap_mem_match(br_device_pixelmap* self, br_device_pixelmap** newpm, br_token_value* tv) { |
||
259 | match_tokens mt; |
||
260 | br_int_32 count; |
||
261 | br_device_pixelmap* pm; |
||
262 | br_int_32 bytes; |
||
263 | br_int_32 r; |
||
264 | LOG_TRACE("(%p, %p, %p)", self, newpm, tv); |
||
265 | |||
266 | if (!_pixelmap.pixelmap_match_template) { |
||
267 | _pixelmap.pixelmap_match_template = BrTVTemplateAllocate(_pixelmap.res, matchTemplateEntries, 6); |
||
268 | if (!_pixelmap.pixelmap_match_template) { |
||
269 | LOG_WARN("x"); |
||
270 | return 4098; |
||
271 | } |
||
272 | } |
||
273 | mt.pixel_type = self->pm_type; |
||
274 | mt.width = self->pm_width; |
||
275 | mt.height = self->pm_height; |
||
276 | |||
277 | // TOOD: We haven't implemented BrTokenValueSetMany - just emulate enough for now |
||
278 | mt.use = tv[1].t; // se BrPixelmapMatch |
||
279 | mt.pixel_bits = 16; |
||
280 | |||
281 | BrTokenValueSetMany(&mt, &count, 0, tv, _pixelmap.pixelmap_match_template); |
||
282 | // if ( (unsigned int)mt.use < 0x64 ) |
||
283 | // { |
||
284 | // if ( mt.use != 84 ) |
||
285 | // return 4098; |
||
286 | // if ( mt.pixel_bits < 0x10u ) |
||
287 | // { |
||
288 | // if ( mt.pixel_bits ) |
||
289 | // return 4098; |
||
290 | // } |
||
291 | // else if ( mt.pixel_bits > 0x10u ) |
||
292 | // { |
||
293 | // if ( mt.pixel_bits != 32 ) |
||
294 | // return 4098; |
||
295 | // mt.pixel_type = 12; |
||
296 | // goto LABEL_18; |
||
297 | // } |
||
298 | // mt.pixel_type = 11; |
||
299 | // goto LABEL_18; |
||
300 | // } |
||
301 | // if ( (unsigned int)mt.use > 0x66 ) |
||
302 | // { |
||
303 | // if ( (unsigned int)mt.use >= 0x116 ) |
||
304 | // { |
||
305 | // if ( (unsigned int)mt.use > 0x116 && mt.use != 379 ) |
||
306 | // return 4098; |
||
307 | // goto LABEL_18; |
||
308 | // } |
||
309 | // return 4098; |
||
310 | // } |
||
311 | |||
312 | if (mt.use == BRT_DEPTH) { |
||
313 | |||
314 | // TODO: hack this to make it work |
||
315 | mt.pixel_type = BR_PMT_DEPTH_16; |
||
316 | pm = DevicePixelmapMemAllocate(mt.pixel_type, mt.width, mt.height, NULL, (self->pm_row_bytes < 0) | BR_PMAF_NO_PIXELS); |
||
317 | r = abs(self->pm_row_bytes); |
||
318 | bytes = (signed int)pmTypeInfo[self->pm_type].bits >> 3; |
||
319 | pm->pm_row_bytes = ((signed int)pmTypeInfo[pm->pm_type].bits >> 3) * (unsigned int)((bytes + r - 1) / bytes); |
||
320 | pm->pm_pixels = BrResAllocate(pm, pm->pm_height * pm->pm_row_bytes, BR_MEMORY_PIXELS); |
||
321 | if (pm->pm_width * ((signed int)pmTypeInfo[pm->pm_type].bits >> 3) == pm->pm_row_bytes) |
||
322 | pm->pm_flags |= BR_PMF_LINEAR; |
||
323 | else { |
||
324 | pm->pm_flags &= 0xFDu; |
||
325 | } |
||
326 | if (self->pm_row_bytes < 0) { |
||
327 | pm->pm_row_bytes = -pm->pm_row_bytes; |
||
328 | // TODO: is this a bug in the original code? We say row_bytes is positive, but still set the pixels pointer to the bottom |
||
329 | // of the data |
||
330 | pm->pm_pixels = (char*)pm->pm_pixels + (pm->pm_height - 1) * pm->pm_row_bytes; |
||
331 | } |
||
332 | } else { |
||
333 | pm = DevicePixelmapMemAllocate(mt.pixel_type, mt.width, mt.height, NULL, self->pm_row_bytes < 0); |
||
334 | } |
||
335 | pm->pm_origin_x = self->pm_origin_x; |
||
336 | pm->pm_origin_y = self->pm_origin_y; |
||
337 | // self->dispatch = pm; |
||
338 | *newpm = pm; |
||
339 | return 0; |
||
340 | |||
341 | // br_pixelmap* ret = BrPixelmapAllocate(src->type, src->width, src->height, NULL, BR_PMAF_NORMAL); |
||
342 | |||
343 | // if (match_type == BR_PMMATCH_DEPTH_16) { |
||
344 | // ret->type = BR_PMT_DEPTH_16; |
||
345 | // ret->flags |= BR_PMAF_DEPTHBUFFER; |
||
346 | // } else { |
||
347 | // ret->flags |= BR_PMAF_OFFSCREEN; |
||
348 | // } |
||
349 | } |
||
350 | |||
351 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyTo(br_device_pixelmap *self, br_device_pixelmap *src) |
||
352 | br_error _M_br_device_pixelmap_mem_copyTo(br_device_pixelmap* self, br_device_pixelmap* src) { |
||
353 | //br_int_8 bytes; // Pierre-Marie Baty -- unused variable |
||
354 | LOG_TRACE("(%p, %p)", self, src); |
||
355 | NOT_IMPLEMENTED(); |
||
356 | } |
||
357 | |||
358 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyFrom(br_device_pixelmap *self, br_device_pixelmap *dest) |
||
359 | br_error _M_br_device_pixelmap_mem_copyFrom(br_device_pixelmap* self, br_device_pixelmap* dest) { |
||
360 | //br_int_8 bytes; // Pierre-Marie Baty -- unused variable |
||
361 | LOG_TRACE("(%p, %p)", self, dest); |
||
362 | NOT_IMPLEMENTED(); |
||
363 | } |
||
364 | |||
365 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_fill(br_device_pixelmap *self, br_uint_32 colour) |
||
366 | br_error _M_br_device_pixelmap_mem_fill(br_device_pixelmap* self, br_uint_32 colour) { |
||
367 | br_int_8 bytes; |
||
368 | LOG_TRACE("(%p, %d)", self, colour); |
||
369 | |||
370 | bytes = pmTypeInfo[self->pm_type].bits >> 3; |
||
371 | if ((self->pm_flags & (BR_PMF_ROW_WHOLEPIXELS | BR_PMF_LINEAR)) == (BR_PMF_ROW_WHOLEPIXELS | BR_PMF_LINEAR)) { |
||
372 | if (self->pm_row_bytes > 0) { |
||
373 | pm_mem_fill_colour((br_uint_8*)self->pm_pixels + self->pm_base_y * self->pm_row_bytes + self->pm_base_x * bytes, self->pm_pixels_qualifier, |
||
374 | self->pm_width * self->pm_height, bytes, colour); |
||
375 | } else { |
||
376 | pm_mem_fill_colour((br_uint_8*)self->pm_pixels + (self->pm_base_y + self->pm_height - 1) * self->pm_row_bytes + self->pm_base_x * bytes, |
||
377 | self->pm_pixels_qualifier, self->pm_width * self->pm_height, bytes, colour); |
||
378 | } |
||
379 | } else if ((self->pm_row_bytes & 7) == 0) { |
||
380 | pm_mem_fill_colour_rect((br_uint_8*)self->pm_pixels + self->pm_base_y * self->pm_row_bytes + self->pm_base_x * bytes, self->pm_pixels_qualifier, |
||
381 | self->pm_width, self->pm_height, self->pm_row_bytes, bytes, colour); |
||
382 | } else { |
||
383 | int i; |
||
384 | for (i = 0; i < self->pm_height; i++) { |
||
385 | pm_mem_fill_colour((br_uint_8*)self->pm_pixels + (i + self->pm_base_y) * self->pm_row_bytes + self->pm_base_x * bytes, self->pm_pixels_qualifier, |
||
386 | self->pm_width, bytes, colour); |
||
387 | } |
||
388 | } |
||
389 | return 0; |
||
390 | } |
||
391 | |||
392 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_doubleBuffer(br_device_pixelmap *self, br_device_pixelmap *src) |
||
393 | br_error _M_br_device_pixelmap_mem_doubleBuffer(br_device_pixelmap* self, br_device_pixelmap* src) { |
||
394 | LOG_TRACE("(%p, %p)", self, src); |
||
395 | NOT_IMPLEMENTED(); |
||
396 | } |
||
397 | |||
398 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyDirty(br_device_pixelmap *self, br_device_pixelmap *src, br_rectangle *dirty, br_int_32 num_rects) |
||
399 | br_error _M_br_device_pixelmap_mem_copyDirty(br_device_pixelmap* self, br_device_pixelmap* src, br_rectangle* dirty, br_int_32 num_rects) { |
||
400 | LOG_TRACE("(%p, %p, %p, %d)", self, src, dirty, num_rects); |
||
401 | NOT_IMPLEMENTED(); |
||
402 | } |
||
403 | |||
404 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyToDirty(br_device_pixelmap *self, br_device_pixelmap *src, br_rectangle *dirty, br_int_32 num_rects) |
||
405 | br_error _M_br_device_pixelmap_mem_copyToDirty(br_device_pixelmap* self, br_device_pixelmap* src, br_rectangle* dirty, br_int_32 num_rects) { |
||
406 | LOG_TRACE("(%p, %p, %p, %d)", self, src, dirty, num_rects); |
||
407 | NOT_IMPLEMENTED(); |
||
408 | } |
||
409 | |||
410 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyFromDirty(br_device_pixelmap *self, br_device_pixelmap *src, br_rectangle *dirty, br_int_32 num_rects) |
||
411 | br_error _M_br_device_pixelmap_mem_copyFromDirty(br_device_pixelmap* self, br_device_pixelmap* src, br_rectangle* dirty, br_int_32 num_rects) { |
||
412 | LOG_TRACE("(%p, %p, %p, %d)", self, src, dirty, num_rects); |
||
413 | NOT_IMPLEMENTED(); |
||
414 | } |
||
415 | |||
416 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_fillDirty(br_device_pixelmap *self, br_uint_32 colour, br_rectangle *dirty, br_int_32 num_rects) |
||
417 | br_error _M_br_device_pixelmap_mem_fillDirty(br_device_pixelmap* self, br_uint_32 colour, br_rectangle* dirty, br_int_32 num_rects) { |
||
418 | LOG_TRACE("(%p, %d, %p, %d)", self, colour, dirty, num_rects); |
||
419 | NOT_IMPLEMENTED(); |
||
420 | } |
||
421 | |||
422 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_doubleBufferDirty(br_device_pixelmap *self, br_device_pixelmap *src, br_rectangle *dirty, br_int_32 num_rects) |
||
423 | br_error _M_br_device_pixelmap_mem_doubleBufferDirty(br_device_pixelmap* self, br_device_pixelmap* src, br_rectangle* dirty, br_int_32 num_rects) { |
||
424 | LOG_TRACE("(%p, %p, %p, %d)", self, src, dirty, num_rects); |
||
425 | NOT_IMPLEMENTED(); |
||
426 | } |
||
427 | |||
428 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rectangleCopyTo(br_device_pixelmap *self, br_point *p, br_device_pixelmap *src, br_rectangle *r) |
||
429 | br_error _M_br_device_pixelmap_mem_rectangleCopyTo(br_device_pixelmap* self, br_point* p, br_device_pixelmap* src, br_rectangle* r) { |
||
430 | int bytes; |
||
431 | br_rectangle ar; |
||
432 | br_point ap; |
||
433 | int i; // Added by DethRace |
||
434 | LOG_TRACE("(%p, %p, %p, %p)", self, p, src, r); |
||
435 | |||
436 | if (PixelmapRectangleClipTwo(&ar, &ap, r, p, (br_pixelmap*)self, (br_pixelmap*)src) == BR_CLIP_REJECT) { |
||
437 | return 0; |
||
438 | } |
||
439 | bytes = pmTypeInfo[self->pm_type].bits >> 3; |
||
440 | if (self->pm_width == ar.w) { |
||
441 | if (src->pm_row_bytes == self->pm_row_bytes && (self->pm_flags & (BR_PMF_ROW_WHOLEPIXELS | BR_PMF_LINEAR)) == (BR_PMF_ROW_WHOLEPIXELS | BR_PMF_LINEAR)) { |
||
442 | if (self->pm_row_bytes > 0) { |
||
443 | pm_mem_copy_colour((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y) * self->pm_row_bytes + (self->pm_base_x + ap.x) * bytes, self->pm_pixels_qualifier, |
||
444 | (br_uint_8*)src->pm_pixels + (src->pm_base_y + ar.y) * src->pm_row_bytes + (src->pm_base_x + ar.x) * bytes, src->pm_pixels_qualifier, |
||
445 | ar.w * ar.h, bytes); |
||
446 | return 0; |
||
447 | } else { |
||
448 | pm_mem_copy_colour((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y + ar.h - 1) * self->pm_row_bytes + (self->pm_base_x + ap.x) * bytes, self->pm_pixels_qualifier, |
||
449 | (br_uint_8*)src->pm_pixels + (src->pm_base_y + ar.y + ar.h - 1) * src->pm_row_bytes + (src->pm_base_x + ar.x) * bytes, src->pm_pixels_qualifier, |
||
450 | ar.w * ar.h, bytes); |
||
451 | return 0; |
||
452 | } |
||
453 | } |
||
454 | } |
||
455 | if (self->pm_row_bytes % 8 == 0) { |
||
456 | pm_mem_copy_colour_rect((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y) * self->pm_row_bytes + (self->pm_base_x + ap.x) * bytes, self->pm_pixels_qualifier, |
||
457 | (br_uint_8*)src->pm_pixels + (src->pm_base_y + ar.y) * src->pm_row_bytes + (src->pm_base_x + ar.x) * bytes, src->pm_pixels_qualifier, |
||
458 | ar.w, ar.h, self->pm_row_bytes, src->pm_row_bytes, bytes); |
||
459 | return 0; |
||
460 | } |
||
461 | for (i = 0; i < ar.h; i++) { |
||
462 | pm_mem_copy_colour((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y + i) * self->pm_row_bytes + (self->pm_base_x + ap.x) * bytes, self->pm_pixels_qualifier, |
||
463 | (br_uint_8*)src->pm_pixels + (src->pm_base_y + ar.y + i) * src->pm_row_bytes + (src->pm_base_x + ar.x) * bytes, src->pm_pixels_qualifier, |
||
464 | ar.w, bytes); |
||
465 | } |
||
466 | return 0; |
||
467 | } |
||
468 | |||
469 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rectangleCopyFrom(br_device_pixelmap *self, br_point *p, br_device_pixelmap *dest, br_rectangle *r) |
||
470 | br_error _M_br_device_pixelmap_mem_rectangleCopyFrom(br_device_pixelmap* self, br_point* p, br_device_pixelmap* dest, br_rectangle* r) { |
||
471 | //int bytes; // Pierre-Marie Baty -- unused variable |
||
472 | //br_rectangle ar; // Pierre-Marie Baty -- unused variable |
||
473 | //br_point ap; // Pierre-Marie Baty -- unused variable |
||
474 | LOG_TRACE("(%p, %p, %p, %p)", self, p, dest, r); |
||
475 | NOT_IMPLEMENTED(); |
||
476 | } |
||
477 | |||
478 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rectangleStretchCopyTo(br_device_pixelmap *self, br_rectangle *destinationRectangle, br_device_pixelmap *src, br_rectangle *sourceRectangle) |
||
479 | br_error _M_br_device_pixelmap_mem_rectangleStretchCopyTo(br_device_pixelmap* self, br_rectangle* destinationRectangle, br_device_pixelmap* src, br_rectangle* sourceRectangle) { |
||
480 | LOG_TRACE("(%p, %p, %p, %p)", self, destinationRectangle, src, sourceRectangle); |
||
481 | NOT_IMPLEMENTED(); |
||
482 | } |
||
483 | |||
484 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rectangleStretchCopyFrom(br_device_pixelmap *self, br_rectangle *d, br_device_pixelmap *src, br_rectangle *s) |
||
485 | br_error _M_br_device_pixelmap_mem_rectangleStretchCopyFrom(br_device_pixelmap* self, br_rectangle* d, br_device_pixelmap* src, br_rectangle* s) { |
||
486 | LOG_TRACE("(%p, %p, %p, %p)", self, d, src, s); |
||
487 | NOT_IMPLEMENTED(); |
||
488 | } |
||
489 | |||
490 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rectangleFill(br_device_pixelmap *self, br_rectangle *rect, br_uint_32 colour) |
||
491 | br_error _M_br_device_pixelmap_mem_rectangleFill(br_device_pixelmap* self, br_rectangle* rect, br_uint_32 colour) { |
||
492 | //br_rectangle arect; // Pierre-Marie Baty -- unused variable |
||
493 | //br_int_8 bytes; // Pierre-Marie Baty -- unused variable |
||
494 | LOG_TRACE("(%p, %p, %d)", self, rect, colour); |
||
495 | NOT_IMPLEMENTED(); |
||
496 | } |
||
497 | |||
498 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_pixelSet(br_device_pixelmap *self, br_point *p, br_uint_32 colour) |
||
499 | br_error _M_br_device_pixelmap_mem_pixelSet(br_device_pixelmap* self, br_point* p, br_uint_32 colour) { |
||
500 | br_point ap; |
||
501 | br_int_8 bytes; |
||
502 | LOG_TRACE("(%p, %p, %d)", self, p, colour); |
||
503 | |||
504 | if (PixelmapPointClip(&ap, p, (br_pixelmap*)self) == BR_CLIP_REJECT) { |
||
505 | return 0; |
||
506 | } |
||
507 | bytes = pmTypeInfo[self->pm_type].bits >> 3; |
||
508 | pm_mem_set_colour((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y) * self->pm_row_bytes + (self->pm_base_x + ap.x) * bytes, self->pm_pixels_qualifier, bytes, colour); |
||
509 | return 0; |
||
510 | } |
||
511 | |||
512 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_line(br_device_pixelmap *self, br_point *s, br_point *e, br_uint_32 colour) |
||
513 | br_error _M_br_device_pixelmap_mem_line(br_device_pixelmap* self, br_point* s, br_point* e, br_uint_32 colour) { |
||
514 | //int dx; // Pierre-Marie Baty -- unused variable |
||
515 | //int dy; // Pierre-Marie Baty -- unused variable |
||
516 | //int incr1; // Pierre-Marie Baty -- unused variable |
||
517 | //int incr2; // Pierre-Marie Baty -- unused variable |
||
518 | //int D; // Pierre-Marie Baty -- unused variable |
||
519 | //int x; // Pierre-Marie Baty -- unused variable |
||
520 | //int y; // Pierre-Marie Baty -- unused variable |
||
521 | //int xend; // Pierre-Marie Baty -- unused variable |
||
522 | //int c; // Pierre-Marie Baty -- unused variable |
||
523 | //int pixels_left; // Pierre-Marie Baty -- unused variable |
||
524 | //int x1; // Pierre-Marie Baty -- unused variable |
||
525 | //int y1; // Pierre-Marie Baty -- unused variable |
||
526 | //int sign_x; // Pierre-Marie Baty -- unused variable |
||
527 | //int sign_y; // Pierre-Marie Baty -- unused variable |
||
528 | //int step; // Pierre-Marie Baty -- unused variable |
||
529 | //int reverse; // Pierre-Marie Baty -- unused variable |
||
530 | //int i; // Pierre-Marie Baty -- unused variable |
||
531 | //char* dest; // Pierre-Marie Baty -- unused variable |
||
532 | //int bytes; // Pierre-Marie Baty -- unused variable |
||
533 | //br_point as; // Pierre-Marie Baty -- unused variable |
||
534 | //br_point ae; // Pierre-Marie Baty -- unused variable |
||
535 | LOG_TRACE("(%p, %p, %p, %d)", self, s, e, colour); |
||
536 | NOT_IMPLEMENTED(); |
||
537 | } |
||
538 | |||
539 | |||
540 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_copyBits(br_device_pixelmap *self, br_point *point, br_uint_8 *src, br_uint_16 s_stride, br_rectangle *bit_rect, br_uint_32 colour) |
||
541 | br_error _M_br_device_pixelmap_mem_copyBits(br_device_pixelmap* self, br_point* point, br_uint_8* src, br_uint_16 s_stride, br_rectangle* bit_rect, br_uint_32 colour) { |
||
542 | int bytes; |
||
543 | int bit; |
||
544 | br_rectangle ar; |
||
545 | br_point ap; |
||
546 | LOG_TRACE("(%p, %p, %p, %d, %p, %d)", self, point, src, s_stride, bit_rect, colour); |
||
547 | |||
548 | if (PixelmapCopyBitsClip(&ar, &ap, bit_rect, point, (br_pixelmap*)self) == BR_CLIP_REJECT) { |
||
549 | return 0; |
||
550 | } |
||
551 | bytes = pmTypeInfo[self->pm_type].bits >> 3; |
||
552 | bit = ar.x & 0x7; |
||
553 | |||
554 | pm_mem_copy_bits((br_uint_8*)self->pm_pixels + (self->pm_base_y + ap.y) * self->pm_row_bytes + (self->pm_base_x + ap.x + (ar.x & ~0x7) - bit) * bytes, self->pm_pixels_qualifier, |
||
555 | self->pm_row_bytes, src + ar.y * s_stride, s_stride, bit, bit + ar.w, ar.h, bytes, colour); |
||
556 | return 0; |
||
557 | } |
||
558 | |||
559 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_pixelQuery(br_device_pixelmap *self, br_uint_32 *pcolour, br_point *p) |
||
560 | br_error _M_br_device_pixelmap_mem_pixelQuery(br_device_pixelmap* self, br_uint_32* pcolour, br_point* p) { |
||
561 | //br_point ap; // Pierre-Marie Baty -- unused variable |
||
562 | //br_int_8 bytes; // Pierre-Marie Baty -- unused variable |
||
563 | LOG_TRACE("(%p, %p, %p)", self, pcolour, p); |
||
564 | NOT_IMPLEMENTED(); |
||
565 | } |
||
566 | |||
567 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_pixelAddressQuery(br_device_pixelmap *self, void **pptr, br_uint_32 *pqual, br_point *p) |
||
568 | br_error _M_br_device_pixelmap_mem_pixelAddressQuery(br_device_pixelmap* self, void** pptr, br_uint_32* pqual, br_point* p) { |
||
569 | //br_int_8 bytes; // Pierre-Marie Baty -- unused variable |
||
570 | //br_point ap; // Pierre-Marie Baty -- unused variable |
||
571 | LOG_TRACE("(%p, %p, %p, %p)", self, pptr, pqual, p); |
||
572 | NOT_IMPLEMENTED(); |
||
573 | } |
||
574 | |||
575 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_pixelAddressSet(br_device_pixelmap *self, void *ptr, br_uint_32 *qual) |
||
576 | br_error _M_br_device_pixelmap_mem_pixelAddressSet(br_device_pixelmap* self, void* ptr, br_uint_32* qual) { |
||
577 | LOG_TRACE("(%p, %p, %p)", self, ptr, qual); |
||
578 | NOT_IMPLEMENTED(); |
||
579 | } |
||
580 | |||
581 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_originSet(br_device_pixelmap *self, br_point *p) |
||
582 | br_error _M_br_device_pixelmap_mem_originSet(br_device_pixelmap* self, br_point* p) { |
||
583 | LOG_TRACE("(%p, %p)", self, p); |
||
584 | NOT_IMPLEMENTED(); |
||
585 | } |
||
586 | |||
587 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rowSize(br_device_pixelmap *self, br_size_t *sizep) |
||
588 | br_error _M_br_device_pixelmap_mem_rowSize(br_device_pixelmap* self, br_size_t* sizep) { |
||
589 | LOG_TRACE("(%p, %p)", self, sizep); |
||
590 | NOT_IMPLEMENTED(); |
||
591 | } |
||
592 | |||
593 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rowQuery(br_device_pixelmap *self, void *buffer, br_size_t buffer_size, br_int_32 row) |
||
594 | br_error _M_br_device_pixelmap_mem_rowQuery(br_device_pixelmap* self, void* buffer, br_size_t buffer_size, br_int_32 row) { |
||
595 | LOG_TRACE("(%p, %p, %d, %d)", self, buffer, buffer_size, row); |
||
596 | NOT_IMPLEMENTED(); |
||
597 | } |
||
598 | |||
599 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_rowSet(br_device_pixelmap *self, void *buffer, br_size_t buffer_size, br_int_32 row) |
||
600 | br_error _M_br_device_pixelmap_mem_rowSet(br_device_pixelmap* self, void* buffer, br_size_t buffer_size, br_int_32 row) { |
||
601 | LOG_TRACE("(%p, %p, %d, %d)", self, buffer, buffer_size, row); |
||
602 | NOT_IMPLEMENTED(); |
||
603 | } |
||
604 | |||
605 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_flush(br_device_pixelmap *self) |
||
606 | br_error _M_br_device_pixelmap_mem_flush(br_device_pixelmap* self) { |
||
607 | LOG_TRACE("(%p)", self); |
||
608 | NOT_IMPLEMENTED(); |
||
609 | } |
||
610 | |||
611 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_synchronise(br_device_pixelmap *self, br_token sync_type, br_boolean block) |
||
612 | br_error _M_br_device_pixelmap_mem_synchronise(br_device_pixelmap* self, br_token sync_type, br_boolean block) { |
||
613 | LOG_TRACE("(%p, %d, %d)", self, sync_type, block); |
||
614 | NOT_IMPLEMENTED(); |
||
615 | } |
||
616 | |||
617 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_directLock(br_device_pixelmap *self, br_boolean block) |
||
618 | br_error _M_br_device_pixelmap_mem_directLock(br_device_pixelmap* self, br_boolean block) { |
||
619 | LOG_TRACE("(%p, %d)", self, block); |
||
620 | |||
621 | return 0; |
||
622 | } |
||
623 | |||
624 | // IDA: br_error __cdecl _M_br_device_pixelmap_mem_directUnlock(br_device_pixelmap *self) |
||
625 | br_error _M_br_device_pixelmap_mem_directUnlock(br_device_pixelmap* self) { |
||
626 | LOG_TRACE("(%p)", self); |
||
627 | |||
628 | return 0; |
||
629 | } |