! -. .
, GL , GL_ADD.
iOS, Apple libs . . Texture2D kCGImageAlphaPremultipliedLast.
, , . :
uint8* LoadRGBAImage(const char* pImageFileName) {
Image* pImage = LoadImageData(pImageFileName);
if (pImage->eFormat != FORMAT_RGBA)
return NULL;
uint8* pDstData = (uint8*)malloc(pImage->rows * pImage->cols * 4);
uint8* pSrcData = pImage->pBitmapBytes;
uint32 bytesPerRow = pImage->cols * 4;
for (uint32 y = 0; y < pImage->rows; ++y) {
byte* pSrc = pSrcData + y * bytesPerRow;
byte* pDst = pDstData + y * bytesPerRow;
for (uint32 x = 0; x < pImage->cols; ++x) {
uint8 srcAlpha = pSrc[3];
*pDst++ = Modulate(*pSrc++, srcAlpha);
*pDst++ = Modulate(*pSrc++, srcAlpha);
*pDst++ = Modulate(*pSrc++, srcAlpha);
*pDst++ = *pSrc++;
}
}
return pDstData;
}
uint8 Modulate(uint8 u, uint8 uControl) {
return ((uint16)u * ((uint16)uControl + 1)) >> 8;
}
libpng .
, , , RGBA OpenGL. glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); , . ( ) , . , glBlendFunc (GL_SRC_ALPHA, GL_ONE); , .
Ozirus. "" RGB , , RGB / .
, premultiply Overlay, Ozirus - .
.
http://en.wikipedia.org/wiki/Alpha_compositing
" "