void IsoSurfaceDialog::init() { update(); connect(&m_viewer.trapMesh(), SIGNAL(colorAChanged(QColor)), ui->colorButtonA, SLOT(setButtonColor(QColor))); connect(ui->colorButtonA, SIGNAL(selectedColor(QColor)), &m_viewer.trapMesh(), SLOT(setColorA(QColor))); connect(&m_viewer.trapMesh(), SIGNAL(colorBChanged(QColor)), ui->colorButtonB, SLOT(setButtonColor(QColor))); connect(ui->colorButtonB, SIGNAL(selectedColor(QColor)), &m_viewer.trapMesh(), SLOT(setColorB(QColor))); connect(ui->checkBoxVisible, SIGNAL(toggled(bool)), &m_viewer.trapMesh(), SLOT(setVisible(bool))); connect(&m_viewer.trapMesh(), SIGNAL(visibleChanged(bool)), ui->checkBoxVisible, SLOT(setChecked(bool))); connect(&m_viewer, SIGNAL(canCalculateIsoSurface(bool)), this, SLOT(setCalculateEnabled(bool))); connect(&m_viewer, SIGNAL(isoSurfaceProgress(int)), ui->calculateProgress, SLOT(setValue(int))); connect(&m_viewer.trapMesh(), SIGNAL(modeChanged(Mesh::Mode)), this, SLOT(updateComboBoxMode(Mesh::Mode))); connect(&m_viewer.trapMesh(), SIGNAL(colorAChanged(QColor)), this, SLOT(extractAlpha(QColor))); connect(&m_viewer.trapMesh(), SIGNAL(colorBChanged(QColor)), this, SLOT(extractAlpha(QColor))); connect(this, SIGNAL(sendAlpha(int)), this, SLOT(updateSpinBoxAlpha(int))); }
/*! */ static void executeBlit_ColorAlpha_32_to_32( const SBlitJob * job ) { u32 *dst = (u32*) job->dst; const u32 alpha = extractAlpha( job->argb ); const u32 src = job->argb; for ( s32 dy = 0; dy != job->height; ++dy ) { for ( s32 dx = 0; dx != job->width; ++dx ) { dst[dx] = PixelBlend32( dst[dx], src, alpha ); } dst = (u32*) ( (u8*) (dst) + job->dstPitch ); } }
//! draws a line from to with color void CImage::drawLine(const vector2di& from, const vector2di& to, const SColor &color) { AbsRectangle clip; GetClip(clip, this); vector2di p[2]; if (ClipLine(clip, p[0], p[1], from, to)) { u32 alpha = extractAlpha(color.color); switch (Format) { case ECF_A1R5G5B5: if (alpha == 256) { RenderLine16_Decal(this, p[0], p[1], SharedColorConverter::getInstance().A8R8G8B8toA1R5G5B5( color.color)); } else { RenderLine16_Blend(this, p[0], p[1], SharedColorConverter::getInstance().A8R8G8B8toA1R5G5B5( color.color), alpha >> 3); } break; case ECF_A8R8G8B8: if (alpha == 256) { RenderLine32_Decal(this, p[0], p[1], color.color); } else { RenderLine32_Blend(this, p[0], p[1], color.color, alpha); } break; default: { break; } } } }
/*! */ static void executeBlit_TextureCopy_32_to_16( const SBlitJob * job ) { const u32 *src = static_cast<const u32*>(job->src); u16 *dst = static_cast<u16*>(job->dst); for ( s32 dy = 0; dy != job->height; ++dy ) { for ( s32 dx = 0; dx != job->width; ++dx ) { //16 bit Blitter depends on pre-multiplied color const u32 s = PixelLerp32( src[dx] | 0xFF000000, extractAlpha( src[dx] ) ); dst[dx] = video::A8R8G8B8toA1R5G5B5( s ); } src = (u32*) ( (u8*) (src) + job->srcPitch ); dst = (u16*) ( (u8*) (dst) + job->dstPitch ); } }
//! draws a line from to with color void CImage::drawLine(const core::position2d<s32>& from, const core::position2d<s32>& to, const SColor &color) { AbsRectangle clip; GetClip( clip, this ); core::position2d<s32> p[2]; if ( ClipLine( clip, p[0], p[1], from, to ) ) { u32 alpha = extractAlpha( color.color ); switch ( Format ) { case ECF_A1R5G5B5: if ( alpha == 256 ) { RenderLine16_Decal( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5( color.color ) ); } else { RenderLine16_Blend( this, p[0], p[1], video::A8R8G8B8toA1R5G5B5( color.color ), alpha >> 3 ); } break; case ECF_A8R8G8B8: if ( alpha == 256 ) { RenderLine32_Decal( this, p[0], p[1], color.color ); } else { RenderLine32_Blend( this, p[0], p[1], color.color, alpha ); } break; default: break; } } }