Subversion Repositories shark

Rev

Blame | Last modification | View Log | RSS feed


#include <stdlib.h>
#include <string.h>

#include "timing.h"
#include "libvga.h"             /* for __svgalib_infotable and ramdac inlines */
#include "ramdac.h" //SHARK
#include "accel.h"


/*
 * This is a temporary function that allocates and fills in a ModeInfo
 * structure based on a svgalib mode number.
 */


ModeInfo *
 __svgalib_createModeInfoStructureForSvgalibMode(int mode)
{
    ModeInfo *modeinfo;
    /* Create the new ModeInfo structure. */
    modeinfo = malloc(sizeof(ModeInfo));
    modeinfo->width = __svgalib_infotable[mode].xdim;
    modeinfo->height = __svgalib_infotable[mode].ydim;
    modeinfo->bytesPerPixel = __svgalib_infotable[mode].bytesperpixel;
    switch (__svgalib_infotable[mode].colors) {
    case 16:
        modeinfo->colorBits = 4;
        break;
    case 256:
        modeinfo->colorBits = 8;
        break;
    case 32768:
        modeinfo->colorBits = 15;
        modeinfo->blueOffset = 0;
        modeinfo->greenOffset = 5;
        modeinfo->redOffset = 10;
        modeinfo->blueWeight = 5;
        modeinfo->greenWeight = 5;
        modeinfo->redWeight = 5;
        break;
    case 65536:
        modeinfo->colorBits = 16;
        modeinfo->blueOffset = 0;
        modeinfo->greenOffset = 5;
        modeinfo->redOffset = 11;
        modeinfo->blueWeight = 5;
        modeinfo->greenWeight = 6;
        modeinfo->redWeight = 5;
        break;
    case 256 * 65536:
        modeinfo->colorBits = 24;
        modeinfo->blueOffset = 0;
        modeinfo->greenOffset = 8;
        modeinfo->redOffset = 16;
        modeinfo->blueWeight = 8;
        modeinfo->greenWeight = 8;
        modeinfo->redWeight = 8;
        break;
    }
    modeinfo->bitsPerPixel = modeinfo->bytesPerPixel * 8;
    if (__svgalib_infotable[mode].colors == 16)
        modeinfo->bitsPerPixel = 4;
    modeinfo->lineWidth = __svgalib_infotable[mode].xbytes;
    return modeinfo;
}


/*
 * This function converts a number of significant color bits to a matching
 * DAC mode type as defined in the RAMDAC interface.
 */


int __svgalib_colorbits_to_colormode(int bpp, int colorbits)
{
    if (colorbits == 8)
        return CLUT8_6;
    if (colorbits == 15)
        return RGB16_555;
    if (colorbits == 16)
        return RGB16_565;
    if (colorbits == 24) {
        if (bpp == 24)
            return RGB24_888_B;
        else
            return RGB32_888_B;
    }
    return CLUT8_6;
}


/*
 * Clear the accelspecs structure (disable acceleration).
 */


void __svgalib_clear_accelspecs(AccelSpecs * accelspecs)
{
    memset(accelspecs, 0, sizeof(AccelSpecs));
}