root/src/add-ons/accelerants/neomagic/Acceleration.c
/*
        Copyright 1999, Be Incorporated.   All Rights Reserved.
        This file may be used under the terms of the Be Sample Code License.

        Other authors:
        Rudolf Cornelissen 4/2003-3/2004
*/

#define MODULE_BIT 0x40000000

#include "acc_std.h"

void SCREEN_TO_SCREEN_BLIT(engine_token *et, blit_params *list, uint32 count) {
        int i;

        /* do each blit */
        i=0;
        while (count--)
        {
                nm_acc_blit
                (
                        list[i].src_left,
                        list[i].src_top,
                        list[i].dest_left,
                        list[i].dest_top,
                        list[i].width,
                        list[i].height
                );
                i++;
        }
}

void SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT(engine_token *et, scaled_blit_params *list, uint32 count) {
        int i;

        /* do each blit */
        i=0;
        while (count--)
        {
                nm_acc_video_blit
                (
                        list[i].src_left,
                        list[i].src_top,
                        list[i].src_width,
                        list[i].src_height,
                        list[i].dest_left,
                        list[i].dest_top,
                        list[i].dest_width,
                        list[i].dest_height
                );
                i++;
        }
}

void SCREEN_TO_SCREEN_TRANSPARENT_BLIT(engine_token *et, uint32 transparent_colour, blit_params *list, uint32 count) {
        int i;

        /* do each blit */
        i=0;
        while (count--)
        {
                nm_acc_transparent_blit
                (
                        list[i].src_left,
                        list[i].src_top,
                        list[i].dest_left,
                        list[i].dest_top,
                        list[i].width,
                        list[i].height,
                        transparent_colour
                );
                i++;
        }
}

void FILL_RECTANGLE(engine_token *et, uint32 colorIndex, fill_rect_params *list, uint32 count) {
        int i;

        /* init acc engine for fill function */
        nm_acc_setup_rectangle(colorIndex);

        /* draw each rectangle */
        i=0;
        while (count--)
        {
                nm_acc_rectangle
                (
                        list[i].left,
                        (list[i].right)+1,
                        list[i].top,
                        (list[i].bottom-list[i].top)+1
                );
                i++;
        }
}

void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count) {
        int i;

        /* init acc engine for invert function */
        nm_acc_setup_rect_invert();

        /* invert each rectangle */
        i=0;
        while (count--)
        {
                nm_acc_rectangle_invert
                (
                        list[i].left,
                        (list[i].right)+1,
                        list[i].top,
                        (list[i].bottom-list[i].top)+1
                );
                i++;
        }
}

void FILL_SPAN(engine_token *et, uint32 colorIndex, uint16 *list, uint32 count) {
        int i;

        /* init acc engine for fill function */
        nm_acc_setup_rectangle(colorIndex);

        /* draw each span */
        i=0;
        while (count--)
        {
                nm_acc_rectangle
                (
                        list[i+1],
                        list[i+2]+1,
                        list[i],
                        1
                );
                i+=3;
        }
}