Port fxGuiSnooper to 1.8
by JesseL · in Torque Game Engine Advanced · 01/07/2009 (11:30 am) · 2 replies
Please be merciful on me guys. I was sitting there porting the fxGuiSnooper and I've never ported anything before. I ran through all of the docs on the new changes to gain a better understanding on whats going on and came up with the following code. I do not know if i'm going in the right direction. I would like advice if you have it. I would like to better understand how to do the enableColorWrites function that was in 1.7.1 if you have advice.
About the author
I just realized that if I wanted to create a cat that caught on fire and ran up a telephone pole and then burst into a blue waterfall. That wouldn't be to hard!
#2
Edit:
Sweet AlexS on mIRC helped me understand that it was a Stateblock so I created these to stateblocks in hopes that would solve my problem.
01/07/2009 (11:34 am)
The part i'm having trouble with is the using the overlay colour. I can't figure out what I am suppose to do to port the enableColorWrites code. Is it a stateblock, function, what. I've been banging my head against this for like 3 days now. Please help!Edit:
Sweet AlexS on mIRC helped me understand that it was a Stateblock so I created these to stateblocks in hopes that would solve my problem.
if (mUseOverlayColour)
{
// Set Colour Mask.
//GFX->enableColorWrites(mOverlayRedMask, mOverlayGreenMask, mOverlayBlueMask, true);
// Declare StateBlocks
GFXStateBlockDesc ecw;
ecw.colorWriteRed |= ( mOverlayRedMask ? GFXCOLORWRITEENABLE_RED : 0 );
ecw.colorWriteGreen |= ( mOverlayGreenMask ? GFXCOLORWRITEENABLE_GREEN : 0 );
ecw.colorWriteBlue |= ( mOverlayBlueMask ? GFXCOLORWRITEENABLE_BLUE : 0 );
ecw.colorWriteAlpha = GFXCOLORWRITEENABLE_ALPHA;
mEcwSB = GFX->createStateBlock(ecw);
GFXStateBlockDesc ecwReset;
ecwReset.colorWriteRed = GFXCOLORWRITEENABLE_RED;
ecwReset.colorWriteGreen = GFXCOLORWRITEENABLE_GREEN;
ecwReset.colorWriteBlue = GFXCOLORWRITEENABLE_BLUE;
ecwReset.colorWriteAlpha = GFXCOLORWRITEENABLE_ALPHA;
mEcwResetSB = GFX->createStateBlock(ecwReset);
GFX->setStateBlock(mEcwSB);
// Draw our filled rectangle with the Filter Colour.
GFX->getDrawUtil()->drawRectFill(updateRect, mOverlayColor);
// Reset the Colour Mask.
GFX->setStateBlock(mEcwResetSB);
//GFX->enableColorWrites(true, true, true, true);
}
Torque Owner JesseL
Pyrotronics-Games
void fxGuiSnooper::onRender(Point2I offset, const RectI &updateRect) { // Call Parent Render. Parent::onRender(offset, updateRect); // Set Clipping Rectangle to GUI Bounds. GFX->setClipRect(getBounds()); // Do we have an attached Object? if (!mAttachedObject) { // No, so signal to user this problem ... ColorF ErrorColor(1,0,0); GFX->getDrawUtil()->drawRectFill(updateRect, ErrorColor); ErrorColor.set(1,1,1); char buf[256]; dSprintf(buf, sizeof(buf), "*** Object not selected ***"); GFX->getDrawUtil()->setBitmapModulation(ErrorColor); GFX->getDrawUtil()->drawText(mProfile->mFont, offset, buf); GFX->getDrawUtil()->clearBitmapModulation(); // Return Error. return; } // Are we using the Overlay Bitmap? if (mUseOverlayBitmap) { // Yes, so do we have a texture Handle? if (mOverlayTextureHandle) { // Yes, so clear Bitmap Modulation. GFX->getDrawUtil()->clearBitmapModulation(); // Are we tiling the Overlay Bitmap? if(mOverlayTile) { RectI SrcRegion; RectI DstRegion; // Yes, so fetch texture object. GFXTextureObject* TextureObj = mOverlayTextureHandle; // Calculate Tesselation Count. float XTess = ((float)getWidth()/(float)TextureObj->mBitmapSize.x)+1; float YTess = ((float)getHeight()/(float)TextureObj->mBitmapSize.y)+1; for(int y = 0; y < YTess; ++y) { for(int x = 0; x < XTess; ++x) { // Calculate Source Region. SrcRegion.set(0,0,TextureObj->mBitmapSize.x, TextureObj->mBitmapSize.y); // Calculate Destination Region. DstRegion.set(((TextureObj->mBitmapSize.x*x)+offset.x), ((TextureObj->mBitmapSize.y*y)+offset.y), TextureObj->mBitmapSize.x, TextureObj->mBitmapSize.y); // Draw Tiled Bitmap. GFX->getDrawUtil()->drawBitmapStretchSR(TextureObj, DstRegion, SrcRegion); } } } else { // No, so draw stretched Bitmap. GFX->getDrawUtil()->drawBitmapStretch(mOverlayTextureHandle, getBounds()); } } } // Are we using the Overlay Colour? if (mUseOverlayColour) { // Set Colour Mask. GFX->enableColorWrites(mOverlayRedMask, mOverlayGreenMask, mOverlayBlueMask, true); // Draw our filled rectangle with the Filter Colour. GFX->getDrawUtil()->drawRectFill(updateRect, mOverlayColor); // Reset the Colour Mask. GFX->enableColorWrites(true, true, true, true); } }