Project

General

Profile

Revision 208

changed graph

View differences:

graph.c
29 29

  
30 30
static vbe_mode_info_t vbe_mem_info;
31 31

  
32
/// PUBLIC GET
33
uint16_t   (graph_get_XRes)         (void){ return vbe_mem_info.XResolution; }
34
uint16_t   (graph_get_YRes)         (void){ return vbe_mem_info.YResolution; }
35

  
36 32
/// PRIVATE GET
37 33
static uint16_t   (graph_get_bits_pixel)   (void){ return vbe_mem_info.BitsPerPixel; }
38
static uint16_t   (graph_get_bytes_pixel)  (void){ return (graph_get_bits_pixel() + 7) >> 3; }
39 34
static phys_bytes (graph_get_phys_addr)    (void){ return vbe_mem_info.PhysBasePtr; }
40 35
static unsigned   (graph_get_vram_size)    (void){ return vbe_mem_info.XResolution * vbe_mem_info.YResolution * graph_get_bytes_pixel(); }
41 36
//static uint16_t   (graph_get_RedMaskSize)  (void){ return vbe_mem_info.RedMaskSize  ; }
42 37
//static uint16_t   (graph_get_GreenMaskSize)(void){ return vbe_mem_info.GreenMaskSize; }
43 38
//static uint16_t   (graph_get_BlueMaskSize) (void){ return vbe_mem_info.BlueMaskSize ; }
44 39

  
40
/// PUBLIC GET
41
uint16_t   (graph_get_XRes)         (void){ return vbe_mem_info.XResolution; }
42
uint16_t   (graph_get_YRes)         (void){ return vbe_mem_info.YResolution; }
43
uint16_t   (graph_get_bytes_pixel)  (void){ return (graph_get_bits_pixel() + 7) >> 3; }
44

  
45
///
45 46
static int (get_permission)(unsigned int base_addr, unsigned int size) {
46 47
    struct minix_mem_range mmr;
47 48
    mmr.mr_base = base_addr;
......
244 245

  
245 246
/// PIXEL DRAWING
246 247
int (graph_set_pixel)(uint16_t x, uint16_t y, uint32_t color) {
247
    /*
248 248
    if (x < 0 || vbe_mem_info.XResolution <= x || y < 0 || vbe_mem_info.YResolution <= y) {
249 249
        //printf("%s: invalid pixel.\n", __func__);
250 250
        return OUT_OF_RANGE;
......
252 252
    unsigned int pos = (x + y * vbe_mem_info.XResolution) * graph_get_bytes_pixel();
253 253
    memcpy(video_buf + pos, &color, graph_get_bytes_pixel());
254 254
    return SUCCESS;
255
    */
256
    return graph_set_pixel_buffer(x, y, color, video_buf, graph_get_XRes(), graph_get_YRes());
257 255
}
258
int (graph_set_pixel_buffer)(uint16_t x, uint16_t y, uint32_t color, uint8_t *buf, uint16_t W, uint16_t H) {
259
    if(buf == NULL) return NULL_PTR;
260
    if (x < 0 || W <= x || y < 0 || H <= y) {
261
        //printf("%s: invalid pixel.\n", __func__);
262
        return OUT_OF_RANGE;
263
    }
264
    unsigned int pos = (x + y * W) * graph_get_bytes_pixel();
265
    memcpy(buf + pos, &color, graph_get_bytes_pixel());
266
    return SUCCESS;
267
}
268
int (graph_set_pixel_alpha_buffer)(uint16_t x, uint16_t y, uint8_t alpha, uint8_t *alp_buf, uint16_t W, uint16_t H) {
269
    if(alp_buf == NULL) return NULL_PTR;
270
    if (x < 0 || W <= x || y < 0 || H <= y) {
271
        //printf("%s: invalid pixel.\n", __func__);
272
        return OUT_OF_RANGE;
273
    }
274
    unsigned int pos = x + y * W;
275
    memcpy(alp_buf + pos, &alpha, 1);
276
    return SUCCESS;
277
}
278
/*
279
int (graph_set_pixel_alpha)(uint16_t x, uint16_t y, uint32_t color, uint8_t alpha){
280
    if (x >= vbe_mem_info.XResolution || y >= vbe_mem_info.YResolution) {
281
        //printf("%s: invalid pixel.\n", __func__);
282
        return OUT_OF_RANGE;
283
    }
284
    unsigned int pos = (x + y * vbe_mem_info.XResolution) * graph_get_bytes_pixel();
285
    uint32_t color_;
286
    memcpy(&color_, video_buf + pos, graph_get_bytes_pixel());
287
    float a = 1.0-(alpha&0xFF)/(float)0xFF;
288
    uint8_t r = GET_RED(color)*a + GET_RED(color_)*(1.0-a);
289
    uint8_t g = GET_GRE(color)*a + GET_GRE(color_)*(1.0-a);
290
    uint8_t b = GET_BLU(color)*a + GET_BLU(color_)*(1.0-a); (void)(r*g*b);
291
    //return graph_set_pixel(x,y,SET_RGB(r,g,b));
292
    color = SET_RGB(r,g,b);
293
    //unsigned int pos = (x + y * W) * graph_get_bytes_pixel();
256
void (graph_set_pixel_pos)(unsigned pos, uint32_t color){
294 257
    memcpy(video_buf + pos, &color, graph_get_bytes_pixel());
295
    return SUCCESS;
296 258
}
297
*/
298
int (graph_clear_screen)(void){
299
    //return graph_paint_screen(BLACK);
300
    memset(video_buf, 0, graph_get_vram_size());
301
    return SUCCESS;
302
}
259
int (graph_clear_screen)(void){ memset(video_buf, 0, graph_get_vram_size()); return SUCCESS; }
260
int (graph_draw)(void){ memcpy(video_mem, video_buf, graph_get_vram_size()); return SUCCESS; }
303 261

  
304
int (graph_draw)(void){
305
    memcpy(video_mem, video_buf, graph_get_vram_size());
306
    return 0;
307
}
262
/// SPRITE

Also available in: Unified diff