?? index.html
字號(hào):
<html><head><link rel="stylesheet" type="text/css" href="styles.css"><title>SDL_gfx Library</title></head><body><table width="600"><tr><td bgcolor="D0D0D0"><img src="blank.gif" alt="" width="40"></td><td><img src="blank.gif" alt="" width="10"></td><td><br><h1>SDL_gfx Library</h1><br><h3>SDL graphics drawing primitives and other support functions</h3><div style="margin-left:0.6cm;">The SDL_gfx library evolved out of the <i>SDL_gfxPrimitives</i> code whichprovided basic drawing routines such as lines, circles or polygons and <i>SDL_rotozoom</i> which implemented a interpolating rotozoomerfor SDL surfaces.<p>The current components of the SDL_gfx library are:<UL><LI> Graphic Primitives (SDL_gfxPrimitves.h)<LI> Rotozoomer (SDL_rotozoom.h)<LI> Framerate control (SDL_framerate.h)<LI> MMX image filters (SDL_imageFilter.h)</UL><p>The library is backwards compatible to the above mentioned code. Its iswritten in plain C and can be used in C++ code.<p>(c) <a href="mailto:aschiffler-nospam@appwares.com">A. Schiffler</a>, 1999-2003, licensed under the <a href="http://www.fsf.org/copyleft/lgpl.html" target="_blank">LGPL</a></div><h3>Screenshots</h3><div style="margin-left:0.6cm;"><table><tr><td><a href="Screenshots/SDL_gfxPrimitives.jpg" alt="SDL_gfxPrimitives TestScreenshot" target="_blank"><imgsrc="Screenshots/SDL_gfxPrimitives-thumb.jpg" border="0"></a></td><td><a href="Screenshots/SDL_rotozoom.jpg" alt="SDL_rotozoom TestScreenshot" target="_blank"><imgsrc="Screenshots/SDL_rotozoom-thumb.jpg" border="0"></a></td></tr><tr><td><font size="1">SDL_gfxPrimitives</font></td><td><fontsize="1">SDL_rotozoom</font></td></tr></table><p></div><h3>Downloads</h3><div style="margin-left:0.6cm;"><a href="SDL_gfx-2.0.12.tar.gz">SDL_gfx-2.0.12.tar.gz</a><p><a href="SDL_gfx-2.0.12-1.src.rpm">SDL_gfx-2.0.12-1.src.rpm</a><p><a href="SDL_gfx-2.0.12-1.i586.rpm">SDL_gfx-2.0.12-1.i586.rpm</a><p><a href="SDL_gfx-devel-2.0.12-1.i586.rpm">SDL_gfx-devel-2.0.12-1.i586.rpm</a><p><a href="SDL_gfx-demos-2.0.12-1.i586.rpm">SDL_gfx-demos-2.0.12-1.i586.rpm</a><p><p></div><h3>Supported Platforms</h3><div style="margin-left:0.6cm;">The library compiles and is tested for a Linux target (gcc compiler) and a Win32 target (VisualC, xmingw32 cross-compiler) as well as BeOS and MacOSX PowerBuilderSee README for VC and PowerBuilder compile information.When using the cross-compiler (available on the author's homepage), the build process generates .DLLs. You can use the command line 'LIB.EXE' tool to generate VC6 compatible .LIB files for linking purposes. </div><h3>Notes on Graphics Primitives</h3><div style="margin-left:0.6cm;">Care has been taken so that all routines are fully alpha-aware and can blend any primitive onto the target surface if ALPHA<255. Surface depths supported are 1,2,3 and 4 bytes per pixel. Surface locking is implementedin each routine and the library should work well with hardware accelerated surfaces. Currently, The following Anti-Aliased drawing primitives are available:<UL><LI> AA-line<LI> AA-circle<LI> AA-ellipse<LI> AA-polygon (not filled)</UL><br><h4>[[[ Interface ]]]</h4><pre>Note: all ___Color routines expect the color to be in format 0xRRGGBBAA Pixel int pixelColor(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color); int pixelRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Horizontal line int hlineColor(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint32 color); int hlineRGBA(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Vertical line int vlineColor(SDL_Surface * dst, Sint16 x, Sint16 y1, Sint16 y2, Uint32 color); int vlineRGBA(SDL_Surface * dst, Sint16 x, Sint16 y1, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Rectangle int rectangleColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color); int rectangleRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled rectangle (Box) int boxColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color); int boxRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Line int lineColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color); int lineRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); AA Line int aalineColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color); int aalineRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Circle int circleColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 r, Uint32 color); int circleRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); AA Circle int aacircleColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 r, Uint32 color); int aacircleRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled Circle int filledCircleColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 r, Uint32 color); int filledCircleRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Ellipse int ellipseColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color); int ellipseRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); AA Ellipse int aaellipseColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color); int aaellipseRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled Ellipse int filledEllipseColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color); int filledEllipseRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Pie int pieColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Sint16 start, Sint16 end, Uint32 color); int pieRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Sint16 start, Sint16 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled Pie int filledPieColor(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Sint16 start, Sint16 end, Uint32 color); int filledPieRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Sint16 rad, Sint16 start, Sint16 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Trigon int trigonColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint32 color); int trigonRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint8 r, Uint8 g, Uint8 b, Uint8 a); AA-Trigon int aatrigonColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint32 color); int aatrigonRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled Trigon int filledTrigonColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, int color); int filledTrigonRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Polygon int polygonColor(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, Uint32 color); int polygonRGBA(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); AA-Polygon int aapolygonColor(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, Uint32 color); int aapolygonRGBA(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Filled Polygon int filledPolygonColor(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, int color); int filledPolygonRGBA(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); Bezier Curve int bezierColor(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, int s, Uint32 color); int bezierRGBA(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, int s, Uint8 r, Uint8 g, Uint8 b, Uint8 a); 8x8 Characters/Strings int characterColor(SDL_Surface * dst, Sint16 x, Sint16 y, char c, Uint32 color); int characterRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, char c, Uint8 r, Uint8 g, Uint8 b, Uint8 a); int stringColor(SDL_Surface * dst, Sint16 x, Sint16 y, char *c, Uint32 color); int stringRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, char *c, Uint8 r, Uint8 g, Uint8 b, Uint8 a); void gfxPrimitivesSetFont(unsigned char *fontdata, int cw, int ch); </pre></div><h3>Notes on Rotozoomer</h3><div style="margin-left:0.6cm;">The rotozoom without interpolation code should be fast enough even for some realtime effects if the CPU is fast or bitmaps small. With interpolation the routines are typically used for pre-rendering stuff in higher quality (i.e. smoothing) - that's also a reason why the API differs from SDL_BlitRect() and creates a new target surface each time rotozoom is called. The final rendering speed is dependent on the target surface sizeas it is beeing xy-scanned when rendering the new surface.<p>Note also that the smoothing toggle is dependent on the input surface bit depth. 8bit surfaces will never be smoothed - only 32bit surfaces will.<p>Note that surfaces of other bit depth then 8 and 32 will be converted on the fly to a 32bit surface using a blit into a temporary surface. This impacts performance somewhat.<p><h4>[[[ Interface ]]]</h4><pre>SDL_Surface * rotozoomSurface (SDL_Surface *src, double angle, double zoom, int smooth); Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'angle' is the rotation in degrees. 'zoom' a scaling factor. If 'smooth' is 1 then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly.SDL_Surface * zoomSurface (SDL_Surface *src, double zoomx, double zoomy, int smooth); Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is 1 then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly.Smoothing (interpolation) flags work only on 32bit surfaces: #define SMOOTHING_OFF 0 #define SMOOTHING_ON 1</pre><br></div><h3>Notes on framerate functions</h3><div style="margin-left:0.6cm;">The framerate functions are used to insert delays into the graphics loopto maintain a constant framerate.<p>The implementation is more sophisticated that the usual<br><pre> SDL_Delay(1000/FPS);</pre>call since these functions keep track of the desired game time per frame for a linearly interpolated sequence of future timing points of each frame. This is done to avoid rounding errors from the inherent instability in the delay generation and application - i.e. the 100th frame of a game running at 50Hz will be accurately2.00sec after the 1st frame (if the machine can keep up with thedrawing). See also the diagram for more details on this.<p><table><tr><td><a href="framerate.png" target="_blank"><img src="framerate-thumb.png" alt="FramerateCalc. DiagramThumbnail"></a></td></tr><tr><td><font size="1">Framerate Calc.Diagram</font></td></tr></table><p><h4>[[[ Interface ]]]</h4><pre>The functions return 0 or value for sucess and -1 for error. All functionsuse a pointer to a framerate-manager variable to operate.void SDL_initFramerate(FPSmanager * manager); Initialize the framerate manager, set default framerate of 30Hz and reset delay interpolation.int SDL_setFramerate(FPSmanager * manager, int rate); Set a new framerate for the manager and reset delay interpolation.int SDL_getFramerate(FPSmanager * manager); Get the currently set framerate of the manager.void SDL_framerateDelay(FPSmanager * manager); Generate a delay to accomodate currently set framerate. Call once in the graphics/rendering loop. If the computer cannot keep up with the rate (i.e. drawing too slow), the delay is zero and the delay interpolation is reset.</pre><br><h3>Notes on imageFilter functions</h3><div style="margin-left:0.6cm;">The imagefilter functions are a collection of MMX optimized routines thatoperate on continuous buffers of bytes - typically greyscale images from framegrabbers and such - performing functions such as image addition and binarization. All functions (almost .. not the the convolution routines) have a C implementation that is automatically used on systems without MMX capabilities.<p><h4>[[[ Interface ]]]</h4><pre>Comments: 1.) MMX functions work best if all data blocks are aligned on a 32 bytes boundary. 2.) Data that is not within an 8 byte boundary is processed using the C routine. 3.) Convolution routines do not have C routines at this time. 4.) All routines return 0 for OK and -1 for error.Detect MMX capability in CPU int SDL_imageFilterMMXdetect(void);Force use of MMX off (or turn possible use back on) void SDL_imageFilterMMXoff(void); void SDL_imageFilterMMXon(void);SDL_imageFilterAdd: D = saturation255(S1 + S2) int SDL_imageFilterAdd (unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, int length);SDL_imageFilterMean: D = S1/2 + S2/2 int SDL_imageFilterMean(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, int length);SDL_imageFilterSub: D = saturation0(S1 - S2) int SDL_imageFilterSub(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, int length);SDL_imageFilterAbsDiff: D = | S1 - S2 | int SDL_imageFilterAbsDiff(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, int length);SDL_imageFilterMult: D = saturation(S1 * S2)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -