// Calculate lightning for given model void shaCalculateLightForSpecular(void) { ASSERT(_paNormals!=NULL); _acolVtxColors.PopAll(); _acolVtxColors.Push(_ctVertices); GFXColor colModel = (GFXColor)_colModel; // Model color GFXColor &colAmbient = (GFXColor)_colAmbient; // Ambient color GFXColor &colLight = (GFXColor)_colLight; // Light color GFXColor &colSurface = (GFXColor)_colConstant; // shader color // colModel = MulColors(colModel.r,colSurface.abgr); colModel.MultiplyRGBA(colModel,colSurface); UBYTE ubColShift = 8; SLONG slar = colAmbient.r; SLONG slag = colAmbient.g; SLONG slab = colAmbient.b; if(shaOverBrightningEnabled()) { slar = ClampUp(slar,127L); slag = ClampUp(slag,127L); slab = ClampUp(slab,127L); ubColShift = 8; } else { slar*=2; slag*=2; slab*=2; ubColShift = 7; } // for each vertex color for(INDEX ivx=0;ivx<_ctVertices;ivx++) { // calculate vertex light FLOAT3D &vNorm = FLOAT3D(_paNormals[ivx].nx,_paNormals[ivx].ny,_paNormals[ivx].nz); FLOAT fDot = vNorm % _vLightDir; fDot = Clamp(fDot,0.0f,1.0f); SLONG slDot = NormFloatToByte(fDot); _acolVtxColors[ivx].r = ClampUp(colModel.r * (slar + ((colLight.r * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].g = ClampUp(colModel.g * (slag + ((colLight.g * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].b = ClampUp(colModel.b * (slab + ((colLight.b * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].a = slDot;//colModel.a;//slDot; } // Set current wertex array _pcolVtxColors = &_acolVtxColors[0]; }
static INDEX SliderPixToIndex(PIX pixOffset, INDEX iVisible, INDEX iTotal, PIXaabbox2D boxFull) { FLOAT fSize = ClampUp(FLOAT(iVisible)/iTotal, 1.0f); PIX pixFull = boxFull.Size()(2); PIX pixSize = PIX(pixFull*fSize); if (pixSize>=boxFull.Size()(2)) { return 0; } return (iTotal*pixOffset)/pixFull; }
static PIXaabbox2D GetSliderBox(INDEX iFirst, INDEX iVisible, INDEX iTotal, PIXaabbox2D boxFull) { FLOAT fSize = ClampUp(FLOAT(iVisible)/iTotal, 1.0f); PIX pixFull = boxFull.Size()(2); PIX pixSize = PIX(pixFull*fSize); pixSize = ClampDn(pixSize, boxFull.Size()(1)); PIX pixTop = pixFull*(FLOAT(iFirst)/iTotal)+boxFull.Min()(2); PIX pixI0 = boxFull.Min()(1); PIX pixI1 = boxFull.Max()(1); return PIXaabbox2D(PIX2D(pixI0, pixTop), PIX2D(pixI1, pixTop+pixSize)); }
void CCtrlEnumCombo::OnDropdown() { INDEX ctItems = GetCount(); if( ctItems == CB_ERR) return; CRect rectCombo; GetWindowRect( &rectCombo); PIX pixScreenHeight = ::GetSystemMetrics(SM_CYSCREEN); PIX pixMaxHeight = pixScreenHeight - rectCombo.top; m_pDialog->ScreenToClient( &rectCombo); PIX pixNewHeight = GetItemHeight(0)*(ctItems+2); rectCombo.bottom = rectCombo.top + ClampUp( pixNewHeight, pixMaxHeight); MoveWindow( rectCombo); }
void CTriangularisationCombo::OnDropdown() { INDEX ctItems = GetCount(); if( ctItems == CB_ERR) return; CRect rectCombo; GetWindowRect( &rectCombo); PIX pixScreenHeight = ::GetSystemMetrics(SM_CYSCREEN); PIX pixMaxHeight = pixScreenHeight - rectCombo.top; CWnd *pwndParent = GetParent(); if( pwndParent == NULL) return; pwndParent->ScreenToClient( &rectCombo); PIX pixNewHeight = GetItemHeight(0)*(ctItems+2); rectCombo.bottom = rectCombo.top + ClampUp( pixNewHeight, pixMaxHeight); MoveWindow( rectCombo); }
static size_t ogg_read_func (void *ptr, size_t size, size_t nmemb, void *datasource) { CDecodeData_OGG *pogg = (CDecodeData_OGG *)datasource; // calculate how much can be read at most SLONG slToRead = size*nmemb; SLONG slCurrentPos = ftell(pogg->ogg_fFile)-pogg->ogg_slOffset; SLONG slSizeLeft = ClampDn(pogg->ogg_slSize-slCurrentPos, 0L); slToRead = ClampUp(slToRead, slSizeLeft); // rounded down to the block size slToRead/=size; slToRead*=size; // if there is nothing to read if (slToRead<=0) { return 0; } return fread(ptr, size, slToRead/size, pogg->ogg_fFile); }
// scroll buffer up, discarding lines at the start void CConsole::ScrollBufferUp(INDEX ctLines) { if (this==NULL) { return; } ASSERT(ctLines>0 && ctLines<con_ctLines); // move buffer up memmove( con_strBuffer, con_strBuffer+ctLines*(con_ctCharsPerLine+1), (con_ctLines-ctLines)*(con_ctCharsPerLine+1)); // move buffer up memmove( con_atmLines, con_atmLines+ctLines, (con_ctLines-ctLines)*sizeof(TIME)); con_ctLinesPrinted = ClampUp(con_ctLinesPrinted+1L, con_ctLines); // clear lines at the end for(INDEX iLine=con_ctLines-ctLines; iLine<con_ctLines; iLine++) { ClearLine(iLine); } }
// Calculate lightning for given model void shaCalculateLight(void) { // if full bright if(shaGetFlags()&BASE_FULL_BRIGHT) { GFXColor colLight = _colConstant; GFXColor colAmbient; GFXColor colConstant; // is over brightning enabled if(shaOverBrightningEnabled()) { colAmbient = 0x7F7F7FFF; } else { colAmbient = 0xFFFFFFFF; } colConstant.MultiplyRGBA(colLight,colAmbient); shaSetConstantColor(ByteSwap(colConstant.abgr)); // no vertex colors return; } ASSERT(_paNormals!=NULL); _acolVtxColors.PopAll(); _acolVtxColors.Push(_ctVertices); GFXColor colModel = (GFXColor)_colModel; // Model color GFXColor &colAmbient = (GFXColor)_colAmbient; // Ambient color GFXColor &colLight = (GFXColor)_colLight; // Light color GFXColor &colSurface = (GFXColor)_colConstant; // shader color colModel.MultiplyRGBA(colModel,colSurface); UBYTE ubColShift = 8; SLONG slar = colAmbient.r; SLONG slag = colAmbient.g; SLONG slab = colAmbient.b; if(shaOverBrightningEnabled()) { slar = ClampUp(slar,127L); slag = ClampUp(slag,127L); slab = ClampUp(slab,127L); ubColShift = 8; } else { slar*=2; slag*=2; slab*=2; ubColShift = 7; } // for each vertex color for(INDEX ivx=0;ivx<_ctVertices;ivx++) { // calculate vertex light FLOAT3D &vNorm = FLOAT3D(_paNormals[ivx].nx,_paNormals[ivx].ny,_paNormals[ivx].nz); FLOAT fDot = vNorm % _vLightDir; fDot = Clamp(fDot,0.0f,1.0f); SLONG slDot = NormFloatToByte(fDot); _acolVtxColors[ivx].r = ClampUp(colModel.r * (slar + ((colLight.r * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].g = ClampUp(colModel.g * (slag + ((colLight.g * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].b = ClampUp(colModel.b * (slab + ((colLight.b * slDot)>>ubColShift))>>8,255L); _acolVtxColors[ivx].a = colModel.a;//slDot; } // Set current vertex color array _pcolVtxColors = &_acolVtxColors[0]; }