change hud to use antigrain, fix antigrain compiling in linux (for now, libagg is mandatory; give me a preprocessor symbol and i will make it optional) and move antigrain source back into windows directory

This commit is contained in:
zeromus 2009-07-12 01:34:27 +00:00
parent 04f79fb224
commit 64350887cc
213 changed files with 534 additions and 3006 deletions

View File

@ -32,8 +32,8 @@
#include "debug.h"
#include "render3D.h"
#include "gfx3d.h"
#include "GPU_osd.h"
#include "debug.h"
#include "GPU_osd.h"
#include "NDSSystem.h"
#include "readwrite.h"
@ -52,12 +52,10 @@ GPU::MosaicLookup GPU::mosaicLookup;
//#define DEBUG_TRI
CACHE_ALIGN u8 GPU_screen[4*256*192];
CACHE_ALIGN u8 GPU_tempScreen[4*256*192];
CACHE_ALIGN u8 *GPU_tempScanline;
CACHE_ALIGN u8 sprWin[256];
OSDCLASS *osd = NULL;
u16 gpu_angle = 0;
@ -2193,7 +2191,7 @@ int Screen_Init(int coreid)
MainScreen.gpu = GPU_Init(0);
SubScreen.gpu = GPU_Init(1);
memset(GPU_tempScreen, 0, sizeof(GPU_tempScreen));
memset(GPU_screen, 0, sizeof(GPU_screen));
for(int i = 0; i < (256*192*2); i++)
((u16*)GPU_screen)[i] = 0x7FFF;
disp_fifo.head = disp_fifo.tail = 0;
@ -2209,7 +2207,7 @@ void Screen_Reset(void)
GPU_Reset(MainScreen.gpu, 0);
GPU_Reset(SubScreen.gpu, 1);
memset(GPU_tempScreen, 0, sizeof(GPU_tempScreen));
memset(GPU_screen, 0, sizeof(GPU_screen));
for(int i = 0; i < (256*192*2); i++)
((u16*)GPU_screen)[i] = 0x7FFF;
@ -2673,7 +2671,7 @@ static INLINE void GPU_ligne_MasterBrightness(NDS_Screen * screen, u16 l)
{
GPU * gpu = screen->gpu;
u8 * dst = GPU_tempScreen + (screen->offset + l) * 512;
u8 * dst = GPU_screen + (screen->offset + l) * 512;
u16 i16;
//isn't it odd that we can set uselessly high factors here?
@ -2830,7 +2828,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l)
//blacken the screen if it is turned off by the user
if(!CommonSettings.showGpu.screens[gpu->core])
{
u8 * dst = GPU_tempScreen + (screen->offset + l) * 512;
u8 * dst = GPU_screen + (screen->offset + l) * 512;
memset(dst,0,512);
return;
}
@ -2857,7 +2855,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l)
//always generate the 2d+3d, no matter what we're displaying, since we may need to capture it
//(if this seems inefficient in some cases, consider that the speed in those cases is not really a problem)
GPU_tempScanline = screen->gpu->currDst = (u8 *)(GPU_tempScreen) + (screen->offset + l) * 512;
GPU_tempScanline = screen->gpu->currDst = (u8 *)(GPU_screen) + (screen->offset + l) * 512;
GPU_ligne_layer(screen, l);
if (gpu->core == GPU_MAIN)
@ -2870,7 +2868,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l)
{
case 0: // Display Off(Display white)
{
u8 * dst = GPU_tempScreen + (screen->offset + l) * 512;
u8 * dst = GPU_screen + (screen->offset + l) * 512;
for (int i=0; i<256; i++)
T2WriteWord(dst, i << 1, 0x7FFF);
@ -2883,14 +2881,14 @@ void GPU_ligne(NDS_Screen * screen, u16 l)
case 2: // Display framebuffer
{
u8 * dst = GPU_tempScreen + (screen->offset + l) * 512;
u8 * dst = GPU_screen + (screen->offset + l) * 512;
u8 * src = gpu->VRAMaddr + (l*512);
memcpy (dst, src, 512);
}
break;
case 3: // Display memory FIFO
{
u8 * dst = GPU_tempScreen + (screen->offset + l) * 512;
u8 * dst = GPU_screen + (screen->offset + l) * 512;
for (int i=0; i < 128; i++)
T1WriteLong(dst, i << 2, DISP_FIFOrecv() & 0x7FFF7FFF);
}
@ -3026,8 +3024,8 @@ template<bool MOSAIC> void GPU::modeRender(int layer)
void gpu_UpdateRender()
{
int x = 0, y = 0;
u16 *src = (u16*)GPU_tempScreen;
/*int x = 0, y = 0;
u16 *src = (u16*)GPU_screen;
u16 *dst = (u16*)GPU_screen;
switch (gpu_angle)
@ -3064,7 +3062,7 @@ void gpu_UpdateRender()
}
default:
break;
}
}*/
}
void gpu_SetRotateScreen(u16 angle)

View File

@ -32,7 +32,6 @@
#include "registers.h"
#include "FIFO.h"
#include "MMU.h"
#include "GPU_osd.h"
#include <iosfwd>
//#undef FORCEINLINE
@ -868,7 +867,6 @@ static void REG_DISPx_pack_test(GPU * gpu)
#endif
CACHE_ALIGN extern u8 GPU_screen[4*256*192];
CACHE_ALIGN extern u8 GPU_tempScreen[4*256*192];
GPU * GPU_Init(u8 l);
@ -993,7 +991,5 @@ void gpu_SetRotateScreen(u16 angle);
//#undef FORCEINLINE
//#define FORCEINLINE __forceinline
extern OSDCLASS *osd;
#endif

View File

@ -29,18 +29,12 @@
#include <time.h>
#include "debug.h"
#include "softrender.h"
#include "aggdraw.h"
#include "softrender_v3sysfont.h"
#include "softrender_desmumefont.h"
using namespace softrender;
image screenshell;
OSDCLASS *osd = NULL;
OSDCLASS::OSDCLASS(u8 core)
{
memset(screen, 0, sizeof(screen));
memset(name,0,7);
mode=core;
@ -49,7 +43,7 @@ OSDCLASS::OSDCLASS(u8 core)
lastLineText=0;
lineText_x = 5;
lineText_y = 120;
lineText_color = render51.MakeColor(255, 255, 255);
lineText_color = AggColor(255, 255, 255);
for (int i=0; i < OSD_MAX_LINES+1; i++)
{
lineText[i] = new char[1024];
@ -73,18 +67,7 @@ OSDCLASS::OSDCLASS(u8 core)
mode=255;
}
screenshell.shell = true;
screenshell.data = screen;
screenshell.bpp = 15;
screenshell.width = 256;
screenshell.height = 384;
screenshell.pitch = 256;
screenshell.cx1 = 0;
screenshell.cx2 = 256-1;
screenshell.cy1 = 0;
screenshell.cy2 = 384-1;
border(false);
//border(false);
LOG("OSD_Init (%s)\n",name);
}
@ -109,39 +92,10 @@ void OSDCLASS::setOffset(u16 ofs)
void OSDCLASS::setRotate(u16 angle)
{
rotAngle = angle;
switch(rotAngle)
{
case 0:
case 180:
{
screenshell.width = 256;
screenshell.height = 384;
screenshell.pitch = 256;
screenshell.cx1 = 0;
screenshell.cx2 = 255;
screenshell.cy1 = 0;
screenshell.cy2 = 383;
}
break;
case 90:
case 270:
{
screenshell.width = 384;
screenshell.height = 256;
screenshell.pitch = 384;
screenshell.cx1 = 0;
screenshell.cx2 = 383;
screenshell.cy1 = 0;
screenshell.cy2 = 255;
}
break;
}
}
void OSDCLASS::clear()
{
memset(screen, 0, sizeof(screen));
needUpdate=false;
}
@ -181,7 +135,8 @@ void OSDCLASS::update()
{
for (int i=0; i < lastLineText; i++)
{
render51.PrintString<DesmumeFont>(1,lineText_x,lineText_y+(i*16),lineColor[i],lineText[i],&screenshell);
aggDraw.hud->lineColor(lineColor[i]);
aggDraw.hud->renderTextDropshadowed(lineText_x,lineText_y+(i*16),lineText[i]);
}
}
else
@ -189,17 +144,6 @@ void OSDCLASS::update()
if (!needUpdate) return;
}
}
u16 *dst = (u16*)GPU_screen;
if (mode!=255)
dst+=offset*512;
for (int i=0; i<256*192*2; i++)
{
if(screen[i]&0x8000)
T2WriteWord((u8*)dst,(i << 1), screen[i] );
}
}
void OSDCLASS::setListCoord(u16 x, u16 y)
@ -210,7 +154,7 @@ void OSDCLASS::setListCoord(u16 x, u16 y)
void OSDCLASS::setLineColor(u8 r=255, u8 b=255, u8 g=255)
{
lineText_color = render51.MakeColor(r, g, b);
lineText_color = AggColor(r,g,b);
}
void OSDCLASS::addLine(const char *fmt, ...)
@ -249,19 +193,17 @@ void OSDCLASS::addFixed(u16 x, u16 y, const char *fmt, ...)
char msg[1024];
va_start(list,fmt);
#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
_vsnprintf(msg,1023,fmt,list);
#else
vsnprintf(msg,1023,fmt,list);
#endif
vsnprintf(msg,1023,fmt,list);
va_end(list);
render51.PrintString<DesmumeFont>(1,x,y,render51.MakeColor(255,255,255),msg,&screenshell);
aggDraw.hud->lineColor(255,255,255);
aggDraw.hud->renderTextDropshadowed(x,y,msg);
needUpdate = true;
}
void OSDCLASS::border(bool enabled)
{
render51.setTextBoxBorder(enabled);
//render51.setTextBoxBorder(enabled);
}

View File

@ -28,13 +28,14 @@
#include <time.h>
#include "types.h"
#include "aggdraw.h"
#define OSD_MAX_LINES 4
#define OSD_TIMER_SECS 2
class OSDCLASS
{
private:
u16 screen[256*192*2];
u64 offset;
u8 mode;
@ -42,11 +43,11 @@ private:
u16 lineText_x;
u16 lineText_y;
u32 lineText_color;
AggColor lineText_color;
u8 lastLineText;
char *lineText[OSD_MAX_LINES+1];
time_t lineTimer[OSD_MAX_LINES+1];
u32 lineColor[OSD_MAX_LINES+1];
AggColor lineColor[OSD_MAX_LINES+1];
bool needUpdate;

View File

@ -33,8 +33,6 @@ libdesmume_a_SOURCES = \
rtc.cpp rtc.h \
saves.cpp saves.h \
SPU.cpp SPU.h \
softrender.cpp softrender.h softrender_config.h \
softrender_v3sysfont.h softrender_desmumefont.h \
matrix.cpp matrix.h \
gfx3d.cpp gfx3d.h \
texcache.cpp texcache.h \
@ -50,7 +48,8 @@ libdesmume_a_SOURCES = \
addons/compactFlash.cpp addons/gbagame.cpp addons/none.cpp addons/rumblepak.cpp addons/guitarGrip.cpp fs.h \
cheatSystem.cpp cheatSystem.h \
texcache.cpp texcache.h rasterize.cpp rasterize.h \
version.h
version.h \
aggdraw.cpp
if HAVE_GLIB
libdesmume_a_SOURCES += commandline.h commandline.cpp
endif
@ -60,7 +59,7 @@ else
libdesmume_a_SOURCES += mic.cpp
endif
if HAVE_LIBAGG
libdesmume_a_SOURCES += aggdraw.cpp
endif
if HAVE_LUA
libdesmume_a_SOURCES += lua-engine.cpp

View File

@ -1143,7 +1143,7 @@ int NDS_WritePNG(const char *fname)
int x, y;
int width=256;
int height=192*2;
u16 * bmp = (u16 *)GPU_tempScreen;
u16 * bmp = (u16 *)GPU_screen;
FILE *pp=NULL;
uint8 *compmem = NULL;
uLongf compmemsize = (uLongf)( (height * (width + 1) * 3 * 1.001 + 1) + 12 );
@ -1269,7 +1269,7 @@ int NDS_WriteBMP(const char *filename)
bmpimgheader_struct imageheader;
FILE *file;
int i,j;
u16 * bmp = (u16 *)GPU_tempScreen;
u16 * bmp = (u16 *)GPU_screen;
size_t elems_written = 0;
memset(&fileheader, 0, sizeof(fileheader));

View File

@ -23,11 +23,14 @@
#ifndef AGG2D_INCLUDED
#define AGG2D_INCLUDED
// With this define uncommented you can use FreeType font engine
//we're not using vector fonts right now.
//#define AGG2D_USE_VECTORFONTS
#ifdef AGG2D_USE_VECTORFONTS
#if defined(UNDER_CE) || not defined(WIN32)
#define AGG2D_USE_FREETYPE
#endif
#endif
#pragma warning(disable: 4786)
@ -45,7 +48,6 @@
#include "agg_renderer_scanline.h"
#include "agg_span_gradient.h"
#include "agg_span_image_filter_rgba.h"
//#include "agg_span_image_resample_rgba.h"
//+ JME
#include "agg_span_allocator.h"
@ -58,6 +60,14 @@
#include "agg_rounded_rect.h"
#include "agg_font_cache_manager.h"
#include "agg_glyph_raster_bin.h"
#include "agg_renderer_raster_text.h"
#include "agg_embedded_raster_fonts.h"
#include <string>
#ifdef AGG2D_USE_VECTORFONTS
#ifdef AGG2D_USE_FREETYPE
#ifndef WIN32
#include "agg_font_freetype.h"
@ -67,6 +77,7 @@
#else
#include "../font_win32_tt/agg_font_win32_tt.h"
#endif
#endif
#include "agg_pixfmt_rgba.h"
//+ JME
@ -81,7 +92,7 @@
template<typename Main, typename Pre>
class PixFormatSet
class PixFormatSetDeclaration
{
public:
typedef Main PixFormat;
@ -170,17 +181,18 @@ public:
}
int width() const { return renBuf.width(); }
int height() const { return renBuf.height(); }
AGG2D_TEMPLATE void premultiply()
{
PixFormat pixf(renBuf);
pixf.premultiply();
}
AGG2D_TEMPLATE void premultiply()
{
typename PixFormatSet::PixFormat pixf(renBuf);
pixf.premultiply();
}
AGG2D_TEMPLATE void demultiply()
{
PixFormat pixf(renBuf);
pixf.demultiply();
}
{
typename PixFormatSet::PixFormat pixf(renBuf);
pixf.demultiply();
}
};
@ -249,6 +261,7 @@ public:
};
template<typename,typename> class Agg2DRenderer;
template<typename PixFormatSet> class Agg2D : public Agg2DBase
{
@ -290,20 +303,22 @@ public:
typedef agg::span_gradient<ColorType, agg::span_interpolator_linear<>, agg::gradient_x, GradientArray> LinearGradientSpan;
typedef agg::span_gradient<ColorType, agg::span_interpolator_linear<>, agg::gradient_circle, GradientArray> RadialGradientSpan;
#ifdef AGG2D_USE_VECTORFONTS
#ifdef AGG2D_USE_FREETYPE
typedef agg::font_engine_freetype_int32 FontEngine;
#else
typedef agg::font_engine_win32_tt_int32 FontEngine;
#endif
typedef agg::font_cache_manager<FontEngine> FontCacheManager;
typedef FontCacheManager::gray8_adaptor_type FontRasterizer;
typedef FontCacheManager::gray8_scanline_type FontScanline;
#endif
typedef agg::conv_curve<agg::path_storage> ConvCurve;
typedef agg::conv_stroke<ConvCurve> ConvStroke;
typedef agg::conv_transform<ConvCurve> PathTransform;
typedef agg::conv_transform<ConvStroke> StrokeTransform;
enum Gradient
{
Solid,
@ -312,7 +327,7 @@ public:
};
public:
AGG2D_TEMPLATE_WITH_IMAGE friend class Agg2DRenderer;
template<typename,typename> friend class Agg2DRenderer;
typedef ColorType Color;
@ -414,6 +429,7 @@ public:
double antiAliasGamma() const;
void font(const agg::int8u* font) { m_font = font; }
const agg::int8u* font() { return m_font; }
void fillColor(Color c);
void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255);
@ -493,6 +509,7 @@ public:
// Text
//-----------------------
#ifdef AGG2D_USE_VECTORFONTS
void flipText(bool flip);
void font(const char* fileName, double height,
bool bold = false,
@ -501,6 +518,7 @@ public:
double angle = 0.0);
double fontHeight() const;
double fontAscent() const;
void textAlignment(TextAlignment alignX, TextAlignment alignY);
bool textHints() const;
void textHints(bool hints);
@ -511,7 +529,7 @@ public:
double textWidth(const char* str);
void text(double x, double y, const char* str, bool roundOff=false, double dx=0.0, double dy=0.0);
#endif
// Path commands
//-----------------------
@ -592,7 +610,7 @@ public:
lineTo(dstX1, dstY2);
closePolygon();
double parallelogram[6] = { dstX1, dstY1, dstX2, dstY1, dstX2, dstY2 };
renderImage <ImagePixFormat> (img, imgX1, imgY1, imgX2, imgY2, parallelogram);
renderImage <typename ImagePixFormatSet::ImagePixFormat> (img, imgX1, imgY1, imgX2, imgY2, parallelogram);
}
AGG2D_IMAGE_TEMPLATE void transformImage(const TIMAGE& img,
@ -693,49 +711,47 @@ public:
void renderText(double dstX, double dstY, const std::string& str)
{
worldToScreen(dstX, dstY);
PixFormat pixF(m_rbuf);
//Rect r(imgX1, imgY1, imgX2, imgY2);
typedef agg::glyph_raster_bin<agg::rgba8> glyph_gen;
glyph_gen glyph(0);
if(m_blendMode == BlendAlpha)
{
typedef agg::renderer_base<PixFormatPre> ren_base;
agg::renderer_raster_htext_solid<ren_base, glyph_gen> rt(m_renBasePre,glyph);
rt.color(m_lineColor);
glyph.font(m_font);
rt.render_text(dstX, dstY, str.c_str(), true); //flipy
}
else
{
typedef agg::renderer_base<PixFormatCompPre> ren_base;
agg::renderer_raster_htext_solid<ren_base, glyph_gen> rt(m_renBaseCompPre,glyph);
rt.color(m_lineColor);
glyph.font(m_font);
rt.render_text(dstX, dstY, str.c_str(), true); //flipy
}
worldToScreen(dstX, dstY);
PixFormat pixF(m_rbuf);
//Rect r(imgX1, imgY1, imgX2, imgY2);
typedef agg::glyph_raster_bin<agg::rgba8> glyph_gen;
glyph_gen glyph(0);
}
if(m_blendMode == BlendAlpha)
{
typedef agg::renderer_base<PixFormatPre> ren_base;
agg::renderer_raster_htext_solid<ren_base, glyph_gen> rt(m_renBasePre,glyph);
rt.color(m_lineColor);
glyph.font(m_font);
rt.render_text(dstX, dstY, str.c_str(), true); //flipy
}
else
{
typedef agg::renderer_base<PixFormatCompPre> ren_base;
agg::renderer_raster_htext_solid<ren_base, glyph_gen> rt(m_renBaseCompPre,glyph);
rt.color(m_lineColor);
glyph.font(m_font);
rt.render_text(dstX, dstY, str.c_str(), true); //flipy
}
}
AGG2D_IMAGE_TEMPLATE void blendImage(TIMAGE& img, double dstX, double dstY, unsigned alpha=255)
{
worldToScreen(dstX, dstY);
PixFormat pixF(img.renBuf);
m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
if(m_blendMode == BlendAlpha)
{
m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
}
else
{
m_renBaseCompPre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
}
}
{
worldToScreen(dstX, dstY);
PixFormat pixF(img.renBuf);
m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
if(m_blendMode == BlendAlpha)
{
m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
}
else
{
m_renBaseCompPre.blend_from(pixF, 0, int(dstX), int(dstY), alpha);
}
}
@ -777,38 +793,40 @@ public:
private:
void render(bool fillColor);
#ifdef AGG2D_USE_VECTORFONTS
#if !defined( UNDER_CE )
void render(FontRasterizer& ras, FontScanline& sl);
#endif
#endif
void addLine(double x1, double y1, double x2, double y2);
void updateRasterizerGamma();
AGG2D_IMAGE_TEMPLATE void renderImage(const TIMAGE& img, int x1, int y1, int x2, int y2, const double* parl)
{
agg::trans_affine mtx((double)x1,
(double)y1,
(double)x2,
(double)y2,
parl);
mtx *= m_transform;
mtx.invert();
{
agg::trans_affine mtx((double)x1,
(double)y1,
(double)x2,
(double)y2,
parl);
mtx *= m_transform;
mtx.invert();
m_rasterizer.reset();
m_rasterizer.add_path(m_pathTransform);
m_rasterizer.reset();
m_rasterizer.add_path(m_pathTransform);
typedef agg::span_interpolator_linear<agg::trans_affine> Interpolator;
Interpolator interpolator(mtx);
typedef agg::span_interpolator_linear<agg::trans_affine> Interpolator;
Interpolator interpolator(mtx);
if(m_blendMode == BlendAlpha)
{
// JME audit -
Agg2DRenderer<PixFormatSet,ImagePixFormatSet>::renderImage(*this, img, m_renBasePre, interpolator);
}
else
{
Agg2DRenderer<PixFormatSet,ImagePixFormatSet>::renderImage(*this, img, m_renBaseCompPre, interpolator);
}
}
if(m_blendMode == BlendAlpha)
{
// JME audit -
Agg2DRenderer<PixFormatSet,ImagePixFormatSet>::renderImage(*this, img, m_renBasePre, interpolator);
}
else
{
Agg2DRenderer<PixFormatSet,ImagePixFormatSet>::renderImage(*this, img, m_renBaseCompPre, interpolator);
}
}
void updateTransformations();
@ -894,12 +912,13 @@ private:
PathTransform m_pathTransform;
StrokeTransform m_strokeTransform;
#ifdef AGG2D_USE_VECTORFONTS
#ifndef AGG2D_USE_FREETYPE
HDC m_fontDC;
#endif
FontEngine m_fontEngine;
FontCacheManager m_fontCacheManager;
#endif
};

View File

@ -19,7 +19,6 @@
// 11 Jul 2009 - significant refactors for introduction to desmume
//
//----------------------------------------------------------------------------
#include "GPU.h"
#include "agg2d.h"
static const double g_approxScale = 2.0;
@ -39,9 +38,11 @@ static const double g_approxScale = 2.0;
AGG2D_TEMPLATE inline TAGG2D::~Agg2D()
{
#ifdef AGG2D_USE_VECTORFONTS
#ifndef AGG2D_USE_FREETYPE
::ReleaseDC(0, m_fontDC);
#endif
#endif
}
AGG2D_TEMPLATE inline TAGG2D::Agg2D() :
@ -97,7 +98,8 @@ AGG2D_TEMPLATE inline TAGG2D::Agg2D() :
m_fontDescent(0.0),
m_fontCacheType(RasterFontCache),
m_imageFilter(Bilinear),
m_imageFilter(Bilinear), //less quality more speed
//m_imageFilter(NoFilter),
m_imageResample(NoResample),
m_imageFilterLut(agg::image_filter_bilinear(), true),
@ -120,16 +122,17 @@ AGG2D_TEMPLATE inline TAGG2D::Agg2D() :
m_convStroke(m_convCurve),
m_pathTransform(m_convCurve, m_transform),
m_strokeTransform(m_convStroke, m_transform),
m_strokeTransform(m_convStroke, m_transform)
#ifdef AGG2D_USE_VECTORFONTS
#ifdef AGG2D_USE_FREETYPE
m_fontEngine(),
, m_fontEngine(),
#else
m_fontDC(::GetDC(0)),
m_fontEngine(m_fontDC),
#endif
m_fontCacheManager(m_fontEngine)
#endif
{
lineCap(m_lineCap);
lineJoin(m_lineJoin);
@ -241,16 +244,21 @@ AGG2D_TEMPLATE void Agg2D AGG2D_TEMPLATE_ARG ::attach(unsigned char* buf, unsign
m_renBasePre.reset_clipping(true);
m_renBaseCompPre.reset_clipping(true);
//why is all this reset here???? seems silly.
resetTransformations();
lineWidth(1.0),
lineColor(0,0,0);
fillColor(255,255,255);
textAlignment(AlignLeft, AlignBottom);
clipBox(0, 0, width, height);
lineCap(CAP_ROUND);
lineJoin(JOIN_ROUND);
#ifdef AGG2D_USE_VECTORFONTS
textAlignment(AlignLeft, AlignBottom);
flipText(false);
imageFilter(Bilinear);
#endif
imageFilter(Bilinear); //less quality more speed
//imageFilter(NoFilter);
imageResample(NoResample);
m_masterAlpha = 1.0;
m_antiAliasGamma = 1.0;
@ -1055,6 +1063,8 @@ AGG2D_TEMPLATE void TAGG2D::polyline(double* xy, int numPoints)
//------------------------------------------------------------------------
#ifdef AGG2D_USE_VECTORFONTS
AGG2D_TEMPLATE void TAGG2D::flipText(bool flip)
{
m_fontEngine.flip_y(flip);
@ -1118,6 +1128,7 @@ AGG2D_TEMPLATE void TAGG2D::textAlignment(TextAlignment alignX, TextAlignment al
}
//------------------------------------------------------------------------
AGG2D_TEMPLATE double TAGG2D::textWidth(const char* str, unsigned int len)
{
#if defined( UNDER_CE )
@ -1359,7 +1370,7 @@ AGG2D_TEMPLATE void TAGG2D::text(double x, double y, const wchar_t* str, unsigne
}
}
#endif
//------------------------------------------------------------------------
AGG2D_TEMPLATE void TAGG2D::resetPath() { m_path.remove_all(); }
@ -1643,18 +1654,18 @@ public:
//- typedef agg::renderer_scanline_aa<BaseRenderer, TAGG2D::LinearGradientSpan> RendererLinearGradient;
typedef agg::renderer_scanline_aa<BaseRenderer,
span_allocator_type,
TAGG2D::LinearGradientSpan> RendererLinearGradient;
typename TAGG2D::LinearGradientSpan> RendererLinearGradient;
//- typedef agg::renderer_scanline_aa<BaseRenderer, TAGG2D::RadialGradientSpan> RendererRadialGradient;
typedef agg::renderer_scanline_aa<BaseRenderer,
span_allocator_type,
TAGG2D::RadialGradientSpan> RendererRadialGradient;
typename TAGG2D::RadialGradientSpan> RendererRadialGradient;
if ((fillColor && gr.m_fillGradientFlag == TAGG2D::Linear) ||
(!fillColor && gr.m_lineGradientFlag == TAGG2D::Linear))
{
if (fillColor)
{
TAGG2D::LinearGradientSpan span(/*gr.m_allocator, */
typename TAGG2D::LinearGradientSpan span(/*gr.m_allocator, */
gr.m_fillGradientInterpolator,
gr.m_linearGradientFunction,
gr.m_fillGradient,
@ -1666,7 +1677,7 @@ public:
}
else
{
TAGG2D::LinearGradientSpan span(/*gr.m_allocator,*/
typename TAGG2D::LinearGradientSpan span(/*gr.m_allocator,*/
gr.m_lineGradientInterpolator,
gr.m_linearGradientFunction,
gr.m_lineGradient,
@ -1684,7 +1695,7 @@ public:
{
if (fillColor)
{
TAGG2D::RadialGradientSpan span(/*gr.m_allocator, */
typename TAGG2D::RadialGradientSpan span(/*gr.m_allocator, */
gr.m_fillGradientInterpolator,
gr.m_radialGradientFunction,
gr.m_fillGradient,
@ -1696,7 +1707,7 @@ public:
}
else
{
TAGG2D::RadialGradientSpan span(/*gr.m_allocator,*/
typename TAGG2D::RadialGradientSpan span(/*gr.m_allocator,*/
gr.m_lineGradientInterpolator,
gr.m_radialGradientFunction,
gr.m_lineGradient,
@ -1727,20 +1738,20 @@ public:
void convert(Color* span, int x, int y, unsigned len) const
{
unsigned l2;
TAGG2D::Color* s2;
typename TAGG2D::Color* s2;
if(m_mode != TAGG2D::BlendDst)
{
l2 = len;
s2 = span;
typedef agg::comp_op_adaptor_clip_to_dst_rgba_pre<TAGG2D::Color, agg::order_rgba> OpType;
typedef agg::comp_op_adaptor_clip_to_dst_rgba_pre<typename TAGG2D::Color, agg::order_rgba> OpType;
do
{
OpType::blend_pix(m_mode,
(TAGG2D::Color::value_type*)s2,
(typename TAGG2D::Color::value_type*)s2,
m_color.r,
m_color.g,
m_color.b,
TAGG2D::Color::base_mask,
TAGG2D::Color::base_mask,
agg::cover_full);
++s2;
}
@ -1777,12 +1788,12 @@ public:
{
// JME
typedef agg::span_allocator<agg::rgba8> span_allocator_type;
typedef agg::renderer_scanline_aa<BaseRenderer,span_allocator_type,TAGG2D::LinearGradientSpan> RendererLinearGradient;
typedef agg::renderer_scanline_aa<BaseRenderer,span_allocator_type,TAGG2D::RadialGradientSpan> RendererRadialGradient;
typedef agg::renderer_scanline_aa<BaseRenderer,span_allocator_type,typename TAGG2D::LinearGradientSpan> RendererLinearGradient;
typedef agg::renderer_scanline_aa<BaseRenderer,span_allocator_type,typename TAGG2D::RadialGradientSpan> RendererRadialGradient;
if(gr.m_fillGradientFlag == TAGG2D::Linear)
{
TAGG2D::LinearGradientSpan span(
typename TAGG2D::LinearGradientSpan span(
gr.m_fillGradientInterpolator,
gr.m_linearGradientFunction,
gr.m_fillGradient,
@ -1795,7 +1806,7 @@ public:
{
if(gr.m_fillGradientFlag == TAGG2D::Radial)
{
TAGG2D::RadialGradientSpan span(
typename TAGG2D::RadialGradientSpan span(
gr.m_fillGradientInterpolator,
gr.m_radialGradientFunction,
gr.m_fillGradient,
@ -1823,20 +1834,23 @@ public:
//! JME - have not quite figured which part of this is not const-correct
// hence the cast.
Image& imgc = const_cast<Image&>(img);
ImagePixFormatSet::PixFormat img_pixf(imgc.renBuf);
typedef agg::image_accessor_clone<ImagePixFormatSet::PixFormat> img_source_type;
typename ImagePixFormatSet::PixFormat img_pixf(imgc.renBuf);
typedef agg::image_accessor_clone<typename ImagePixFormatSet::PixFormat> img_source_type;
img_source_type source(img_pixf);
SpanConvImageBlend blend(gr.m_imageBlendMode, gr.m_imageBlendColor);
if(gr.m_imageFilter == TAGG2D::NoFilter)
{
//modifications less quality more speed
typedef agg::span_image_filter_rgba_nn<img_source_type,Interpolator> SpanGenType;
typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
//typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,typename TAGG2D::SpanAllocator,SpanGenType> RendererType;
//typedef agg::renderer_scanline_bin<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
SpanGenType sg(source,interpolator);
SpanConvType sc(sg, blend);
//SpanConvType sc(sg, blend);
RendererType ri(renBase,gr.m_allocator,sg);
agg::render_scanlines(gr.m_rasterizer, gr.m_scanline, ri);
}
@ -1857,7 +1871,7 @@ public:
{
typedef agg::span_image_resample_rgba_affine<img_source_type> SpanGenType;
typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
typedef agg::renderer_scanline_aa<BaseRenderer,typename TAGG2D::SpanAllocator,SpanGenType> RendererType;
SpanGenType sg(source,interpolator,gr.m_imageFilterLut);
SpanConvType sc(sg, blend);
@ -1871,7 +1885,7 @@ public:
{
typedef agg::span_image_filter_rgba_bilinear<img_source_type,Interpolator> SpanGenType;
typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
typedef agg::renderer_scanline_aa<BaseRenderer,typename TAGG2D::SpanAllocator,SpanGenType> RendererType;
SpanGenType sg(source,interpolator);
SpanConvType sc(sg, blend);
@ -1884,7 +1898,7 @@ public:
{
typedef agg::span_image_filter_rgba_2x2<img_source_type,Interpolator> SpanGenType;
typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
typedef agg::renderer_scanline_aa<BaseRenderer,typename TAGG2D::SpanAllocator,SpanGenType> RendererType;
SpanGenType sg(source,interpolator,gr.m_imageFilterLut);
SpanConvType sc(sg, blend);
@ -1895,7 +1909,7 @@ public:
{
typedef agg::span_image_filter_rgba<img_source_type,Interpolator> SpanGenType;
typedef agg::span_converter<SpanGenType,SpanConvImageBlend> SpanConvType;
typedef agg::renderer_scanline_aa<BaseRenderer,TAGG2D::SpanAllocator,SpanGenType> RendererType;
typedef agg::renderer_scanline_aa<BaseRenderer,typename TAGG2D::SpanAllocator,SpanGenType> RendererType;
SpanGenType sg(source,interpolator,gr.m_imageFilterLut);
SpanConvType sc(sg, blend);
RendererType ri(renBase,gr.m_allocator,sg);
@ -1920,6 +1934,8 @@ AGG2D_TEMPLATE void TAGG2D::render(bool fillColor)
TAGG2DRENDERER::render(*this, m_renBaseComp, m_renSolidComp, fillColor);
}
}
#ifdef AGG2D_USE_VECTORFONTS
#if !defined( UNDER_CE )
//------------------------------------------------------------------------
@ -1936,10 +1952,10 @@ AGG2D_TEMPLATE void TAGG2D::render(FontRasterizer& ras, FontScanline& sl)
}
#endif
#endif
//------------------------------------------------------------------------
AGG2D_TEMPLATE struct Agg2DRasterizerGamma
struct Agg2DRasterizerGamma
{
Agg2DRasterizerGamma(double alpha, double gamma) :

View File

@ -63,6 +63,53 @@
#include "agg_span_allocator.h"
namespace agg
{
//this custom blender does more correct blending math than the default
//which is necessary or else drawing transparent pixels on (31,31,31) will yield (30,30,30)
struct my_blender_rgb555_pre
{
typedef rgba8 color_type;
typedef color_type::value_type value_type;
typedef color_type::calc_type calc_type;
typedef int16u pixel_type;
static AGG_INLINE void blend_pix(pixel_type* p,
unsigned cr, unsigned cg, unsigned cb,
unsigned alpha,
unsigned cover)
{
//not sure whether this is right...
alpha = color_type::base_mask - alpha;
pixel_type rgb = *p;
calc_type r = (rgb >> 10) & 31;
calc_type g = (rgb >> 5) & 31;
calc_type b = (rgb ) & 31;
r = ((r+1)*(alpha+1) + (cr)*(cover)-1)>>8;
g = ((g+1)*(alpha+1) + (cg)*(cover)-1)>>8;
b = ((b+1)*(alpha+1) + (cb)*(cover)-1)>>8;
*p = (r<<10)|(g<<5)|b;
}
static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
{
return (pixel_type)(((r & 0xF8) << 7) |
((g & 0xF8) << 2) |
(b >> 3) | 0x8000);
}
static AGG_INLINE color_type make_color(pixel_type p)
{
return color_type((p >> 7) & 0xF8,
(p >> 2) & 0xF8,
(p << 3) & 0xF8);
}
};
typedef pixfmt_alpha_blend_rgb_packed<my_blender_rgb555_pre, rendering_buffer> my_pixfmt_rgb555_pre; //----pixfmt_rgb555_pre
}
typedef std::map<std::string, const agg::int8u*> TAgg_Font_Table;
static TAgg_Font_Table font_table;
@ -125,8 +172,9 @@ static void Agg_init_fonts()
AggDraw_Desmume aggDraw;
typedef AggDrawTargetImplementation<PixFormatSet<agg::pixfmt_rgb555,agg::pixfmt_rgb555_pre> > T_AGG_RGB555;
typedef AggDrawTargetImplementation<PixFormatSet<agg::pixfmt_bgra32,agg::pixfmt_bgra32_pre> > T_AGG_RGBA;
typedef AggDrawTargetImplementation<PixFormatSetDeclaration<agg::pixfmt_rgb555,agg::my_pixfmt_rgb555_pre> > T_AGG_RGB555;
typedef AggDrawTargetImplementation<PixFormatSetDeclaration<agg::pixfmt_bgra32,agg::pixfmt_bgra32_pre> > T_AGG_RGBA;
T_AGG_RGB555 agg_targetScreen(GPU_screen, 256, 384, 512);
@ -138,7 +186,7 @@ T_AGG_RGBA agg_targetHud((u8*)hudBuffer, 256, 384, 1024);
static AggDrawTarget* targets[] = {
&agg_targetScreen,
&agg_targetHud,
&agg_targetScreen, //THATS RIGHT! for now, hud maps to screen
&agg_targetLua,
};
@ -146,6 +194,11 @@ void Agg_init()
{
Agg_init_fonts();
aggDraw.target = targets[0];
aggDraw.screen = targets[0];
aggDraw.hud = targets[1];
aggDraw.lua = targets[2];
aggDraw.hud->setFont("verdana18_bold");
}
void AggDraw_Desmume::setTarget(AggTarget newTarget)
@ -153,120 +206,123 @@ void AggDraw_Desmume::setTarget(AggTarget newTarget)
target = targets[newTarget];
}
void AggDraw_Desmume::composite(void* dest)
{
T_AGG_RGBA target((u8*)dest, 256, 384, 1024);
//if lua is nonempty, blend it
if(!agg_targetLua.empty)
{
T_AGG_RGBA::MyImage luaImage(agg_targetLua.buf());
target.transformImage(luaImage, 0,0,256-1,384-1);
}
//if hud is nonempty, blend it
if(!agg_targetHud.empty)
{
T_AGG_RGBA::MyImage hudImage(agg_targetHud.buf());
target.transformImage(hudImage, 0,0,256-1,384-1);
}
}
//this code would do compositing.. and maybe it will.. one day. but not for now.
//void AggDraw_Desmume::composite(void* dest)
//{
// T_AGG_RGB555 target((u8*)dest, 256, 384, 512);
//
// ctr = 0;
//
// //if lua is nonempty, blend it
// if(!agg_targetLua.empty)
// {
// T_AGG_RGBA::MyImage luaImage(agg_targetLua.buf());
// target.transformImage(luaImage, 0,40,256-1,384-1);
// }
//
// int zzz=9;
//
// //if hud is nonempty, blend it
// if(!agg_targetHud.empty)
// {
// T_AGG_RGBA::MyImage hudImage(agg_targetHud.buf());
// target.transformImage(hudImage, 0,0,256-1,384-1);
// }
//}
//temporary, just for testing the lib
void AGGDraw() {
aggDraw.setTarget(AggTarget_Hud);
aggDraw.target->clear();
m_graphics.clipBox(50, 50, rbuf_window().width() - 50, rbuf_window().height() - 50);
aggDraw.target->lineColor(0, 255, 0, 128);
aggDraw.target->fillColor(0, 255, 0, 128);
//aggDraw.target->noFill();
aggDraw.target->lineWidth(1.0);
aggDraw.target->roundedRect(10,10,256-10,192-10,4);
aggDraw.target->setFont("verdana18_bold");
aggDraw.target->renderText(60,60, "testing testing testing");
// Gradients (Aqua Buttons)
//=======================================
// m_graphics.font("Verdana", 20.0, false, false, TAGG2D::VectorFontCache);
double xb1 = 10;
double yb1 = 80;
double xb2 = xb1 + 150;
double yb2 = yb1 + 36;
aggDraw.target->fillColor(0,50,180,180);
aggDraw.target->lineColor(0,0,80, 255);
aggDraw.target->lineWidth(1.0);
aggDraw.target->roundedRect(xb1, yb1, xb2, yb2, 12, 18);
aggDraw.target->lineColor(0,0,0,0);
aggDraw.target->fillLinearGradient(xb1, yb1, xb1, yb1+30,
agg::rgba8(100,200,255,255),
agg::rgba8(255,255,255,0));
aggDraw.target->roundedRect(xb1+3, yb1+2.5, xb2-3, yb1+30, 9, 18, 1, 1);
aggDraw.target->fillColor(0,0,50, 200);
aggDraw.target->noLine();
/* m_graphics.textAlignment(TAGG2D::AlignCenter, TAGG2D::AlignCenter);
m_graphics.text((xb1 + xb2) / 2.0, (yb1 + yb2) / 2.0, "Aqua Button", true, 0.0, 0.0);
*/
aggDraw.target->fillLinearGradient(xb1, yb2-20, xb1, yb2-3,
agg::rgba8(0, 0, 255,0),
agg::rgba8(100,255,255,255));
aggDraw.target->roundedRect(xb1+3, yb2-20, xb2-3, yb2-2, 1, 1, 9, 18);
// Basic Shapes -- Ellipse
//===========================================
aggDraw.target->lineWidth(3.5);
aggDraw.target->lineColor(20, 80, 80);
aggDraw.target->fillColor(200, 255, 80, 200);
aggDraw.target->ellipse(150, 200, 50, 90);
// Paths
//===========================================
aggDraw.target->resetPath();
aggDraw.target->fillColor(255, 0, 0, 100);
aggDraw.target->lineColor(0, 0, 255, 100);
aggDraw.target->lineWidth(2);
aggDraw.target->moveTo(300/2, 200/2);
aggDraw.target->horLineRel(-150/2);
aggDraw.target->arcRel(150/2, 150/2, 0, 1, 0, 150/2, -150/2);
aggDraw.target->closePolygon();
aggDraw.target->drawPath();
aggDraw.target->resetPath();
aggDraw.target->fillColor(255, 255, 0, 100);
aggDraw.target->lineColor(0, 0, 255, 100);
aggDraw.target->lineWidth(2);
aggDraw.target->moveTo(275/2, 175/2);
aggDraw.target->verLineRel(-150/2);
aggDraw.target->arcRel(150/2, 150/2, 0, 0, 0, -150/2, 150/2);
aggDraw.target->closePolygon();
aggDraw.target->drawPath();
aggDraw.target->resetPath();
aggDraw.target->noFill();
aggDraw.target->lineColor(127, 0, 0);
aggDraw.target->lineWidth(5);
aggDraw.target->moveTo(600/2, 350/2);
aggDraw.target->lineRel(50/2, -25/2);
aggDraw.target->arcRel(25/2, 25/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
aggDraw.target->lineRel(50/2, -25/2);
aggDraw.target->arcRel(25/2, 50/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
aggDraw.target->lineRel(50/2, -25/2);
aggDraw.target->arcRel(25/2, 75/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
aggDraw.target->lineRel(50, -25);
aggDraw.target->arcRel(25/2, 100/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
aggDraw.target->lineRel(50/2, -25/2);
aggDraw.target->drawPath();
aggDraw.target->line(5, 6, 40, 70);
aggDraw.target->star(60, 70, 4, 5, 4, 6);
}
//void AGGDraw() {
//
// aggDraw.setTarget(AggTarget_Lua);
//
// aggDraw.target->clear();
//
// aggDraw.target->clipBox(0,0,255,383);
//
// aggDraw.target->lineColor(0, 255, 0, 128);
// aggDraw.target->fillColor(0, 255, 0, 128);
// //aggDraw.target->noFill();
// aggDraw.target->lineWidth(1.0);
// aggDraw.target->roundedRect(10,30,256-10,192-10,4);
//
// aggDraw.target->setFont("verdana18_bold");
// aggDraw.target->renderText(60,60, "testing testing testing");
//
// // Gradients (Aqua Buttons)
// //=======================================
//// m_graphics.font("Verdana", 20.0, false, false, TAGG2D::VectorFontCache);
// double xb1 = 10;
// double yb1 = 80;
// double xb2 = xb1 + 150;
// double yb2 = yb1 + 36;
//
// aggDraw.target->fillColor(0,50,180,180);
// aggDraw.target->lineColor(0,0,80, 255);
// aggDraw.target->lineWidth(1.0);
// aggDraw.target->roundedRect(xb1, yb1, xb2, yb2, 12, 18);
//
// aggDraw.target->lineColor(0,0,0,0);
// aggDraw.target->fillLinearGradient(xb1, yb1, xb1, yb1+30,
// agg::rgba8(100,200,255,255),
// agg::rgba8(255,255,255,0));
// aggDraw.target->roundedRect(xb1+3, yb1+2.5, xb2-3, yb1+30, 9, 18, 1, 1);
//
// aggDraw.target->fillColor(0,0,50, 200);
// aggDraw.target->noLine();
///* m_graphics.textAlignment(TAGG2D::AlignCenter, TAGG2D::AlignCenter);
// m_graphics.text((xb1 + xb2) / 2.0, (yb1 + yb2) / 2.0, "Aqua Button", true, 0.0, 0.0);
//*/
// aggDraw.target->fillLinearGradient(xb1, yb2-20, xb1, yb2-3,
// agg::rgba8(0, 0, 255,0),
// agg::rgba8(100,255,255,255));
// aggDraw.target->roundedRect(xb1+3, yb2-20, xb2-3, yb2-2, 1, 1, 9, 18);
//
// // Basic Shapes -- Ellipse
// //===========================================
// aggDraw.target->lineWidth(3.5);
// aggDraw.target->lineColor(20, 80, 80);
// aggDraw.target->fillColor(200, 255, 80, 200);
// aggDraw.target->ellipse(150, 200, 50, 90);
//
// // Paths
// //===========================================
// aggDraw.target->resetPath();
// aggDraw.target->fillColor(255, 0, 0, 100);
// aggDraw.target->lineColor(0, 0, 255, 100);
// aggDraw.target->lineWidth(2);
// aggDraw.target->moveTo(300/2, 200/2);
// aggDraw.target->horLineRel(-150/2);
// aggDraw.target->arcRel(150/2, 150/2, 0, 1, 0, 150/2, -150/2);
// aggDraw.target->closePolygon();
// aggDraw.target->drawPath();
//
// aggDraw.target->resetPath();
// aggDraw.target->fillColor(255, 255, 0, 100);
// aggDraw.target->lineColor(0, 0, 255, 100);
// aggDraw.target->lineWidth(2);
// aggDraw.target->moveTo(275/2, 175/2);
// aggDraw.target->verLineRel(-150/2);
// aggDraw.target->arcRel(150/2, 150/2, 0, 0, 0, -150/2, 150/2);
// aggDraw.target->closePolygon();
// aggDraw.target->drawPath();
//
// aggDraw.target->resetPath();
// aggDraw.target->noFill();
// aggDraw.target->lineColor(127, 0, 0);
// aggDraw.target->lineWidth(5);
// aggDraw.target->moveTo(600/2, 350/2);
// aggDraw.target->lineRel(50/2, -25/2);
// aggDraw.target->arcRel(25/2, 25/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
// aggDraw.target->lineRel(50/2, -25/2);
// aggDraw.target->arcRel(25/2, 50/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
// aggDraw.target->lineRel(50/2, -25/2);
// aggDraw.target->arcRel(25/2, 75/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
// aggDraw.target->lineRel(50, -25);
// aggDraw.target->arcRel(25/2, 100/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2);
// aggDraw.target->lineRel(50/2, -25/2);
// aggDraw.target->drawPath();
//}
//
//
@ -598,4 +654,4 @@ void AGGDraw() {
// m_graphics.ellipse(400, 500, 40, 40);
//
// }
//
//

View File

@ -41,6 +41,8 @@
#include "agg2d.h"
typedef agg::rgba8 AggColor;
class AggDrawTarget
{
public:
@ -58,9 +60,15 @@ public:
bool empty;
virtual void clear() = 0;
virtual void clipBox(double x1, double y1, double x2, double y2) = 0;
virtual Agg2DBase::RectD clipBox() const = 0;
virtual void lineColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) = 0;
virtual void lineColor(AggColor color) { lineColor(color.r,color.g,color.b,color.a); }
virtual AggColor lineColor() = 0;
virtual void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) = 0;
virtual AggColor fillColor() = 0;
virtual void noFill() = 0;
virtual void noLine() = 0;
virtual void lineWidth(double w) = 0;
@ -122,6 +130,22 @@ public:
static const agg::int8u* lookupFont(const std::string& name);
virtual void setFont(const std::string& name) = 0;
virtual void renderText(double dstX, double dstY, const std::string& str) = 0;
virtual void renderTextDropshadowed(double dstX, double dstY, const std::string& str)
{
AggColor lineColorOld = lineColor();
lineColor(255-lineColorOld.r,255-lineColorOld.g,255-lineColorOld.b);
renderText(dstX-1,dstY-1,str);
renderText(dstX,dstY-1,str);
renderText(dstX+1,dstY-1,str);
renderText(dstX-1,dstY,str);
renderText(dstX+1,dstY,str);
renderText(dstX-1,dstY+1,str);
renderText(dstX,dstY+1,str);
renderText(dstX+1,dstY+1,str);
lineColor(lineColorOld);
renderText(dstX,dstY,str);
}
// Auxiliary
virtual double pi() { return agg::pi; }
@ -140,7 +164,7 @@ public:
typedef Agg2D<PixFormatSet> BASE;
AggDrawTargetImplementation(agg::int8u* buf, int width, int height, int stride)
{
attach(buf,width,height,stride);
BASE::attach(buf,width,height,stride);
BASE::viewport(0, 0, width-1, height-1, 0, 0, width-1, height-1, TAGG2D::Anisotropic);
}
@ -153,8 +177,14 @@ public:
}
}
virtual void clipBox(double x1, double y1, double x2, double y2) { BASE::clipBox(x1,y1,x2,y2); }
virtual Agg2DBase::RectD clipBox() const { return BASE::clipBox(); }
virtual void lineColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) { BASE::lineColor(r,g,b,a); }
virtual AggColor lineColor() { return BASE::lineColor(); }
virtual void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) { BASE::fillColor(r,g,b,a); }
virtual AggColor fillColor() { return BASE::fillColor(); }
virtual void noFill() { BASE::noFill(); }
virtual void noLine() { BASE::noLine(); }
virtual void lineWidth(double w) { BASE::lineWidth(w); }
@ -175,10 +205,16 @@ public:
virtual void polygon(double* xy, int numPoints) {BASE::polygon(xy, numPoints);};
virtual void polyline(double* xy, int numPoints) {BASE::polyline(xy, numPoints);};
virtual void fillLinearGradient(double x1, double y1, double x2, double y2, Color c1, Color c2, double profile=1.0) {BASE::fillLinearGradient(x1, y1, x2, y2, c1, c2, profile); }
virtual void fillLinearGradient(double x1, double y1, double x2, double y2, AggColor c1, AggColor c2, double profile=1.0) {BASE::fillLinearGradient(x1, y1, x2, y2, c1, c2, profile); }
virtual void setFont(const std::string& name) { BASE::font(lookupFont(name)); }
virtual void renderText(double dstX, double dstY, const std::string& str) { dirty(); BASE::renderText(dstX, dstY, str); }
virtual void renderText(double dstX, double dstY, const std::string& str) {
dirty();
int height = BASE::font()[0];
int base = BASE::font()[1];
int offset = height-base*2;
BASE::renderText(dstX, dstY + offset, str);
}
// Path commands
virtual void resetPath() {BASE::resetPath();};
@ -209,10 +245,10 @@ public:
virtual void cubicCurveTo(double xCtrl2, double yCtrl2, double xTo, double yTo) {BASE::cubicCurveTo(xCtrl2, yCtrl2, xTo, yTo);};
virtual void cubicCurveRel(double xCtrl2, double yCtrl2, double xTo, double yTo) {BASE::cubicCurveRel(xCtrl2, yCtrl2, xTo, yTo);};
virtual void addEllipse(double cx, double cy, double rx, double ry, Direction dir) {BASE::addEllipse(cx, cy, rx, ry, dir);};
virtual void addEllipse(double cx, double cy, double rx, double ry, Agg2DBase::Direction dir) {BASE::addEllipse(cx, cy, rx, ry, dir);};
virtual void closePolygon() {BASE::closePolygon();};
virtual void drawPath(DrawPathFlag flag = FillAndStroke) {BASE::drawPath(flag);};
virtual void drawPath(Agg2DBase::DrawPathFlag flag = Agg2DBase::FillAndStroke) {BASE::drawPath(flag);};
// virtual void drawPathNoTransform(DrawPathFlag flag = FillAndStroke) {BASE::drawPathNoTransform(flag);};
// Auxiliary
@ -242,7 +278,9 @@ class AggDraw_Desmume : public AggDraw
{
public:
void setTarget(AggTarget newTarget);
void composite(void* dest);
//void composite(void* dest);
AggDrawTarget *screen, *hud, *lua;
};
extern AggDraw_Desmume aggDraw;

View File

@ -8,6 +8,7 @@
#include "zlib.h"
#include "NDSSystem.h"
#include "movie.h"
#include "GPU_osd.h"
#ifdef WIN32
#include "main.h"
#include "windows.h"

View File

@ -32,6 +32,7 @@
#include "common.h"
#include "mic.h"
#include "version.h"
#include "GPU_osd.h"
#include "memorystream.h"
using namespace std;

View File

@ -1,752 +0,0 @@
/// The VERGE 3 Project is originally by Ben Eirich and is made available via
/// the BSD License.
///
/// Please see LICENSE in the project's root directory for the text of the
/// licensing agreement. The CREDITS file in the same directory enumerates the
/// folks involved in this public build.
///
/// If you have altered this source file, please log your name, date, and what
/// changes you made below this line.
/****************************************************************
xerxes engine
vid_manager.cpp
****************************************************************/
#include "softrender.h"
#include <math.h>
#include <string.h>
#include "softrender_v3sysfont.h"
namespace softrender {
//instantiations
Trender32 render32;
Trender16 render16;
Trender15 render15;
Trender51 render51;
template<typename T>
T sgn(const T& a) {
if (a<0)
return -1;
else if (a>0)
return +1;
else return 0;
}
template<typename T>
T abs(const T& a) {
if (a<0)
return -a;
else return a;
}
template<typename T>
void SWAP(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
/***************************** data *****************************/
bool vid_initd = false;
bool vid_window = true;
int vid_bpp, vid_xres, vid_yres, vid_bytesperpixel;
int transColor;
image *screen;
/****************************************************************/
image::image()
{
}
image::image(int xres, int yres)
{
width = pitch = xres;
height = yres;
cx1 = 0;
cy1 = 0;
cx2 = width - 1;
cy2 = height - 1;
bpp = vid_bpp;
shell = 0;
data = new char[width*height*vid_bytesperpixel];
//switch (vid_bpp)
//{
// case 15:
// case 16:
// case 61: data = new word[width * height];
// break;
// case 32: data = new quad[width * height];
// break;
//}
}
void image::delete_data()
{
delete[] (char *)data;
}
image::~image()
{
if (data && !shell)
delete_data();
}
void image::SetClip(int x1, int y1, int x2, int y2)
{
cx1 = x1 >= 0 ? x1 : 0;
cy1 = y1 >= 0 ? y1 : 0;
cx1 = cx1 < width ? cx1 : width-1;
cy1 = cy1 < height ? cy1 : height-1;
cx2 = x2 >= 0 ? x2 : 0;
cy2 = y2 >= 0 ? y2 : 0;
cx2 = cx2 < width ? cx2 : width-1;
cy2 = cy2 < height ? cy2 : height-1;
}
void image::GetClip(int &x1, int &y1, int &x2, int &y2)
{
x1 = cx1;
y1 = cy1;
x2 = cx2;
y2 = cy2;
}
//generic render methods
//template<typename FONT>
//void renderbase::print_char(char c, image *dest)
//{
// int height = FONT::height(c);
//}
void renderbase::Line(int x, int y, int xe, int ye, int color, image *dest)
{
int dx = xe - x, dy = ye - y,
xg = sgn(dx), yg = sgn(dy),
i = 0;
float slope = 0;
if (abs(dx) >= abs(dy))
{
slope = (float) dy / (float) dx;
for (i=0; i!=dx; i+=xg)
PutPixel(x+i, y+(int)(slope*i), color, dest);
}
else
{
slope = (float) dx / (float) dy;
for (i=0; i!=dy; i+=yg)
PutPixel(x+(int)(slope*i), y+i, color, dest);
}
PutPixel(xe, ye, color, dest);
}
void renderbase::Box(int x, int y, int x2, int y2, int color, image *dest)
{
if (x2<x) SWAP(x,x2);
if (y2<y) SWAP(y,y2);
HLine(x, y, x2, color, dest);
HLine(x, y2, x2, color, dest);
VLine(x, y+1, y2-1, color, dest);
VLine(x2, y+1, y2-1, color, dest);
}
void renderbase::Rect(int x, int y, int x2, int y2, int color, image *dest)
{
if (y2<y) SWAP(y,y2);
for (; y<=y2; y++)
HLine(x, y, x2, color, dest);
}
void renderbase::Sphere(int x, int y, int xradius, int yradius, int color, image *dest)
{
Oval(x-xradius, y-yradius, x+xradius-1, y+yradius-1, color, 1, dest);
}
void renderbase::Circle(int x, int y, int xradius, int yradius, int color, image *dest)
{
Oval(x-xradius, y-yradius, x+xradius-1, y+yradius-1, color, 0, dest);
}
void renderbase::Oval(int x, int y, int xe, int ye, int color, int Fill, image *dest)
{
int m=xe-x, n=ye-y,
//mi=m/2, //mbg 9/5/05 this variable is not being used. why? probably unnecessary
ni=n/2,
dx=4*m*m,
dy=4*n*n,
r=m*n*n,
rx=2*r,
ry=0,
xx=m,
lasty=9999;
y+=ni;
if (Fill)
HLine(x, y, x+xx-1, color, dest);
else {
PutPixel(x, y, color, dest);
PutPixel(x+xx, y, color, dest);
}
xe=x, ye=y;
if (ni+ni==n)
{
ry=-2*m*m;
}
else
{
ry=2*m*m;
ye++;
if (Fill)
HLine(xe, ye, xe+xx-1, color, dest);
else {
PutPixel(xe, ye, color, dest);
PutPixel(xe+xx, ye, color, dest);
}
}
while (xx>0)
{
if (r<=0)
{
xx-=2;
x++, xe++;
rx-=dy;
r+=rx;
}
if (r>0)
{
y--, ye++;
ry+=dx;
r-=ry;
}
if (Fill && y != lasty)
{
HLine(x, y, x+xx-1, color, dest);
HLine(xe, ye, xe+xx-1, color, dest);
}
else {
PutPixel(x, y, color, dest);
PutPixel(x+xx, y, color, dest);
PutPixel(xe, ye, color, dest);
PutPixel(xe+xx, ye, color, dest);
}
lasty = y;
}
}
void renderbase::GrabRegion(int sx1, int sy1, int sx2, int sy2, int dx, int dy, image *s, image *d)
{
int dcx1, dcy1, dcx2, dcy2;
d->GetClip(dcx1, dcy1, dcx2, dcy2);
if (sx1>sx2) SWAP(sx1, sx2);
if (sy1>sy2) SWAP(sy1, sy2);
int grabwidth = sx2 - sx1;
int grabheight = sy2 - sy1;
d->SetClip(dx, dy, dx+grabwidth, dy+grabheight);
Blit(dx-sx1, dy-sy1, s, d);
d->SetClip(dcx1, dcy1, dcx2, dcy2);
}
// Overkill 2006-02-04
void renderbase::RectVGrad(int x, int y, int x2, int y2, int color, int color2, image *dest)
{
int r, g, b;
int color_r, color_g, color_b;
int color_r2, color_g2, color_b2;
int i = 0;
GetColor(color, color_r, color_g, color_b);
GetColor(color2, color_r2, color_g2, color_b2);
if (y2 < y) SWAP(y,y2);
for(i = 0; i <= y2 - y; i++)
{
r = ((i * (color_r2 - color_r) / (y2 - y)) + color_r);
g = ((i * (color_g2 - color_g) / (y2 - y)) + color_g);
b = ((i * (color_b2 - color_b) / (y2 - y)) + color_b);
HLine(x, y + i, x2, MakeColor(r, g, b), dest);
}
}
// Overkill 2006-02-04
void renderbase::RectHGrad(int x, int y, int x2, int y2, int color, int color2, image *dest)
{
int r, g, b;
int color_r, color_g, color_b;
int color_r2, color_g2, color_b2;
int i = 0;
GetColor(color, color_r, color_g, color_b);
GetColor(color2, color_r2, color_g2, color_b2);
if (x2 < x) SWAP(x,x2);
for(i = 0; i <= x2 - x; i++)
{
r = ((i * (color_r2 - color_r) / (x2 - x)) + color_r);
g = ((i * (color_g2 - color_g) / (x2 - x)) + color_g);
b = ((i * (color_b2 - color_b) / (x2 - x)) + color_b);
VLine(x + i, y, y2, MakeColor(r, g, b), dest);
}
}
// janus 2006-07-22
// radial gradient: color1 is edge color, color2 is center color
void renderbase::RectRGrad(int x1, int y1, int x2, int y2, int color1, int color2, image *dest)
{
int r1, r2, g1, g2, b1, b2;
GetColor(color1, r1, g1, b1);
GetColor(color2, r2, g2, b2);
if (x2 < x1) SWAP(x1,x2);
if (y2 < y1) SWAP(y1,y2);
int w = (x2 - x1) + 1;
int h = (y2 - y1) + 1;
int z;
if ((w == 0) || (h == 0)) return;
// lookup table to eliminate the sqrt-per-pixel
static bool tableInitialized = false;
static struct pythagorasTable { byte v[256]; } pythagorasLookup[256];
if (!tableInitialized) {
// we initialize this table on the fly the first time this function is invoked
// the output of the formula is not in the value range we require for 8bpp so we scale it
// if you want a nonscaled gradient, set this constant to 1.0f
const float pythagorasConstant = 0.707106781186547f;
for (unsigned a = 0; a < 256; a++) {
for (unsigned b = 0; b < 256; b++) {
float value = sqrt((float)(a * a) + (b * b)) * pythagorasConstant;
if (value <= 0)
pythagorasLookup[a].v[b] = 0;
else if (value >= 255)
pythagorasLookup[a].v[b] = 255;
else
pythagorasLookup[a].v[b] = unsigned(value) & 0xFF;
}
}
tableInitialized = true;
}
// color lookup table to reduce per-pixel blending computations
int colorTable[256];
for (int i = 0; i < 256; i++) {
unsigned r = r2 + ((r1 - r2) * i / 255);
unsigned g = g2 + ((g1 - g2) * i / 255);
unsigned b = b2 + ((b1 - b2) * i / 255);
colorTable[i] = MakeColor(r, g, b);
}
// x and y weight tables which unfortunately must be dynamically allocated due to the fact that their size depends on the size of the rect
byte* xTable = new byte[w];
byte* yTable = new byte[h];
{
// the float->int conversions in here are kind of expensive, it might be alright to do this in integer.
// haven't tested the math enough to be sure though, so float it is ('cause i'm lazy)
float xMul = 255.0f / (w / 2), yMul = 255.0f / (h / 2);
int xOffset = (w / 2), yOffset = (h / 2);
// these tables convert x/y coordinates into 0-255 weights which can be used to index the sqrt table
for (int x = 0; x < w; x++) {
xTable[x] = unsigned((float)abs(x - xOffset) * xMul) & 0xFF;
}
for (int y = 0; y < h; y++) {
yTable[y] = unsigned((float)abs(y - yOffset) * yMul) & 0xFF;
}
}
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
z = pythagorasLookup[yTable[y]].v[xTable[x]];
PutPixel(x+x1, y+y1, colorTable[z], dest);
}
}
// cleanup locals
delete[] xTable;
delete[] yTable;
}
// 4-corner gradient: color1-4 are edges top left, top right, bottom left, bottom right
void renderbase::Rect4Grad(int x1, int y1, int x2, int y2, int color1, int color2, int color3, int color4, image *dest)
{
int cr[4], cg[4], cb[4];
GetColor(color1, cr[0], cg[0], cb[0]);
GetColor(color2, cr[1], cg[1], cb[1]);
GetColor(color3, cr[2], cg[2], cb[2]);
GetColor(color4, cr[3], cg[3], cb[3]);
if (x2 < x1) SWAP(x1,x2);
if (y2 < y1) SWAP(y1,y2);
int w = (x2 - x1) + 1;
int h = (y2 - y1) + 1;
if ((w == 0) || (h == 0)) return;
unsigned wDiv = w-1;
unsigned hDiv = h-1;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
// calculate x and y weights
unsigned aX = x * 255 / wDiv;
unsigned aY = y * 255 / hDiv;
// calculate per-color weights
unsigned a[4]; // tl tr bl br
a[0] = (aX^0xFF) * (aY^0xFF) / 255;
a[1] = aX * (aY^0xFF) / 255;
a[2] = (aX^0xFF) * aY / 255;
a[3] = 255 - (a[0] + a[1] + a[2]);
// blend
unsigned r = ((cr[0] * a[0]) + (cr[1] * a[1]) + (cr[2] * a[2]) + (cr[3] * a[3])) / 255;
unsigned g = ((cg[0] * a[0]) + (cg[1] * a[1]) + (cg[2] * a[2]) + (cg[3] * a[3])) / 255;
unsigned b = ((cb[0] * a[0]) + (cb[1] * a[1]) + (cb[2] * a[2]) + (cb[3] * a[3])) / 255;
PutPixel(x+x1, y+y1, MakeColor(r, g, b), dest);
}
}
}
int Trender32::MakeColor(int r, int g, int b)
{
return ((r<<16)|(g<<8)|b);
}
bool Trender32::GetColor(int c, int &r, int &g, int &b)
{
// if (c == transColor) return false;
b = c & 0xff;
g = (c >> 8) & 0xff;
r = (c >> 16) & 0xff;
return true;
}
void Trender32::Clear(int color, image *dest)
{
int *d = (int *)dest->data;
int bytes = dest->pitch * dest->height;
while (bytes--)
*d++ = color;
}
int Trender32::ReadPixel(int x, int y, image *source)
{
quad *ptr = (quad*)source->data;
return ptr[(y * source->pitch) + x];
}
void Trender32::PutPixel(int x, int y, int color, image *dest)
{
int *ptr = (int *)dest->data;
if (x<dest->cx1 || x>dest->cx2 || y<dest->cy1 || y>dest->cy2)
return;
ptr[(y * dest->pitch) + x] = color;
}
void Trender32::HLine(int x, int y, int xe, int color, image *dest)
{
int *d = (int *) dest->data;
int cx1=0, cy1=0, cx2=0, cy2=0;
if (xe<x) SWAP(x,xe);
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || xe<cx1 || y<cy1)
return;
if (xe>cx2) xe=cx2;
if (x<cx1) x =cx1;
d += (y * dest->pitch) + x;
for (; x<=xe; x++)
*d++ = color;
}
void Trender32::VLine(int x, int y, int ye, int color, image *dest)
{
int *d = (int *) dest->data;
int cx1=0, cy1=0, cx2=0, cy2=0;
if (ye<y) SWAP(y,ye);
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x<cx1 || ye<cy1)
return;
if (ye>cy2) ye=cy2;
if (y<cy1) y =cy1;
d += (y * dest->pitch) + x;
for (; y<=ye; y++, d+=dest->pitch)
*d = color;
}
void Trender32::Blit(int x, int y, image *src, image *dest)
{
int *s=(int *)src->data,
*d=(int *)dest->data;
int spitch=src->pitch,
dpitch=dest->pitch;
int xlen=src->width,
ylen=src->height;
int cx1=0, cy1=0,
cx2=0, cy2=0;
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x+xlen<cx1 || y+ylen<cy1)
return;
if (x+xlen>cx2) xlen = cx2-x+1;
if (y+ylen>cy2) ylen = cy2-y+1;
if (x<cx1) {
s +=(cx1-x);
xlen-=(cx1-x);
x =cx1;
}
if (y<cy1) {
s +=(cy1-y)*spitch;
ylen-=(cy1-y);
y =cy1;
}
d += (y * dpitch) + x;
for (xlen *= 4; ylen--; s+=spitch, d+=dpitch)
memcpy(d, s, xlen);
}
void Trender32::TBlit(int x, int y, image *src, image *dest)
{
int *s=(int *)src->data,c,
*d=(int *)dest->data;
int spitch=src->pitch,
dpitch=dest->pitch;
int xlen=src->width,
ylen=src->height;
int cx1=0, cy1=0,
cx2=0, cy2=0;
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x+xlen<cx1 || y+ylen<cy1)
return;
if (x+xlen > cx2) xlen=cx2-x+1;
if (y+ylen > cy2) ylen=cy2-y+1;
if (x<cx1) {
s +=(cx1-x);
xlen-=(cx1-x);
x =cx1;
}
if (y<cy1) {
s +=(cy1-y)*spitch;
ylen-=(cy1-y);
y =cy1;
}
d+=y*dpitch+x;
for (; ylen; ylen--)
{
for (x=0; x<xlen; x++)
{
c=s[x];
if (c != transColor) d[x]=c;
}
s+=spitch;
d+=dpitch;
}
}
/********************** 16bpp blitter code **********************/
int Trender16::MakeColor(int r, int g, int b)
{
return (((r>>3)<<11)|((g>>2)<<5)|(b>>3));
}
bool Trender16::GetColor(int c, int &r, int &g, int &b)
{
// if (c == transColor) return false;
b = (c & 0x1F) << 3;
g = ((c >> 5) & 0x3f) << 2;
r = ((c >> 11) & 0x1f) << 3;
return true;
}
void Trender16::Clear(int color, image *dest)
{
word *d = (word *)dest->data;
int bytes = dest->pitch * dest->height;
while (bytes--)
*d++ = color;
}
int Trender16::ReadPixel(int x, int y, image *source)
{
word *ptr = (word*)source->data;
return ptr[(y * source->pitch) + x];
}
void Trender16::PutPixel(int x, int y, int color, image *dest)
{
word *ptr = (word *)dest->data;
if (x<dest->cx1 || x>dest->cx2 || y<dest->cy1 || y>dest->cy2)
return;
ptr[(y * dest->pitch) + x] = color;
}
void Trender16::VLine(int x, int y, int ye, int color, image *dest)
{
word *d = (word *) dest->data;
int cx1=0, cy1=0, cx2=0, cy2=0;
if (ye<y) SWAP(y,ye);
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x<cx1 || ye<cy1)
return;
if (ye>cy2) ye=cy2;
if (y<cy1) y =cy1;
d += (y * dest->pitch) + x;
for (; y<=ye; y++, d+=dest->pitch)
*d = color;
}
void Trender16::HLine(int x, int y, int xe, int color, image *dest)
{
word *d = (word *) dest->data;
int cx1=0, cy1=0, cx2=0, cy2=0;
if (xe<x) SWAP(x,xe);
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || xe<cx1 || y<cy1)
return;
if (xe>cx2) xe=cx2;
if (x<cx1) x =cx1;
d += (y * dest->pitch) + x;
for (; x<=xe; x++)
*d++ = color;
}
void Trender16::Blit(int x, int y, image *src, image *dest)
{
word *s=(word *)src->data,
*d=(word *)dest->data;
int spitch=src->pitch,
dpitch=dest->pitch;
int xlen=src->width,
ylen=src->height;
int cx1=0, cy1=0,
cx2=0, cy2=0;
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x+xlen<cx1 || y+ylen<cy1)
return;
if (x+xlen>cx2) xlen = cx2-x+1;
if (y+ylen>cy2) ylen = cy2-y+1;
if (x<cx1) {
s +=(cx1-x);
xlen-=(cx1-x);
x =cx1;
}
if (y<cy1) {
s +=(cy1-y)*spitch;
ylen-=(cy1-y);
y =cy1;
}
d += (y * dpitch) + x;
for (xlen *= 2; ylen--; s+=spitch, d+=dpitch)
memcpy(d, s, xlen);
}
void Trender16::TBlit(int x, int y, image *src, image *dest)
{
word *s=(word *)src->data,c,
*d=(word *)dest->data;
int spitch=src->pitch,
dpitch=dest->pitch;
int xlen=src->width,
ylen=src->height;
int cx1=0, cy1=0,
cx2=0, cy2=0;
dest->GetClip(cx1, cy1, cx2, cy2);
if (x>cx2 || y>cy2 || x+xlen<cx1 || y+ylen<cy1)
return;
if (x+xlen > cx2) xlen=cx2-x+1;
if (y+ylen > cy2) ylen=cy2-y+1;
if (x<cx1) {
s +=(cx1-x);
xlen-=(cx1-x);
x =cx1;
}
if (y<cy1) {
s +=(cy1-y)*spitch;
ylen-=(cy1-y);
y =cy1;
}
d+=y*dpitch+x;
for (; ylen; ylen--)
{
for (x=0; x<xlen; x++)
{
c=s[x];
if (c != transColor) d[x]=c;
}
s+=spitch;
d+=dpitch;
}
}
/********************** 15bpp blitter code **********************/
int Trender15::MakeColor(int r, int g, int b)
{
return (((r>>3)<<10)|((g>>3)<<5)|(b>>3))|0x8000; //0x8000 for opaque
}
bool Trender15::GetColor(int c, int &r, int &g, int &b)
{
// if (c == transColor) return false;
b = (c & 0x1F) << 3;
g = ((c >> 5) & 0x1f) << 3;
r = ((c >> 10) & 0x1f) << 3;
return true;
}
/********************** 51bpp (15bpp with high bit blue) blitter code **********************/
int Trender51::MakeColor(int r, int g, int b)
{
return (((b>>3)<<10)|((g>>3)<<5)|(r>>3))|0x8000; //0x8000 for opaque
}
bool Trender51::GetColor(int c, int &r, int &g, int &b)
{
// if (c == transColor) return false;
r = (c & 0x1F) << 3;
g = ((c >> 5) & 0x1f) << 3;
b = ((c >> 10) & 0x1f) << 3;
return true;
}
} //end namespace

View File

@ -1,235 +0,0 @@
/// The VERGE 3 Project is originally by Ben Eirich and is made available via
/// the BSD License.
///
/// Please see LICENSE in the project's root directory for the text of the
/// licensing agreement. The CREDITS file in the same directory enumerates the
/// folks involved in this public build.
///
/// If you have altered this source file, please log your name, date, and what
/// changes you made below this line.
#ifndef SOFTRENDER_H
#define SOFTRENDER_H
#include <string.h>
#include "softrender_config.h"
namespace softrender {
class image
{
public:
int width, height, pitch;
int cx1, cy1, cx2, cy2;
int bpp, shell;
void *data;
image();
image(int xres, int yres);
~image();
void delete_data();
void SetClip(int x1, int y1, int x2, int y2);
void GetClip(int &x1, int &y1, int &x2, int &y2);
};
extern int vid_bpp, vid_xres, vid_yres, vid_bytesperpixel, transColor;
extern bool vid_window;
extern image *screen;
extern int alpha, ialpha;
extern int skewlines[];
int SetLucent(int percent);
//void run2xSAI(image *src, image *dest);
class renderbase {
private:
void Oval(int x, int y, int xe, int ye, int color, int Fill, image *dest);
public:
//render methods that do not depend on the pixel format
void Line(int x, int y, int xe, int ye, int color, image *dest);
void Box(int x, int y, int xe, int ye, int color, image *dest);
void Rect(int x, int y, int xe, int ye, int color, image *dest);
void Sphere(int x, int y, int xradius, int yradius, int color, image *dest);
void Circle(int x, int y, int xradius, int yradius, int color, image *dest);
void RectVGrad(int x, int y, int xe, int ye, int color, int color2, image *dest);
void RectHGrad(int x, int y, int xe, int ye, int color, int color2, image *dest);
void RectRGrad(int x1, int y1, int x2, int y2, int color1, int color2, image *dest);
void Rect4Grad(int x1, int y1, int x2, int y2, int color1, int color2, int color3, int color4, image *dest);
//things that werent originally even blitter-specific
void GrabRegion(int sx1, int sy1, int sx2, int sy2, int dx, int dy, image *s, image *d);
private:
bool textBoxBorder;
template<typename FONT>
void print_char(int scale, int x, int y, int color, char c, image *dest)
{
int height = FONT::height();
int width = FONT::width(c);
int ofs = FONT::haveContour()?1:0;
if (FONT::haveContour())
{
for (int yc=0; yc<height+2; yc++)
for (int xc=0; xc<width+2; xc++)
{
if(FONT::contour(c,xc,yc)) {
for(int xi=0;xi<scale;xi++)
for(int yi=0;yi<scale;yi++)
PutPixel((xc*scale+x)+xi,(yc*scale+y)+ yi,MakeColor(0,0,0), dest);
}
}
}
for (int yc=0; yc<height; yc++)
for (int xc=0; xc<width; xc++)
{
if(FONT::pixel(c,xc,yc)) {
for(int xi=0;xi<scale;xi++)
for(int yi=0;yi<scale;yi++)
PutPixel((xc*scale+x)+xi+ofs,(yc*scale+y)+ yi+ofs,color, dest);
}
}
}
public:
void setTextBoxBorder(bool enabled) { textBoxBorder = enabled; }
template<typename FONT>
void PrintString(int scale, int x, int y, int color, char *str, image *dest)
{
int xc = x;
int yc = y;
int height = FONT::height();
int boxSize= 0;
if (FONT::haveContour())
boxSize = ((FONT::width(*str)*scale+scale+1)*strlen(str));
else
boxSize = ((FONT::width(*str)*scale+scale)*strlen(str));
int x1 = x; // Remember where x where the line should start. -- Overkill 2005-12-28.
for (; *str; ++str)
{
// New lines -- Overkill 2005-12-28.
if (*str == '\n' || *str == '\r')
{
if (*str == '\r')
{
// Checks for \r\n so they aren't parsed as two seperate line breaks.
if (!*++str) return;
if (*str != '\n')
{
*--str;
}
}
xc = x1;
yc += height*scale + scale;
} else {
print_char<FONT>(scale, xc, yc, color, *str, dest);
xc += FONT::width(*str)*scale + scale;
if (FONT::haveContour()) xc += 1;
}
}
if (textBoxBorder)
Box(x, y, x+boxSize, y+height, MakeColor(0, 0, 0), dest);
}
public:
virtual int MakeColor(int r, int g, int b)=0;
virtual bool GetColor(int c, int &r, int &g, int &b)=0;
virtual void Clear(int color, image *dest)=0;
virtual int ReadPixel(int x, int y, image *dest)=0;
virtual void PutPixel(int x, int y, int color, image *dest)=0;
virtual void VLine(int x, int y, int ye, int color, image *dest)=0;
virtual void HLine(int x, int y, int xe, int color, image *dest)=0;
virtual void Blit(int x, int y, image *src, image *dest)=0;
virtual void TBlit(int x, int y, image *src, image *dest)=0;
//virtual void AlphaBlit(int x, int y, image *src, image *alpha, image *dest);
//virtual void AdditiveBlit(int x, int y, image *src, image *dest);
//virtual void TAdditiveBlit(int x, int y, image *src, image *dest);
//virtual void SubtractiveBlit(int x, int y, image *src, image *dest);
//virtual void TSubtractiveBlit(int x, int y, image *src, image *dest);
//virtual void BlitTile(int x, int y, char *src, image *dest);
//virtual void TBlitTile(int x, int y, char *src, image *dest);
//virtual void ScaleBlit(int x, int y, int dw, int dh, image *src, image *dest);
//virtual void TScaleBlit(int x, int y, int dw, int dh, image *src, image *dest);
//virtual void WrapBlit(int x, int y, image *src, image *dst);
//virtual void TWrapBlit(int x, int y, image *src, image *dst);
//virtual void Silhouette(int x, int y, int c, image *src, image *dst);
//virtual void RotScale(int x, int y, float angle, float scale, image *src, image *dest);
//virtual void Mosaic(int xf, int yf, image *src);
//virtual void Timeless(int x, int y1, int y, image *src, image *dest);
//virtual void BlitWrap(int x, int y, image *src, image *dest);
//virtual void ColorFilter(int filter, image *img);
//virtual void Triangle(int x1, int y1, int x2, int y2, int x3, int y3, int c, image *dest);
//virtual void FlipBlit(int x, int y, int fx, int fy, image *src, image *dest);
//virtual image* ImageFrom8bpp(byte *src, int width, int height, byte *pal);
//virtual image* ImageFrom24bpp(byte *src, int width, int height);
//virtual image* ImageFrom32bpp(byte *src, int width, int height);
//// Overkill (2007-05-04)
//virtual int HSVtoColor(int h, int s, int v);
//// Overkill (2007-05-04)
//virtual void GetHSV(int color, int &h, int &s, int &v);
//// Overkill (2007-05-04)
//virtual void HueReplace(int hue_find, int hue_tolerance, int hue_replace, image *img);
//// Overkill (2007-05-04)
//virtual void ColorReplace(int color_find, int color_replace, image *img);
};
class Trender16: public renderbase
{
public:
virtual int MakeColor(int r, int g, int b);
virtual bool GetColor(int c, int &r, int &g, int &b);
virtual void Clear(int color, image *dest);
virtual int ReadPixel(int x, int y, image *dest);
virtual void PutPixel(int x, int y, int color, image *dest);
virtual void VLine(int x, int y, int ye, int color, image *dest);
virtual void HLine(int x, int y, int xe, int color, image *dest);
virtual void Blit(int x, int y, image *src, image *dest);
virtual void TBlit(int x, int y, image *src, image *dest);
};
class Trender32: public renderbase
{
public:
virtual int MakeColor(int r, int g, int b);
virtual bool GetColor(int c, int &r, int &g, int &b);
virtual void Clear(int color, image *dest);
virtual int ReadPixel(int x, int y, image *dest);
virtual void PutPixel(int x, int y, int color, image *dest);
virtual void VLine(int x, int y, int ye, int color, image *dest);
virtual void HLine(int x, int y, int xe, int color, image *dest);
virtual void Blit(int x, int y, image *src, image *dest);
virtual void TBlit(int x, int y, image *src, image *dest);
};
class Trender15 : public Trender16
{
public:
virtual int MakeColor(int r, int g, int b);
virtual bool GetColor(int c, int &r, int &g, int &b);
};
class Trender51 : public Trender16
{
public:
virtual int MakeColor(int r, int g, int b);
virtual bool GetColor(int c, int &r, int &g, int &b);
};
extern Trender32 render32;
extern Trender16 render16;
extern Trender15 render15;
extern Trender51 render51;
} //end namespace
#endif

View File

@ -1,14 +0,0 @@
#ifndef SOFTRENDER_CONFIG_H
#define SOFTRENDER_CONFIG_H
namespace softrender {
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned int quad;
}
#endif

View File

@ -1,574 +0,0 @@
/* Copyright (C) 2006 yopyop
yopyop156@ifrance.com
yopyop156.ifrance.com
Copyright (C) 2006-2008 DeSmuME team
This file is part of DeSmuME
DeSmuME is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
DeSmuME is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DeSmuME; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef SYSFONT_DESMUME_H
#define SYSFONT_DESMUME_H
#define OSD_FONT_WIDTH 8
#define OSD_FONT_HEIGHT 16
namespace softrender {
class DesmumeFont {
public:
static int height() { return OSD_FONT_HEIGHT; }
static int width(char c) { return OSD_FONT_WIDTH; }
static bool valid(char c) { return true; }
static bool haveContour() { return true; }
static int pixel(char c, int x, int y) {
static const unsigned char font_eng[256*OSD_FONT_HEIGHT] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00 */
0x00,0x00,0x7E,0x81,0xA5,0x81,0x81,0xBD,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00, /* 01 */
0x00,0x00,0x7E,0xFF,0xDB,0xFF,0xFF,0xC3,0xE7,0xFF,0xFF,0x7E,0x00,0x00,0x00,0x00, /* 02 */
0x00,0x00,0x00,0x00,0x6C,0xFE,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00, /* 03 */
0x00,0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 04 */
0x00,0x00,0x00,0x18,0x3C,0x3C,0xE7,0xE7,0xE7,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 05 */
0x00,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x7E,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 06 */
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 07 */
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 08 */
0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, /* 09 */
0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF, /* 0A */
0x00,0x00,0x1E,0x0E,0x1A,0x32,0x78,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00, /* 0B */
0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, /* 0C */
0x00,0x00,0x3F,0x33,0x3F,0x30,0x30,0x30,0x30,0x70,0xF0,0xE0,0x00,0x00,0x00,0x00, /* 0D */
0x00,0x00,0x7F,0x63,0x7F,0x63,0x63,0x63,0x63,0x67,0xE7,0xE6,0xC0,0x00,0x00,0x00, /* 0E */
0x00,0x00,0x00,0x18,0x18,0xDB,0x3C,0xE7,0x3C,0xDB,0x18,0x18,0x00,0x00,0x00,0x00, /* 0F */
0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFE,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, /* 10 */
0x00,0x02,0x06,0x0E,0x1E,0x3E,0xFE,0x3E,0x1E,0x0E,0x06,0x02,0x00,0x00,0x00,0x00, /* 11 */
0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, /* 12 */
0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x66,0x00,0x00,0x00,0x00, /* 13 */
0x00,0x00,0x7F,0xDB,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00, /* 14 */
0x00,0x7C,0xC6,0x60,0x38,0x6C,0xC6,0xC6,0x6C,0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00, /* 15 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00, /* 16 */
0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, /* 17 */
0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 18 */
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00, /* 19 */
0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 1A */
0x00,0x00,0x00,0x00,0x00,0x30,0x60,0xFE,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 1B */
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 1C */
0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* 1D */
0x00,0x00,0x00,0x00,0x10,0x38,0x38,0x7C,0x7C,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00, /* 1E */
0x00,0x00,0x00,0x00,0xFE,0xFE,0x7C,0x7C,0x38,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 1F */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 20 */
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 21 */
0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 22 */
0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00, /* 23 */
0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06,0x06,0x86,0xC6,0x7C,0x18,0x18,0x00,0x00, /* 24 */
0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18,0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00, /* 25 */
0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 26 */
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 27 */
0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00, /* 28 */
0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00, /* 29 */
0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00, /* 2A */
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 2B */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00, /* 2C */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 2D */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 2E */
0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00, /* 2F */
0x00,0x00,0x3C,0x66,0xC3,0xC3,0xDB,0xDB,0xC3,0xC3,0x66,0x3C,0x00,0x00,0x00,0x00, /* 30 */
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00, /* 31 */
0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00, /* 32 */
0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 33 */
0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, /* 34 */
0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 35 */
0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 36 */
0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00, /* 37 */
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 38 */
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00, /* 39 */
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* 3A */
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00, /* 3B */
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00, /* 3C */
0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 3D */
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00, /* 3E */
0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 3F */
0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00, /* 40 */
0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 41 */
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00, /* 42 */
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00, /* 43 */
0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00, /* 44 */
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00, /* 45 */
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 46 */
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE,0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00, /* 47 */
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 48 */
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 49 */
0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00, /* 4A */
0x00,0x00,0xE6,0x66,0x66,0x6C,0x78,0x78,0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 4B */
0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00, /* 4C */
0x00,0x00,0xC3,0xE7,0xFF,0xFF,0xDB,0xC3,0xC3,0xC3,0xC3,0xC3,0x00,0x00,0x00,0x00, /* 4D */
0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 4E */
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 4F */
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 50 */
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00, /* 51 */
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 52 */
0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 53 */
0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 54 */
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 55 */
0x00,0x00,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, /* 56 */
0x00,0x00,0xC3,0xC3,0xC3,0xC3,0xC3,0xDB,0xDB,0xFF,0x66,0x66,0x00,0x00,0x00,0x00, /* 57 */
0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00,0x00, /* 58 */
0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 59 */
0x00,0x00,0xFF,0xC3,0x86,0x0C,0x18,0x30,0x60,0xC1,0xC3,0xFF,0x00,0x00,0x00,0x00, /* 5A */
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, /* 5B */
0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00, /* 5C */
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00, /* 5D */
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 5E */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, /* 5F */
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 60 */
0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 61 */
0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00, /* 62 */
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 63 */
0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 64 */
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 65 */
0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 66 */
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00, /* 67 */
0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 68 */
0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 69 */
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, /* 6A */
0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00, /* 6B */
0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 6C */
0x00,0x00,0x00,0x00,0x00,0xE6,0xFF,0xDB,0xDB,0xDB,0xDB,0xDB,0x00,0x00,0x00,0x00, /* 6D */
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* 6E */
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 6F */
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00, /* 70 */
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00, /* 71 */
0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x66,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 72 */
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 73 */
0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00, /* 74 */
0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 75 */
0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, /* 76 */
0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0xC3,0xDB,0xDB,0xFF,0x66,0x00,0x00,0x00,0x00, /* 77 */
0x00,0x00,0x00,0x00,0x00,0xC3,0x66,0x3C,0x18,0x3C,0x66,0xC3,0x00,0x00,0x00,0x00, /* 78 */
0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00, /* 79 */
0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00, /* 7A */
0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, /* 7B */
0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 7C */
0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, /* 7D */
0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 7E */
0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00, /* 7F */
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,0xC2,0x66,0x3C,0x0C,0x06,0x7C,0x00,0x00, /* 80 */
0x00,0x00,0xCC,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 81 */
0x00,0x0C,0x18,0x30,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 82 */
0x00,0x10,0x38,0x6C,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 83 */
0x00,0x00,0xCC,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 84 */
0x00,0x60,0x30,0x18,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 85 */
0x00,0x38,0x6C,0x38,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 86 */
0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x0C,0x06,0x3C,0x00,0x00,0x00, /* 87 */
0x00,0x10,0x38,0x6C,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 88 */
0x00,0x00,0xC6,0x00,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 89 */
0x00,0x60,0x30,0x18,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 8A */
0x00,0x00,0x66,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8B */
0x00,0x18,0x3C,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8C */
0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8D */
0x00,0xC6,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 8E */
0x38,0x6C,0x38,0x00,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 8F */
0x18,0x30,0x60,0x00,0xFE,0x66,0x60,0x7C,0x60,0x60,0x66,0xFE,0x00,0x00,0x00,0x00, /* 90 */
0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x1B,0x7E,0xD8,0xDC,0x77,0x00,0x00,0x00,0x00, /* 91 */
0x00,0x00,0x3E,0x6C,0xCC,0xCC,0xFE,0xCC,0xCC,0xCC,0xCC,0xCE,0x00,0x00,0x00,0x00, /* 92 */
0x00,0x10,0x38,0x6C,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 93 */
0x00,0x00,0xC6,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 94 */
0x00,0x60,0x30,0x18,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 95 */
0x00,0x30,0x78,0xCC,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 96 */
0x00,0x60,0x30,0x18,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 97 */
0x00,0x00,0xC6,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00, /* 98 */
0x00,0xC6,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 99 */
0x00,0xC6,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 9A */
0x00,0x18,0x18,0x7E,0xC3,0xC0,0xC0,0xC0,0xC3,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, /* 9B */
0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xE6,0xFC,0x00,0x00,0x00,0x00, /* 9C */
0x00,0x00,0xC3,0x66,0x3C,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 9D */
0x00,0xFC,0x66,0x66,0x7C,0x62,0x66,0x6F,0x66,0x66,0x66,0xF3,0x00,0x00,0x00,0x00, /* 9E */
0x00,0x0E,0x1B,0x18,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x18,0xD8,0x70,0x00,0x00, /* 9F */
0x00,0x18,0x30,0x60,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* A0 */
0x00,0x0C,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* A1 */
0x00,0x18,0x30,0x60,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* A2 */
0x00,0x18,0x30,0x60,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* A3 */
0x00,0x00,0x76,0xDC,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* A4 */
0x76,0xDC,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* A5 */
0x00,0x3C,0x6C,0x6C,0x3E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* A6 */
0x00,0x38,0x6C,0x6C,0x38,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* A7 */
0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x60,0xC0,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* A8 */
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, /* A9 */
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00, /* AA */
0x00,0xC0,0xC0,0xC2,0xC6,0xCC,0x18,0x30,0x60,0xCE,0x9B,0x06,0x0C,0x1F,0x00,0x00, /* AB */
0x00,0xC0,0xC0,0xC2,0xC6,0xCC,0x18,0x30,0x66,0xCE,0x96,0x3E,0x06,0x06,0x00,0x00, /* AC */
0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x3C,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00, /* AD */
0x00,0x00,0x00,0x00,0x00,0x36,0x6C,0xD8,0x6C,0x36,0x00,0x00,0x00,0x00,0x00,0x00, /* AE */
0x00,0x00,0x00,0x00,0x00,0xD8,0x6C,0x36,0x6C,0xD8,0x00,0x00,0x00,0x00,0x00,0x00, /* AF */
0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44, /* B0 */
0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA, /* B1 */
0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77, /* B2 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B3 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B4 */
0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B5 */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B6 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B7 */
0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B8 */
0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B9 */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* BA */
0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* BB */
0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BC */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BD */
0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BE */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* BF */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C0 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C1 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C2 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C3 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C4 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C5 */
0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C6 */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* C7 */
0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C8 */
0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* C9 */
0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CA */
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CB */
0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CC */
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CD */
0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CE */
0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CF */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D0 */
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D1 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D2 */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D3 */
0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D4 */
0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D5 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D6 */
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D7 */
0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D8 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D9 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* DA */
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* DB */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* DC */
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, /* DD */
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, /* DE */
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* DF */
0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0xD8,0xD8,0xD8,0xDC,0x76,0x00,0x00,0x00,0x00, /* E0 */
0x00,0x00,0x78,0xCC,0xCC,0xCC,0xD8,0xCC,0xC6,0xC6,0xC6,0xCC,0x00,0x00,0x00,0x00, /* E1 */
0x00,0x00,0xFE,0xC6,0xC6,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00, /* E2 */
0x00,0x00,0x00,0x00,0xFE,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00, /* E3 */
0x00,0x00,0x00,0xFE,0xC6,0x60,0x30,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00, /* E4 */
0x00,0x00,0x00,0x00,0x00,0x7E,0xD8,0xD8,0xD8,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, /* E5 */
0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0xC0,0x00,0x00,0x00, /* E6 */
0x00,0x00,0x00,0x00,0x76,0xDC,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* E7 */
0x00,0x00,0x00,0x7E,0x18,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, /* E8 */
0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00, /* E9 */
0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x6C,0x6C,0x6C,0xEE,0x00,0x00,0x00,0x00, /* EA */
0x00,0x00,0x1E,0x30,0x18,0x0C,0x3E,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, /* EB */
0x00,0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, /* EC */
0x00,0x00,0x00,0x03,0x06,0x7E,0xDB,0xDB,0xF3,0x7E,0x60,0xC0,0x00,0x00,0x00,0x00, /* ED */
0x00,0x00,0x1C,0x30,0x60,0x60,0x7C,0x60,0x60,0x60,0x30,0x1C,0x00,0x00,0x00,0x00, /* EE */
0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* EF */
0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00, /* F0 */
0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, /* F1 */
0x00,0x00,0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,0x7E,0x00,0x00,0x00,0x00, /* F2 */
0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,0x7E,0x00,0x00,0x00,0x00, /* F3 */
0x00,0x00,0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* F4 */
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, /* F5 */
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x7E,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* F6 */
0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00, /* F7 */
0x00,0x38,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* F8 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* F9 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FA */
0x00,0x0F,0x0C,0x0C,0x0C,0x0C,0x0C,0xEC,0x6C,0x6C,0x3C,0x1C,0x00,0x00,0x00,0x00, /* FB */
0x00,0xD8,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FC */
0x00,0x70,0xD8,0x30,0x60,0xC8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FD */
0x00,0x00,0x00,0x00,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00, /* FE */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* FF */
};
return (font_eng[(int)c*OSD_FONT_HEIGHT + y] >> (7-x))&1;
} //pixel()
static int contour(char c, int x, int y) {
static const u16 font_eng_contour[256*(OSD_FONT_HEIGHT+2)] =
{
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 00 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 01 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 02 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 03 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 04 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 05 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 06 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 07 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 08 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 09 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0A */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0B */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0C */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0D */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0E */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 10 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 11 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 12 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 13 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 14 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 15 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 16 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 17 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 18 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 19 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1A */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1B */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1C */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1D */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1E */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 20 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 21 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 22 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 23 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 24 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 25 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 26 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 27 */
0x000,0x000,0x03C,0x064,0x0CC,0x198,0x198,0x198,0x198,0x198,0x198,0x0CC,0x064,0x03C,0x000,0x000,0x000,0x000, /* 28 */
0x000,0x000,0x0F0,0x098,0x0CC,0x066,0x066,0x066,0x066,0x066,0x066,0x0CC,0x098,0x0F0,0x000,0x000,0x000,0x000, /* 29 */
0x000,0x000,0x000,0x000,0x000,0x0CC,0x132,0x186,0x201,0x186,0x132,0x0CC,0x000,0x000,0x000,0x000,0x000,0x000, /* 2A */
0x000,0x000,0x000,0x000,0x000,0x030,0x048,0x0CC,0x102,0x0CC,0x048,0x030,0x000,0x000,0x000,0x000,0x000,0x000, /* 2B */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x0C8,0x098,0x0F0,0x000,0x000,0x000, /* 2C */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x3FE,0x202,0x3FE,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 2D */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x030,0x048,0x048,0x030,0x000,0x000,0x000,0x000, /* 2E */
0x000,0x000,0x000,0x000,0x00E,0x01A,0x032,0x066,0x0CC,0x198,0x330,0x260,0x2C0,0x380,0x000,0x000,0x000,0x000, /* 2F */
0x000,0x000,0x0FC,0x186,0x333,0x249,0x279,0x201,0x201,0x279,0x249,0x333,0x186,0x0FC,0x000,0x000,0x000,0x000, /* 30 */
0x000,0x000,0x078,0x0C8,0x188,0x308,0x3C8,0x048,0x048,0x048,0x048,0x1CE,0x102,0x1FE,0x000,0x000,0x000,0x000, /* 31 */
0x000,0x000,0x1FC,0x304,0x272,0x3D2,0x024,0x048,0x090,0x120,0x25E,0x272,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 32 */
0x000,0x000,0x1FC,0x306,0x272,0x3D2,0x0F2,0x086,0x0F2,0x012,0x3D2,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 33 */
0x000,0x000,0x03C,0x064,0x0C4,0x184,0x324,0x266,0x202,0x3E6,0x024,0x066,0x042,0x07E,0x000,0x000,0x000,0x000, /* 34 */
0x000,0x000,0x3FE,0x202,0x27E,0x240,0x27C,0x206,0x3F2,0x012,0x3D2,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 35 */
0x000,0x000,0x0F8,0x188,0x338,0x260,0x27C,0x206,0x272,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 36 */
0x000,0x000,0x3FE,0x202,0x272,0x3F2,0x032,0x064,0x0C8,0x090,0x090,0x090,0x090,0x0F0,0x000,0x000,0x000,0x000, /* 37 */
0x000,0x000,0x1FC,0x306,0x272,0x252,0x272,0x306,0x272,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 38 */
0x000,0x000,0x1FC,0x306,0x272,0x252,0x272,0x302,0x1F2,0x012,0x012,0x1E6,0x10C,0x1F8,0x000,0x000,0x000,0x000, /* 39 */
0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000,0x000, /* 3A */
0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x078,0x048,0x0C8,0x098,0x0F0,0x000,0x000,0x000,0x000, /* 3B */
0x000,0x000,0x000,0x01E,0x012,0x024,0x048,0x090,0x120,0x090,0x048,0x024,0x012,0x01E,0x000,0x000,0x000,0x000, /* 3C */
0x000,0x000,0x000,0x000,0x000,0x1FE,0x102,0x1FE,0x1FE,0x102,0x1FE,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 3D */
0x000,0x000,0x000,0x1E0,0x120,0x090,0x048,0x024,0x012,0x024,0x048,0x090,0x120,0x1E0,0x000,0x000,0x000,0x000, /* 3E */
0x000,0x000,0x1FC,0x306,0x272,0x272,0x3E6,0x04C,0x048,0x048,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000, /* 3F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 40 */
0x000,0x000,0x070,0x0D8,0x18C,0x326,0x252,0x272,0x202,0x272,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 41 */
0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x132,0x132,0x132,0x332,0x206,0x3FC,0x000,0x000,0x000,0x000, /* 42 */
0x000,0x000,0x0FC,0x186,0x332,0x27A,0x24E,0x240,0x240,0x24E,0x27A,0x332,0x186,0x0FC,0x000,0x000,0x000,0x000, /* 43 */
0x000,0x000,0x3F8,0x20C,0x326,0x132,0x132,0x132,0x132,0x132,0x132,0x326,0x20C,0x3F8,0x000,0x000,0x000,0x000, /* 44 */
0x000,0x000,0x3FE,0x202,0x332,0x13A,0x12E,0x108,0x128,0x13E,0x13A,0x332,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 45 */
0x000,0x000,0x3FE,0x202,0x332,0x13A,0x12E,0x108,0x128,0x138,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 46 */
0x000,0x000,0x0FC,0x184,0x332,0x27A,0x24E,0x27E,0x242,0x272,0x252,0x332,0x18A,0x0FE,0x000,0x000,0x000,0x000, /* 47 */
0x000,0x000,0x3DE,0x252,0x252,0x252,0x272,0x202,0x272,0x252,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 48 */
0x000,0x000,0x0FC,0x084,0x0CC,0x048,0x048,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 49 */
0x000,0x000,0x07E,0x042,0x066,0x024,0x024,0x024,0x3E4,0x264,0x264,0x264,0x30C,0x1F8,0x000,0x000,0x000,0x000, /* 4A */
0x000,0x000,0x3FE,0x232,0x332,0x132,0x126,0x10C,0x10C,0x126,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 4B */
0x000,0x000,0x3F0,0x210,0x330,0x120,0x120,0x120,0x120,0x12E,0x13A,0x332,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 4C */
0x000,0x000,0x3CF,0x279,0x231,0x201,0x201,0x249,0x279,0x249,0x249,0x249,0x249,0x3CF,0x000,0x000,0x000,0x000, /* 4D */
0x000,0x000,0x3DE,0x252,0x232,0x212,0x202,0x242,0x262,0x272,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 4E */
0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 4F */
0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x13C,0x120,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 50 */
0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x252,0x272,0x252,0x242,0x306,0x1E6,0x022,0x03E,0x000,0x000, /* 51 */
0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x126,0x132,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 52 */
0x000,0x000,0x1FC,0x306,0x272,0x272,0x33E,0x18C,0x0E6,0x3F2,0x272,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 53 */
0x000,0x000,0x3FF,0x201,0x201,0x2CD,0x3CF,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 54 */
0x000,0x000,0x3DE,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 55 */
0x000,0x000,0x3CF,0x249,0x249,0x249,0x249,0x249,0x249,0x279,0x333,0x186,0x0CC,0x078,0x000,0x000,0x000,0x000, /* 56 */
0x000,0x000,0x3CF,0x249,0x249,0x249,0x249,0x279,0x249,0x249,0x201,0x333,0x132,0x1FE,0x000,0x000,0x000,0x000, /* 57 */
0x000,0x000,0x3CF,0x249,0x279,0x333,0x086,0x0CC,0x0CC,0x186,0x333,0x279,0x249,0x3CF,0x000,0x000,0x000,0x000, /* 58 */
0x000,0x000,0x3CF,0x249,0x249,0x279,0x333,0x186,0x0CC,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 59 */
0x000,0x000,0x3FF,0x201,0x279,0x2F3,0x3E6,0x0CC,0x198,0x337,0x26D,0x279,0x201,0x3FF,0x000,0x000,0x000,0x000, /* 5A */
0x000,0x000,0x0FC,0x084,0x09C,0x090,0x090,0x090,0x090,0x090,0x090,0x09C,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 5B */
0x000,0x000,0x000,0x380,0x2C0,0x260,0x230,0x318,0x18C,0x0C6,0x062,0x032,0x01A,0x00E,0x000,0x000,0x000,0x000, /* 5C */
0x000,0x000,0x0FC,0x084,0x0E4,0x024,0x024,0x024,0x024,0x024,0x024,0x0E4,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 5D */
0x070,0x0D8,0x18C,0x326,0x272,0x3DE,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 5E */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x3FF,0x201,0x3FF,0x000,0x000, /* 5F */
0x0F0,0x090,0x098,0x0C8,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 60 */
0x000,0x000,0x000,0x000,0x000,0x1F8,0x10C,0x1E4,0x304,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 61 */
0x000,0x000,0x3E0,0x220,0x320,0x138,0x10C,0x126,0x132,0x132,0x132,0x132,0x106,0x1FC,0x000,0x000,0x000,0x000, /* 62 */
0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x25E,0x240,0x25E,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 63 */
0x000,0x000,0x07C,0x044,0x064,0x0E4,0x184,0x324,0x264,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 64 */
0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x202,0x27E,0x25E,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 65 */
0x000,0x000,0x0F8,0x18C,0x124,0x134,0x33C,0x210,0x330,0x120,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 66 */
0x000,0x000,0x000,0x000,0x000,0x1FE,0x312,0x266,0x264,0x264,0x264,0x264,0x304,0x3E4,0x264,0x30C,0x1F8,0x000, /* 67 */
0x000,0x000,0x3E0,0x220,0x320,0x13C,0x126,0x112,0x132,0x132,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 68 */
0x000,0x000,0x078,0x048,0x048,0x0F8,0x088,0x0C8,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 69 */
0x000,0x000,0x01E,0x012,0x012,0x03E,0x022,0x032,0x012,0x012,0x012,0x012,0x1F2,0x132,0x132,0x186,0x0FC,0x000, /* 6A */
0x000,0x000,0x3E0,0x220,0x320,0x13E,0x132,0x126,0x10C,0x10C,0x126,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 6B */
0x000,0x000,0x0F8,0x088,0x0C8,0x048,0x048,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 6C */
0x000,0x000,0x000,0x000,0x000,0x3FE,0x233,0x201,0x249,0x249,0x249,0x249,0x249,0x3FF,0x000,0x000,0x000,0x000, /* 6D */
0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x332,0x132,0x132,0x132,0x132,0x132,0x1FE,0x000,0x000,0x000,0x000, /* 6E */
0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 6F */
0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x332,0x132,0x132,0x132,0x132,0x106,0x13C,0x330,0x210,0x3F0,0x000, /* 70 */
0x000,0x000,0x000,0x000,0x000,0x1FE,0x312,0x266,0x264,0x264,0x264,0x264,0x304,0x1E4,0x066,0x042,0x07E,0x000, /* 71 */
0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x312,0x132,0x13E,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 72 */
0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x33E,0x088,0x3E6,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 73 */
0x000,0x000,0x070,0x0D0,0x090,0x39C,0x204,0x39C,0x090,0x090,0x09E,0x092,0x0C6,0x07C,0x000,0x000,0x000,0x000, /* 74 */
0x000,0x000,0x000,0x000,0x000,0x3FC,0x264,0x264,0x264,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 75 */
0x000,0x000,0x000,0x000,0x000,0x3CF,0x249,0x249,0x249,0x279,0x333,0x186,0x0CC,0x078,0x000,0x000,0x000,0x000, /* 76 */
0x000,0x000,0x000,0x000,0x000,0x3CF,0x249,0x249,0x279,0x249,0x249,0x201,0x333,0x1FE,0x000,0x000,0x000,0x000, /* 77 */
0x000,0x000,0x000,0x000,0x000,0x3CF,0x279,0x333,0x084,0x0CC,0x084,0x333,0x279,0x3CF,0x000,0x000,0x000,0x000, /* 78 */
0x000,0x000,0x000,0x000,0x000,0x3DE,0x252,0x252,0x252,0x252,0x252,0x272,0x302,0x1F2,0x3E6,0x20C,0x3F8,0x000, /* 79 */
0x000,0x000,0x000,0x000,0x000,0x3FE,0x202,0x264,0x3C8,0x090,0x13E,0x272,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 7A */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 7B */
0x000,0x000,0x078,0x048,0x048,0x048,0x048,0x078,0x048,0x048,0x048,0x048,0x048,0x078,0x000,0x000,0x000,0x000, /* 7C */
0x000,0x000,0x0E0,0x110,0x0C8,0x048,0x04C,0x022,0x04C,0x048,0x048,0x0C8,0x110,0x0E0,0x000,0x000,0x000,0x000, /* 7D */
0x000,0x000,0x1EE,0x312,0x246,0x3BC,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 7E */
0x000,0x000,0x000,0x000,0x020,0x050,0x088,0x124,0x252,0x252,0x272,0x202,0x1FC,0x000,0x000,0x000,0x000,0x000, /* 7F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 80 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 81 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 82 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 83 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 84 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 85 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 86 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 87 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 88 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 89 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8A */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8B */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8C */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8D */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8E */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 90 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 91 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 92 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 93 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 94 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 95 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 96 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 97 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 98 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 99 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9A */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9B */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9C */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9D */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9E */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9F */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AB */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AD */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AF */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BB */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BD */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BF */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CB */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CD */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CF */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DB */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DD */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DF */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EB */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* ED */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EF */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F0 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F1 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F2 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F3 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F4 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F5 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F6 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F7 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F8 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F9 */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FA */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FB */
0x000,0x3F8,0x20C,0x304,0x104,0x104,0x104,0x104,0x1FC,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FC */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FD */
0x000,0x000,0x000,0x000,0x1FC,0x104,0x104,0x104,0x104,0x104,0x104,0x104,0x1FC,0x000,0x000,0x000,0x000,0x000, /* FE */
0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000 /* FF */
};
return (font_eng_contour[(int)c*(OSD_FONT_HEIGHT+2) + y] >> (9-x))&1;
} //contour()
}; //class
} //namespace
#endif

View File

@ -1,940 +0,0 @@
#include "softrender.h"
#define xx 1
#define zz 0
namespace softrender {
class v3sysfont {
public:
static int height() { return 7; }
static int width(char c) { return charByte(c,0); }
static int pixel(char c, int x, int y) { return charByte(c,width(c)*y+x+1); }
static bool valid(char c) { return c>=32; }
static bool haveContour() { return false; }
static char charByte(byte c, int i) {
if (c < 32 || c > 128)
c = 2;
else
c -= 32;
static const char sbA[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char ssA[]=
{5,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
zz,xx,xx,zz,zz,
xx,zz,zz,xx,zz,
xx,zz,zz,xx,zz,
xx,zz,zz,xx,zz,
zz,xx,xx,zz,xx};
static const char sbB[]=
{4,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz};
static const char ssB[]=
{4,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz};
static const char sbC[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char ssC[]=
{3,
zz,zz,zz,
zz,zz,zz,
zz,xx,xx,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
zz,xx,xx};
static const char sbD[]=
{4,
xx,xx,zz,zz,
xx,zz,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,xx,zz,
xx,xx,zz,zz};
static const char ssD[]=
{4,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,xx,xx,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,xx};
static const char sbE[]=
{4,
xx,xx,xx,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,xx};
static const char ssE[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,xx,xx,zz,
xx,zz,zz,zz,
zz,xx,xx,zz};
static const char sbF[]=
{4,
xx,xx,xx,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,zz,zz};
static const char ssF[]=
{4,
zz,zz,xx,zz,
zz,xx,zz,xx,
zz,xx,zz,zz,
xx,xx,xx,zz,
zz,xx,zz,zz,
zz,xx,zz,zz,
zz,xx,zz,zz};
static const char sbG[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,xx,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char ssG[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
zz,xx,xx,zz,
xx,zz,zz,zz,
xx,zz,xx,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char sbH[]=
{4,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char ssH[]=
{4,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char sbI[]=
{3,
xx,xx,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
xx,xx,xx};
static const char ssI[]=
{1,
zz,
xx,
zz,
xx,
xx,
xx,
xx};
static const char sbJ[]=
{4,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char ssJ[]=
{3,
zz,zz,xx,
zz,zz,zz,
zz,zz,xx,
zz,zz,xx,
zz,zz,xx,
xx,zz,xx,
zz,xx,zz};
static const char sbK[]=
{4,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,xx,zz,
xx,xx,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char ssK[]=
{3,
xx,zz,zz,
xx,zz,zz,
xx,zz,xx,
xx,zz,xx,
xx,xx,zz,
xx,zz,xx,
xx,zz,xx};
static const char sbL[]=
{3,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,xx,xx};
static const char ssL[]=
{3,
zz,zz,zz,
zz,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,zz,zz,
xx,xx,xx};
static const char sbM[]=
{5,
xx,zz,zz,zz,xx,
xx,xx,zz,xx,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx};
static const char ssM[]=
{5,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
zz,xx,zz,xx,zz,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx};
static const char sbN[]=
{4,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,zz,xx,
xx,zz,xx,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char ssN[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
xx,zz,xx,zz,
xx,xx,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char sbO[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char ssO[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char sbP[]=
{4,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,zz,zz};
static const char ssP[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz,
xx,zz,zz,zz};
static const char sbQ[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,xx,zz,
zz,xx,zz,xx};
static const char ssQ[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,xx,zz,
zz,xx,zz,xx};
static const char sbR[]=
{4,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
xx,zz,zz,xx};
static const char ssR[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,zz,zz,zz};
static const char sbS[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,zz,
zz,xx,xx,zz,
zz,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz,};
static const char ssS[]=
{3,
zz,zz,zz,
zz,zz,zz,
zz,xx,xx,
xx,zz,zz,
zz,xx,zz,
zz,zz,xx,
xx,xx,zz};
static const char sbT[]=
{3,
xx,xx,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz};
static const char ssT[]=
{3,
zz,xx,zz,
zz,xx,zz,
xx,xx,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,xx};
static const char sbU[]=
{3,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,xx,xx};
static const char ssU[]=
{3,
zz,zz,zz,
zz,zz,zz,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,xx,xx};
static const char sbV[]=
{3,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
zz,xx,zz};
static const char ssV[]=
{3,
zz,zz,zz,
zz,zz,zz,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
zz,xx,zz};
static const char sbW[]=
{5,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx,
xx,xx,zz,xx,xx,
xx,zz,zz,zz,xx};
static const char ssW[]=
{5,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
xx,zz,zz,zz,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,zz,xx,
xx,xx,zz,xx,xx,
xx,zz,zz,zz,xx};
static const char sbX[]=
{5,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx,
zz,xx,zz,xx,zz,
zz,zz,xx,zz,zz,
zz,xx,zz,xx,zz,
xx,zz,zz,zz,xx,
xx,zz,zz,zz,xx};
static const char ssX[]=
{3,
zz,zz,zz,
zz,zz,zz,
xx,zz,xx,
xx,zz,xx,
zz,xx,zz,
xx,zz,xx,
xx,zz,xx};
static const char sbY[]=
{3,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz};
static const char ssY[]=
{3,
zz,zz,zz,
zz,zz,zz,
xx,zz,xx,
xx,zz,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz};
static const char sbZ[]=
{5,
xx,xx,xx,xx,xx,
zz,zz,zz,zz,xx,
zz,zz,zz,xx,zz,
zz,zz,xx,zz,zz,
zz,xx,zz,zz,zz,
xx,zz,zz,zz,zz,
xx,xx,xx,xx,xx};
static const char ssZ[]=
{4,
zz,zz,zz,zz,
zz,zz,zz,zz,
xx,xx,xx,xx,
zz,zz,zz,xx,
zz,zz,xx,zz,
zz,xx,zz,zz,
xx,xx,xx,xx};
static const char s1[]=
{3,
zz,xx,zz,
xx,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
xx,xx,xx};
static const char s2[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,zz,xx,zz,
zz,xx,zz,zz,
xx,xx,xx,xx};
static const char s3[]=
{4,
xx,xx,xx,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
zz,xx,xx,xx,
zz,zz,zz,xx,
zz,zz,zz,xx,
xx,xx,xx,xx};
static const char s4[]=
{4,
xx,zz,xx,zz,
xx,zz,xx,zz,
xx,zz,xx,zz,
xx,xx,xx,xx,
zz,zz,xx,zz,
zz,zz,xx,zz,
zz,zz,xx,zz};
static const char s5[]=
{4,
xx,xx,xx,xx,
xx,zz,zz,zz,
xx,zz,zz,zz,
xx,xx,xx,zz,
zz,zz,zz,xx,
zz,zz,zz,xx,
xx,xx,xx,zz};
static const char s6[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,zz,
xx,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char s7[]=
{3,
xx,xx,xx,
zz,zz,xx,
zz,zz,xx,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz,
zz,xx,zz};
static const char s8[]=
{4,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz,
xx,zz,zz,xx,
xx,zz,zz,xx,
zz,xx,xx,zz};
static const char s9[]=
{3,
xx,xx,xx,
xx,zz,xx,
xx,zz,xx,
xx,xx,xx,
zz,zz,xx,
zz,zz,xx,
xx,xx,xx};
static const char s0[]=
{3,
xx,xx,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,zz,xx,
xx,xx,xx};
static const char sQuote[]={3,
xx,zz,xx,
xx,zz,xx,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz};
static const char sYow[]={3,
zz,xx,zz,
xx,xx,xx,
xx,xx,xx,
xx,xx,xx,
zz,xx,zz,
zz,zz,zz,
zz,xx,zz};
static const char sQuotes[]={1,
xx,
xx,
zz,
zz,
zz,
zz,
zz};
static const char sComma[]={2,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
zz,xx,
xx,zz};
static const char sPeriod[]={1,
zz,
zz,
zz,
zz,
zz,
zz,
xx};
static const char sMinus[]={2,
zz,zz,
zz,zz,
zz,zz,
xx,xx,
zz,zz,
zz,zz,
zz,zz};
static const char sQuest[]={3,
xx,xx,xx,
zz,zz,xx,
zz,zz,xx,
zz,zz,xx,
zz,xx,xx,
zz,zz,zz,
zz,xx,zz};
static const char sColon[]={1,
zz,
zz,
xx,
zz,
xx,
zz,
zz};
static const char sch[]={3,
zz,xx,zz,
xx,xx,xx,
xx,xx,xx,
xx,xx,xx,
zz,xx,zz};
static const char usc[]={2,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
xx,xx};
static const char star[]={5,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
xx,xx,xx,xx,xx,
xx,xx,xx,xx,xx,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz};
static const char ss[]={2,
xx,xx,
xx,xx,
xx,xx,
xx,xx,
xx,xx,
xx,xx,
xx,xx};
static const char sra[]={3,
zz,zz,zz,
xx,zz,zz,
xx,xx,zz,
xx,xx,xx,
xx,xx,zz,
xx,zz,zz,
zz,zz,zz};
static const char slParen[]={2,
zz,xx,
xx,zz,
xx,zz,
xx,zz,
xx,zz,
xx,zz,
zz,xx};
static const char srParen[]={2,
xx,zz,
zz,xx,
zz,xx,
zz,xx,
zz,xx,
zz,xx,
xx,zz};
static const char ssemic[]={2,
zz,xx,
zz,zz,
zz,xx,
zz,xx,
zz,xx,
zz,xx,
xx,zz};
static const char sSlash[]={3,
zz,zz,zz,
zz,zz,xx,
zz,zz,xx,
zz,xx,zz,
zz,xx,zz,
xx,zz,zz,
xx,zz,zz};
static const char sbSlash[]={3,
zz,zz,zz,
xx,zz,zz,
xx,zz,zz,
zz,xx,zz,
zz,xx,zz,
zz,zz,xx,
zz,zz,xx};
static const char sBlock[]={3,
zz,zz,zz,
zz,zz,zz,
xx,xx,xx,
xx,xx,xx,
xx,xx,xx,
zz,zz,zz,
zz,zz,zz};
static const char sBlank[]={2,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
zz,zz,
zz,zz};
static const char sAT[]=
{ 5,
zz,xx,xx,xx,zz,
xx,zz,zz,zz,xx,
xx,zz,xx,xx,xx,
xx,zz,xx,zz,xx,
xx,zz,xx,xx,xx,
xx,zz,zz,zz,zz,
zz,xx,xx,xx,zz};
static const char sNum[]=
{ 5,
zz,zz,zz,zz,zz,
zz,xx,zz,xx,zz,
xx,xx,xx,xx,xx,
zz,xx,zz,xx,zz,
xx,xx,xx,xx,xx,
zz,xx,zz,xx,zz,
zz,zz,zz,zz,zz};
static const char sBuck[]=
{5,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz,
zz,zz,xx,zz,zz,
zz,xx,xx,xx,zz,
xx,xx,xx,xx,xx,
zz,zz,zz,zz,zz,
zz,zz,zz,zz,zz};
static const char sPercnt[]=
{
5,
zz,zz,zz,zz,zz,
xx,zz,zz,zz,xx,
zz,zz,zz,xx,zz,
zz,zz,xx,zz,zz,
zz,xx,zz,zz,zz,
xx,zz,zz,zz,xx,
zz,zz,zz,zz,zz};
static const char sCarot[]=
{ 3,
zz,xx,zz,
xx,zz,xx,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz,
zz,zz,zz};
static const char sCopy[]=
{ 7,
zz,xx,xx,xx,xx,xx,zz,
xx,zz,zz,zz,zz,zz,xx,
xx,zz,zz,xx,xx,zz,xx,
xx,zz,xx,zz,zz,zz,xx,
xx,zz,zz,xx,xx,zz,xx,
xx,zz,zz,zz,zz,zz,xx,
zz,xx,xx,xx,xx,xx,zz};
static const char sPtr[]=
{ 5,
xx,zz,zz,zz,zz,
xx,xx,zz,zz,zz,
xx,xx,xx,zz,zz,
xx,xx,xx,xx,zz,
xx,xx,xx,xx,xx,
zz,zz,xx,zz,zz,
zz,zz,zz,xx,zz};
static const char check[]=
{ 7,
xx,zz,zz,zz,zz,zz,xx,
zz,xx,zz,zz,zz,xx,zz,
zz,zz,xx,zz,xx,zz,zz,
zz,zz,zz,xx,zz,zz,zz,
zz,zz,xx,zz,xx,zz,zz,
zz,xx,zz,zz,zz,xx,zz,
xx,zz,zz,zz,zz,zz,xx };
static const char target[]=
{ 7,
zz,zz,zz,xx,zz,zz,zz,
zz,zz,xx,zz,xx,zz,zz,
zz,xx,zz,zz,zz,xx,zz,
xx,zz,zz,xx,zz,zz,xx,
zz,xx,zz,zz,zz,xx,zz,
zz,zz,xx,zz,xx,zz,zz,
zz,zz,zz,xx,zz,zz,zz };
static const char *smal_tbl[]=
{ sBlank,
sYow, sQuote, sNum, sBuck,sPercnt, sCarot, sQuotes, slParen,
srParen, star, sPtr, sComma, sMinus,sPeriod, sSlash, s0,
s1, s2, s3, s4, s5, s6, s7, s8,
s9, sColon, ssemic, ss, ss, sra, sQuest, sAT,
sbA, sbB, sbC, sbD, sbE, sbF, sbG, sbH,
sbI, sbJ, sbK, sbL, sbM, sbN, sbO, sbP,
sbQ, sbR, sbS, sbT, sbU, sbV, sbW, sbX,
sbY, sbZ, ss, sbSlash, ss, sCarot, usc, sch,
ssA, ssB, ssC, ssD, ssE, ssF, ssG, ssH,
ssI, ssJ, ssK, ssL, ssM, ssN, ssO, ssP,
ssQ, ssR, ssS, ssT, ssU, ssV, ssW, ssX,
ssY, ssZ, ss, target, check, sCopy, sBlock, ss};
return smal_tbl[c][i];
}
};
}
#undef xx
#undef zz

View File

@ -21,6 +21,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
AMDCaProjectFile = C:\svn\desmume\trunk\desmume\src\windows\CodeAnalyst\DeSmuME_2005.caw
AMDCaProjectFile = D:\svn\desmume\trunk\desmume\src\windows\CodeAnalyst\DeSmuME_2005.caw
EndGlobalSection
EndGlobal

View File

@ -51,7 +51,7 @@
FavorSizeOrSpeed="0"
EnableFiberSafeOptimizations="false"
WholeProgramOptimization="false"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;SPU_INTERPOLATE;HAVE_LIBZ;HAVE_LIBZZIP;NOMINMAX;DEBUG;EXPERIMENTAL_WIFI"
ExceptionHandling="1"
BasicRuntimeChecks="0"
@ -145,7 +145,7 @@
OmitFramePointers="true"
EnableFiberSafeOptimizations="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SPU_INTERPOLATE;NOMINMAX;NDEBUG;RELEASE;EXPERIMENTAL_WIFI"
StringPooling="true"
ExceptionHandling="1"
@ -174,7 +174,7 @@
Name="VCLinkerTool"
AdditionalDependencies="agg-2.5.lib lua-5.1.4-x86.lib glib-2.20.1-x86.lib vfw32.lib winmm.lib opengl32.lib glu32.lib ws2_32.lib user32.lib gdi32.lib directx\dxguid.lib shell32.lib comdlg32.lib directx\dxerr8.lib directx\dsound.lib directx\dinput8.lib directx\ddraw.lib zlib-2005-x32.lib zziplib-2005-x32.lib shlwapi.lib winpcap\wpcap.lib 7zip.lib"
OutputFile="$(OutDir)\$(ProjectName)_release.exe"
AdditionalLibraryDirectories=".\zlib123;.\zziplib;glib-2.20.1\lib;.\lua\lib;.\7z"
AdditionalLibraryDirectories=".\zlib123;.\zziplib;glib-2.20.1\lib;.\lua\lib;.\7z;agg"
DelayLoadDLLs="wpcap.dll"
GenerateDebugInformation="true"
GenerateMapFile="true"
@ -243,7 +243,7 @@
OmitFramePointers="true"
EnableFiberSafeOptimizations="true"
WholeProgramOptimization="false"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SPU_INTERPOLATE;NOMINMAX;NDEBUG;RELEASE;EXPERIMENTAL_WIFI"
StringPooling="true"
ExceptionHandling="1"
@ -1082,18 +1082,6 @@
RelativePath="..\shaders.h"
>
</File>
<File
RelativePath="..\softrender.cpp"
>
</File>
<File
RelativePath="..\softrender.h"
>
</File>
<File
RelativePath="..\softrender_config.h"
>
</File>
<File
RelativePath="..\SPU.cpp"
>

View File

@ -52,7 +52,7 @@
FavorSizeOrSpeed="0"
EnableFiberSafeOptimizations="false"
WholeProgramOptimization="false"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX;EXPERIMENTAL_WIFI;HAVE_LIBZ;HAVE_LIBZZIP"
ExceptionHandling="1"
BasicRuntimeChecks="3"
@ -142,7 +142,7 @@
OmitFramePointers="true"
EnableFiberSafeOptimizations="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SSE2;SPU_INTERPOLATE;NOMINMAX;RELEASE;EXPERIMENTAL_WIFI;NDEBUG"
StringPooling="true"
ExceptionHandling="1"
@ -235,7 +235,7 @@
OmitFramePointers="true"
EnableFiberSafeOptimizations="true"
WholeProgramOptimization="false"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples"
AdditionalIncludeDirectories=".;..;&quot;lua\lua-5.1.4\src&quot;;&quot;glib-2.20.1\build&quot;;&quot;glib-2.20.1\build\glib&quot;;.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SSE2;SPU_INTERPOLATE;NOMINMAX;RELEASE;EXPERIMENTAL_WIFI;NDEBUG"
StringPooling="true"
ExceptionHandling="1"
@ -437,10 +437,6 @@
RelativePath="..\saves.cpp"
>
</File>
<File
RelativePath="..\softrender.cpp"
>
</File>
<File
RelativePath="..\SPU.cpp"
>

Binary file not shown.

View File

@ -17,7 +17,7 @@
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
OutputDirectory="."
IntermediateDirectory="Debug"
ConfigurationType="4"
>
@ -79,7 +79,7 @@
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\windows\agg"
OutputDirectory="."
IntermediateDirectory="Release"
ConfigurationType="4"
WholeProgramOptimization="0"

Some files were not shown because too many files have changed in this diff Show More