作者 Intel
关键字 alpha blend 源代码
原作者姓名 Intel
文章原始出处 http://www.intel.com
介绍
我从 http://www.gameres.com/Visual/2D/IntelAlpha.htm 此处copy而来
正文
Intel官方网站有一个ablend_565的快速汇编算法,理论上是是把一块32bit RGBA渲染到16bit的buffer上,我的机器是PIII800,函数在system menory中进行,640*480的256级alpha blending,达到100fps,我想可以满足绝大部分的要求了,在这里,我提供了这个算法的应用,希望可以对大家有所帮助。
ablend_565函数,源代码可以直接编译使用,无需其他库函数,感谢intel提供这么好的东西。
首先,我提供一些本人编写的把32bit tga文件读入pRGBABuffer的函数
文件尺寸保存在 width,height
//-----------------------------------------------------------------------
// Name: LoadTgaFile( TCHAR* strPathname, DWORD** pRGBABuffer, long* width, long* height )
// Desc: 读取32bit tga文件到DWORD缓冲里,返回其尺寸
// Time: 2002.06.22 00:36
// Author: RealRender
// Para:
// Return:
// Note: 这段代码来自directx 7.0 sample中的d3dtextr.cpp,我把他提取了出来
// 方便使用
//-----------------------------------------------------------------------
BOOL LoadTgaFile( TCHAR* strPathname, DWORD** pRGBABuffer, long* width, long* height )
{
FILE* file = fopen( strPathname, "rb" );
if( NULL == file )
return false;
struct TargaHeader
{
BYTE IDLength;
BYTE ColormapType;
BYTE ImageType;
BYTE ColormapSpecification[5];
WORD XOrigin;
WORD YOrigin;
WORD ImageWidth;
WORD ImageHeight;
BYTE PixelDepth;
BYTE ImageDescriptor;
} tga;
fread( &tga, sizeof(TargaHeader), 1, file );
// Only true color, non-mapped images are supported
if( ( 0 != tga.ColormapType ) ||
( tga.ImageType != 10 && tga.ImageType != 2 ) )
{
fclose( file );
return false;
}
// Skip the ID field. The first byte of the header is the length of this field
if( tga.IDLength )
fseek( file, tga.IDLength, SEEK_CUR );
DWORD m_dwWidth = tga.ImageWidth;
DWORD m_dwHeight = tga.ImageHeight;
DWORD m_dwBPP = tga.PixelDepth;
DWORD *m_pRGBAData = new DWORD[m_dwWidth*m_dwHeight];
if( m_pRGBAData == NULL )
{
fclose(file);
return false;
}
for( DWORD y=0; y |
正在阅读:可能是最快的算法alpha blend汇编源代码可能是最快的算法alpha blend汇编源代码
2004-02-14 09:34
出处:PConline
责任编辑:zwg
键盘也能翻页,试试“← →”键