Revision 124
implemented sprites
lab5.c | ||
---|---|---|
5 | 5 |
#include <stdint.h> |
6 | 6 |
#include <stdio.h> |
7 | 7 |
|
8 |
#include "sprite.h" |
|
8 | 9 |
#include "graphics.h" |
9 | 10 |
#include "graphics_macros.h" |
10 | 11 |
#include "keyboard.h" |
... | ... | |
38 | 39 |
} |
39 | 40 |
|
40 | 41 |
int(video_test_init)(uint16_t mode, uint8_t delay) { |
41 |
//int r; |
|
42 |
//if ((r = get_permissions_first_mbyte())) |
|
43 |
// panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r); |
|
44 | 42 |
|
45 | 43 |
if (vbe_get_mode_information(mode)) { |
46 | 44 |
printf("%s: failed to get information for mode %x.\n", __func__, mode); |
... | ... | |
79 | 77 |
// lcom_run lab5 "rectangle 115 100 100 100 100 FF0000" |
80 | 78 |
int(video_test_rectangle)(uint16_t mode, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint32_t color) { |
81 | 79 |
int r; |
82 |
//if ((r = get_permissions_first_mbyte())) |
|
83 |
// panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r); |
|
84 | 80 |
|
85 | 81 |
if (vbe_get_mode_information(mode)) { |
86 | 82 |
printf("%s: failed to get information for mode %x.\n", __func__, mode); |
... | ... | |
167 | 163 |
|
168 | 164 |
int(video_test_pattern)(uint16_t mode, uint8_t no_rectangles, uint32_t first, uint8_t step) { |
169 | 165 |
int r; |
170 |
//if ((r = get_permissions_first_mbyte())) |
|
171 |
// panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r); |
|
172 | 166 |
|
173 | 167 |
if (vbe_get_mode_information(mode)) { |
174 | 168 |
printf("%s: failed to get information for mode %x.\n", __func__, mode); |
... | ... | |
270 | 264 |
|
271 | 265 |
int(video_test_xpm)(xpm_map_t xpm, uint16_t x, uint16_t y) { |
272 | 266 |
int r; |
273 |
//if ((r = get_permissions_first_mbyte())) |
|
274 |
// panic("%s: sys_privctl (ADD MEM) failed: %d\n", __func__, r); |
|
275 | 267 |
|
276 | 268 |
if (vbe_get_mode_information(INDEXED_1024_768)) { |
277 | 269 |
printf("%s: failed to get information for mode %x.\n", __func__, INDEXED_1024_768); |
... | ... | |
288 | 280 |
return 1; |
289 | 281 |
}; |
290 | 282 |
|
291 |
enum xpm_image_type type = XPM_INDEXED; |
|
292 |
xpm_image_t img; |
|
283 |
sprite_t *sp = sprite_ctor(xpm); |
|
284 |
sprite_set_pos(sp, x, y); |
|
285 |
sprite_draw(sp); |
|
293 | 286 |
|
294 |
uint8_t *map = xpm_load(xpm, type, &img); |
|
295 |
|
|
296 |
|
|
297 |
|
|
298 |
for (int i = 0; i < img.width; i++) { |
|
299 |
for (int j = 0; j < img.height; j++) { |
|
300 |
set_pixel(x + i, y + j, map[i + j * img.width]); |
|
301 |
} |
|
302 |
} |
|
303 |
|
|
304 | 287 |
/// loop stuff |
305 | 288 |
int ipc_status; |
306 | 289 |
message msg; |
Also available in: Unified diff