Files
tlib/oversampling/WDL/lice/lice_extended.h
2024-05-24 13:28:31 +02:00

165 lines
4.8 KiB
C++

#ifndef _LICE_EXTENDED_
#define _LICE_EXTENDED_
#include "lice.h"
#define DISABLE_LICE_EXTENSIONS
// stuff to pass to LICE_IBitmap::Extended
enum // IDs
{
LICE_EXT_SUPPORTS_ID, // data = ID, returns 1 if that extension ID is supported
LICE_EXT_CLEAR_ACCEL,
LICE_EXT_LINE_ACCEL,
LICE_EXT_FILLRECT_ACCEL,
LICE_EXT_DRAWCBEZIER_ACCEL,
LICE_EXT_DRAWGLYPH_ACCEL,
LICE_EXT_BLIT_ACCEL,
LICE_EXT_SCALEDBLIT_ACCEL,
LICE_EXT_GETFBOTEX_ACCEL, // if the bitmap is implemented as an openGL framebuffer object, get its texture backing store
LICE_EXT_DASHEDLINE_ACCEL,
LICE_EXT_GETPIXEL_ACCEL,
LICE_EXT_PUTPIXEL_ACCEL,
LICE_EXT_SETCLIP, // data == 0 to clear clip
LICE_EXT_WINDOW_BLIT,
LICE_EXT_FORGET, // optimizations can sometimes happen if a bitmap can be told it doesn't need to retain data after it's accessed
LICE_EXT_DRAWTRIANGLE_ACCEL,
};
struct LICE_Ext_Line_acceldata
{
float x1, y1, x2, y2;
LICE_pixel color;
float alpha;
int mode;
bool aa;
LICE_Ext_Line_acceldata(float _x1, float _y1, float _x2, float _y2, LICE_pixel _color, float _alpha, int _mode, bool _aa)
: x1(_x1), y1(_y1), x2(_x2), y2(_y2), color(_color), alpha(_alpha), mode(_mode), aa(_aa) {}
};
struct LICE_Ext_FillRect_acceldata
{
int x, y, w, h;
LICE_pixel color;
float alpha;
int mode;
LICE_Ext_FillRect_acceldata(int _x, int _y, int _w, int _h, LICE_pixel _color, float _alpha, int _mode)
: x(_x), y(_y), w(_w), h(_h), color(_color), alpha(_alpha), mode(_mode) {}
};
struct LICE_Ext_DrawCBezier_acceldata
{
float xstart, ystart, xctl1, yctl1, xctl2, yctl2, xend, yend;
LICE_pixel color;
float alpha;
int mode;
bool aa;
LICE_Ext_DrawCBezier_acceldata(float _xstart, float _ystart, float _xctl1, float _yctl1, float _xctl2, float _yctl2, float _xend, float _yend,
LICE_pixel _color, float _alpha, int _mode, bool _aa)
: xstart(_xstart), ystart(_ystart), xctl1(_xctl1), yctl1(_yctl1), xctl2(_xctl2), yctl2(_yctl2), xend(_xend), yend(_yend),
color(_color), alpha(_alpha), mode(_mode), aa(_aa) {}
};
struct LICE_Ext_DrawGlyph_acceldata
{
int x;
int y;
LICE_pixel color;
const LICE_pixel_chan* alphas;
int glyph_w, glyph_h;
float alpha;
int mode;
LICE_Ext_DrawGlyph_acceldata(int _x, int _y, LICE_pixel _color, LICE_pixel_chan* _alphas, int _glyph_w, int _glyph_h, float _alpha, int _mode)
: x(_x), y(_y), color(_color), alphas(_alphas), glyph_w(_glyph_w), glyph_h(_glyph_h), alpha(_alpha), mode(_mode) {}
};
struct LICE_Ext_Blit_acceldata
{
LICE_IBitmap* src;
int dstx, dsty, srcx, srcy, srcw, srch;
float alpha;
int mode;
LICE_Ext_Blit_acceldata(LICE_IBitmap* _src, int _dstx, int _dsty, int _srcx, int _srcy, int _srcw, int _srch, float _alpha, int _mode)
: src(_src), dstx(_dstx), dsty(_dsty), srcx(_srcx), srcy(_srcy), srcw(_srcw), srch(_srch), alpha(_alpha), mode(_mode) {}
};
struct LICE_Ext_ScaledBlit_acceldata
{
LICE_IBitmap* src;
int dstx, dsty, dstw, dsth;
float srcx, srcy, srcw, srch;
float alpha;
int mode;
LICE_Ext_ScaledBlit_acceldata(LICE_IBitmap* _src, int _dstx, int _dsty, int _dstw, int _dsth, float _srcx, float _srcy, float _srcw, float _srch, float _alpha, int _mode)
: src(_src), dstx(_dstx), dsty(_dsty), dstw(_dstw), dsth(_dsth), srcx(_srcx), srcy(_srcy), srcw(_srcw), srch(_srch), alpha(_alpha), mode(_mode) {}
};
struct LICE_Ext_DashedLine_acceldata
{
float x1, y1, x2, y2;
int pxon, pxoff;
LICE_pixel color;
float alpha;
int mode;
bool aa;
LICE_Ext_DashedLine_acceldata(float _x1, float _y1, float _x2, float _y2, int _pxon, int _pxoff, LICE_pixel _color, float _alpha, int _mode, bool _aa)
: x1(_x1), y1(_y1), x2(_x2), y2(_y2), pxon(_pxon), pxoff(_pxoff), color(_color), alpha(_alpha), mode(_mode), aa(_aa) {}
};
struct LICE_Ext_GetPixel_acceldata
{
int x, y;
LICE_pixel px; // return
LICE_Ext_GetPixel_acceldata(int _x, int _y)
: x(_x), y(_y), px(0) {}
};
struct LICE_Ext_PutPixel_acceldata
{
int x, y;
LICE_pixel color;
float alpha;
int mode;
LICE_Ext_PutPixel_acceldata(int _x, int _y, LICE_pixel _color, float _alpha, int _mode)
: x(_x), y(_y), color(_color), alpha(_alpha), mode(_mode) {}
};
struct LICE_Ext_SetClip_data
{
int x, y, w, h;
LICE_Ext_SetClip_data(int _x, int _y, int _w, int _h)
: x(_x), y(_y), w(_w), h(_h) {}
};
class pl_Mat;
struct LICE_Ext_DrawTriangle_acceldata
{
pl_Mat *mat; // will need to include plush.h to access this
double VertexShades[3][3]; // for solid element
float scrx[3], scry[3], scrz[3]; // scrz = 1/Zdist
double mapping_coords[2][3][2]; // [texture or texture2][vertex][uv]
};
struct LICE_Ext_WindowBlit_data
{
HWND hwnd;
int destx, desty, srcx, srcy, w, h;
LICE_Ext_WindowBlit_data(HWND _hwnd, int _destx, int _desty, int _srcx, int _srcy, int _w, int _h)
: hwnd(_hwnd), destx(_destx), desty(_desty), srcx(_srcx), srcy(_srcy), w(_w), h(_h) {}
};
#endif