void NavPath::renderSimple(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) { if(overrideMat) return; if(state->isReflectPass() || !(isSelected() || mAlwaysRender)) return; GFXDrawUtil *drawer = GFX->getDrawUtil(); GFXStateBlockDesc desc; desc.setZReadWrite(true, false); desc.setBlend(true); desc.setCullMode(GFXCullNone); if(isSelected()) { drawer->drawCube(desc, getWorldBox(), ColorI(136, 255, 228, 5)); desc.setFillModeWireframe(); drawer->drawCube(desc, getWorldBox(), ColorI::BLACK); } desc.setZReadWrite(!mXray, false); ColorI pathColour(255, 0, 255); if(!mIsLooping) { desc.setFillModeSolid(); if(mFromSet) drawer->drawCube(desc, Point3F(0.2f, 0.2f, 0.2f), mFrom, pathColour); if(mToSet) drawer->drawCube(desc, Point3F(0.2f, 0.2f, 0.2f), mTo, pathColour); } GFXStateBlockRef sb = GFX->createStateBlock(desc); GFX->setStateBlock(sb); PrimBuild::color3i(pathColour.red, pathColour.green, pathColour.blue); PrimBuild::begin(GFXLineStrip, mPoints.size()); for (U32 i = 0; i < mPoints.size(); i++) PrimBuild::vertex3fv(mPoints[i]); PrimBuild::end(); if(mRenderSearch && getServerObject()) { NavPath *np = static_cast<NavPath*>(getServerObject()); if(np->mQuery && !dtStatusSucceed(np->mStatus)) { duDebugDrawTorque dd; dd.overrideColor(duRGBA(250, 20, 20, 255)); duDebugDrawNavMeshNodes(&dd, *np->mQuery); dd.render(); } } }
void GuiGradientCtrl::onRender(Point2I offset, const RectI& updateRect) { if (mStateBlock.isNull()) { GFXStateBlockDesc desc; desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); desc.setZReadWrite(false); desc.zWriteEnable = false; desc.setCullMode(GFXCullNone); mStateBlock = GFX->createStateBlock( desc ); } RectI boundsRect(offset, getExtent()); renderColorBox(boundsRect); if (mPositionChanged) { mPositionChanged = false; // Now do onAction() if we are allowed if (mActionOnMove) onAction(); } //render the children renderChildControls( offset, updateRect); }
void Sun::_initCorona() { if ( isServerObject() ) return; // Load texture... if ( mCoronaTextureName.isNotEmpty() ) mCoronaTexture.set( mCoronaTextureName, &GFXDefaultStaticDiffuseProfile, "CoronaTexture" ); // Make stateblock... if ( mCoronaSB.isNull() ) { GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setAlphaTest( true, GFXCmpGreaterEqual, 1 ); desc.setZReadWrite( false, false ); desc.setBlend( true, GFXBlendSrcColor, GFXBlendOne ); desc.samplersDefined = true; desc.samplers[0].textureColorOp = GFXTOPModulate; desc.samplers[0].colorArg1 = GFXTATexture; desc.samplers[0].colorArg2 = GFXTADiffuse; desc.samplers[0].alphaOp = GFXTOPModulate; desc.samplers[0].alphaArg1 = GFXTATexture; desc.samplers[0].alphaArg2 = GFXTADiffuse; mCoronaSB = GFX->createStateBlock(desc); desc.setFillModeWireframe(); mCoronaWireframeSB = GFX->createStateBlock(desc); } }
void SceneSpace::_renderObject( ObjectRenderInst* ri, SceneRenderState* state, BaseMatInstance* overrideMat ) { if( overrideMat ) return; if( !mEditorRenderMaterial ) { // We have no material for rendering so just render // a plain box. GFXTransformSaver saver; MatrixF mat = getRenderTransform(); mat.scale( getScale() ); GFX->multWorld( mat ); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); desc.setBlend( true ); desc.setCullMode( GFXCullNone ); GFXDrawUtil *drawer = GFX->getDrawUtil(); drawer->drawCube( desc, mObjBox, _getDefaultEditorSolidColor() ); // Render black wireframe. desc.setFillModeWireframe(); drawer->drawCube( desc, mObjBox, _getDefaultEditorWireframeColor() ); } else { //RDTODO } }
void Trigger::renderObject( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { if(overrideMat) return; GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); desc.setBlend( true ); // Trigger polyhedrons are set up with outward facing normals and CCW ordering // so can't enable backface culling. desc.setCullMode( GFXCullNone ); GFXTransformSaver saver; MatrixF mat = getRenderTransform(); mat.scale( getScale() ); GFX->multWorld( mat ); GFXDrawUtil *drawer = GFX->getDrawUtil(); drawer->drawPolyhedron( desc, mTriggerPolyhedron, ColorI( 255, 192, 0, 45 ) ); // Render wireframe. desc.setFillModeWireframe(); drawer->drawPolyhedron( desc, mTriggerPolyhedron, ColorI::BLACK ); }
void SkyBox::_initMaterial() { if ( mMatInstance ) SAFE_DELETE( mMatInstance ); if ( mMaterial ) mMatInstance = mMaterial->createMatInstance(); else mMatInstance = MATMGR->createMatInstance( "WarningMaterial" ); // We want to disable culling and z write. GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( true, false ); mMatInstance->addStateBlockDesc( desc ); // Also disable lighting on the skybox material by default. FeatureSet features = MATMGR->getDefaultFeatures(); features.removeFeature( MFT_RTLighting ); features.removeFeature( MFT_Visibility ); features.addFeature(MFT_SkyBox); // Now initialize the material. mMatInstance->init(features, getGFXVertexFormat<GFXVertexPNT>()); }
void DecalRoad::_debugRender( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance* ) { //if ( mStateBlock.isNull() ) // return; GFX->enterDebugEvent( ColorI( 255, 0, 0 ), "DecalRoad_debugRender" ); GFXTransformSaver saver; //GFX->setStateBlock( mStateBlock ); Point3F size(1,1,1); ColorI color( 255, 0, 0, 255 ); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); desc.setBlend( true ); desc.fillMode = GFXFillWireframe; if ( smShowBatches ) { for ( U32 i = 0; i < mBatches.size(); i++ ) { const Box3F &box = mBatches[i].bounds; GFX->getDrawUtil()->drawCube( desc, box, ColorI(255,100,100,255) ); } } //GFX->leaveDebugEvent(); }
void ForestWindEmitter::_renderEmitterInfo( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { if ( overrideMat ) return; GFXTransformSaver saver; GFXDrawUtil *drawer = GFX->getDrawUtil(); AssertFatal( drawer, "Got NULL GFXDrawUtil!" ); const Point3F &pos = getPosition(); const VectorF &windVec = mWind->getDirection(); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); // Draw an arrow pointing // in the wind direction. drawer->drawArrow( desc, pos, pos + (windVec * mWindStrength), ColorI( 0, 0, 255, 255 ) );//Point3F( -235.214, 219.589, 34.0991 ), Point3F( -218.814, 244.731, 37.5587 ), ColorI( 255, 255, 0, 255 ) );// drawer->drawArrow( desc, pos, pos + (mWind->getTarget() * mWindStrength ), ColorI( 255, 0, 0, 85 ) ); // Draw a 2D circle for the wind radius. if ( isRadialEmitter() ) drawer->drawSphere( desc, mWindRadius, pos, ColorI( 255, 0, 0, 80 ) ); }
bool CloudLayer::onAdd() { if ( !Parent::onAdd() ) return false; setGlobalBounds(); resetWorldBox(); addToScene(); if ( isClientObject() ) { _initTexture(); _initBuffers(); // Find ShaderData ShaderData *shaderData; mShader = Sim::findObject( "CloudLayerShader", shaderData ) ? shaderData->getShader() : NULL; if ( !mShader ) { Con::errorf( "CloudLayer::onAdd - could not find CloudLayerShader" ); return false; } // Create ShaderConstBuffer and Handles mShaderConsts = mShader->allocConstBuffer(); mModelViewProjSC = mShader->getShaderConstHandle( "$modelView" ); mEyePosWorldSC = mShader->getShaderConstHandle( "$eyePosWorld" ); mSunVecSC = mShader->getShaderConstHandle( "$sunVec" ); mTexOffsetSC[0] = mShader->getShaderConstHandle( "$texOffset0" ); mTexOffsetSC[1] = mShader->getShaderConstHandle( "$texOffset1" ); mTexOffsetSC[2] = mShader->getShaderConstHandle( "$texOffset2" ); mTexScaleSC = mShader->getShaderConstHandle( "$texScale" ); mAmbientColorSC = mShader->getShaderConstHandle( "$ambientColor" ); mSunColorSC = mShader->getShaderConstHandle( "$sunColor" ); mCoverageSC = mShader->getShaderConstHandle( "$cloudCoverage" ); mExposureSC = mShader->getShaderConstHandle( "$cloudExposure" ); mBaseColorSC = mShader->getShaderConstHandle( "$cloudBaseColor" ); mNormalHeightMapSC = mShader->getShaderConstHandle( "$normalHeightMap" ); // Create StateBlocks GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( false, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; desc.samplers[0].addressModeW = GFXAddressWrap; desc.samplers[0].magFilter = GFXTextureFilterLinear; desc.samplers[0].minFilter = GFXTextureFilterLinear; desc.samplers[0].mipFilter = GFXTextureFilterLinear; desc.samplers[0].textureColorOp = GFXTOPModulate; mStateblock = GFX->createStateBlock( desc ); } return true; }
void GuiColorPickerCtrl::onRender(Point2I offset, const RectI& updateRect) { if (mStateBlock.isNull()) { GFXStateBlockDesc desc; desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); desc.setZReadWrite(false); desc.zWriteEnable = false; desc.setCullMode(GFXCullNone); mStateBlock = GFX->createStateBlock( desc ); } RectI boundsRect(offset, getExtent()); renderColorBox(boundsRect); if (mPositionChanged) { mPositionChanged = false; Point2I extent = getRoot()->getExtent(); // If we are anything but a pallete, change the pick color if (mDisplayMode != pPallet) { Point2I resolution = getRoot()->getExtent(); U32 buf_x = offset.x + mSelectorPos.x + 1; U32 buf_y = ( extent.y - ( offset.y + mSelectorPos.y + 1 ) ); if(GFX->getAdapterType() != OpenGL) buf_y = resolution.y - buf_y; GFXTexHandle bb( resolution.x, resolution.y, GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__) ); Point2I tmpPt( buf_x, buf_y ); GFXTarget *targ = GFX->getActiveRenderTarget(); targ->resolveTo( bb ); GBitmap bmp( bb.getWidth(), bb.getHeight() ); bb.copyToBmp( &bmp ); //bmp.writePNGDebug( "foo.png" ); ColorI tmp; bmp.getColor( buf_x, buf_y, tmp ); mPickColor = (ColorF)tmp; // Now do onAction() if we are allowed if (mActionOnMove) onAction(); } } //render the children renderChildControls( offset, updateRect); }
void Forest::_renderCellBounds( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { PROFILE_SCOPE( Forest_RenderCellBounds ); if ( overrideMat ) return; GFXTransformSaver saver; MatrixF projBias(true); const Frustum frustum = GFX->getFrustum(); MathUtils::getZBiasProjectionMatrix( 0.001f, frustum, &projBias ); GFX->setProjectionMatrix( projBias ); VectorF extents; Point3F pos; // Get top level cells Vector<ForestCell*> cellStack; mData->getCells( &cellStack ); // Holds child cells we need to render as we encounter them. Vector<ForestCell*> frontier; GFXDrawUtil *drawer = GFX->getDrawUtil(); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); desc.setBlend( true ); desc.setFillModeWireframe(); while ( !cellStack.empty() ) { while ( !cellStack.empty() ) { const ForestCell *cell = cellStack.last(); cellStack.pop_back(); Box3F box = cell->getBounds(); drawer->drawCube( desc, box, ColorI( 0, 255, 0 ) ); RectF rect = cell->getRect(); box.minExtents.set( rect.point.x, rect.point.y, box.minExtents.z ); box.maxExtents.set( rect.point.x + rect.extent.x, rect.point.y + rect.extent.y, box.minExtents.z ); drawer->drawCube( desc, box, ColorI::RED ); // If this cell has children, add them to the frontier. if ( !cell->isLeaf() ) cell->getChildren( &frontier ); } // Now the frontier becomes the cellStack and we empty the frontier. cellStack = frontier; frontier.clear(); } }
void DebugDrawer::setupStateBlocks() { GFXStateBlockDesc d; d.setCullMode(GFXCullNone); mRenderZOnSB = GFX->createStateBlock(d); d.setZReadWrite(false); mRenderZOffSB = GFX->createStateBlock(d); }
bool GuiNavEditorCtrl::onAdd() { if(!Parent::onAdd()) return false; GFXStateBlockDesc desc; desc.fillMode = GFXFillSolid; desc.setBlend(false); desc.setZReadWrite(false, false); desc.setCullMode(GFXCullNone); mZDisableSB = GFX->createStateBlock(desc); desc.setZReadWrite(true, true); mZEnableSB = GFX->createStateBlock(desc); SceneManager::getPreRenderSignal().notify(this, &GuiNavEditorCtrl::_prepRenderImage); return true; }
void TerrCell::renderBounds() const { ColorI color; color.interpolate( ColorI::RED, ColorI::GREEN, (F32)mLevel / 3.0f ); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); desc.fillMode = GFXFillWireframe; GFX->getDrawUtil()->drawCube( desc, mBounds, color ); }
void TSShapeInstance::renderDebugNodes() { GFXDrawUtil *drawUtil = GFX->getDrawUtil(); ColorI color( 255, 0, 0, 255 ); GFXStateBlockDesc desc; desc.setBlend( false ); desc.setZReadWrite( false, false ); for ( U32 i = 0; i < mNodeTransforms.size(); i++ ) drawUtil->drawTransform( desc, mNodeTransforms[i], NULL, NULL ); }
void PxCapsulePlayer::renderDebug( ObjectRenderInst *ri, SceneState *state, BaseMatInstance *overrideMat ) { Point3F center = pxCast<Point3F>( mCapsuleController->getDebugPosition() ); F32 radius = mCapsuleController->getRadius(); F32 height = mCapsuleController->getHeight(); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); GFX->getDrawUtil()->drawCapsule( desc, center, radius, height, ColorI(100,100,200,160) ); }
void GuiDecalEditorCtrl::renderScene(const RectI & updateRect) { PROFILE_SCOPE( GuiDecalEditorCtrl_renderScene ); GFXTransformSaver saver; RectI bounds = getBounds(); ColorI hlColor(0,255,0,255); ColorI regColor(255,0,0,255); ColorI selColor(0,0,255,255); ColorI color; GFXDrawUtil *drawUtil = GFX->getDrawUtil(); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); // Draw 3D stuff here. if ( mSELDecal ) { mGizmo->renderGizmo( mLastCameraQuery.cameraMatrix, mLastCameraQuery.fov ); mSELEdgeVerts.clear(); if ( gDecalManager->clipDecal( mSELDecal, &mSELEdgeVerts ) ) _renderDecalEdge( mSELEdgeVerts, ColorI( 255, 255, 255, 255 ) ); const F32 &decalSize = mSELDecal->mSize; Point3F boxSize( decalSize, decalSize, decalSize ); MatrixF worldMat( true ); mSELDecal->getWorldMatrix( &worldMat, true ); drawUtil->drawObjectBox( desc, boxSize, mSELDecal->mPosition, worldMat, ColorI( 255, 255, 255, 255 ) ); } if ( mHLDecal ) { mHLEdgeVerts.clear(); if ( gDecalManager->clipDecal( mHLDecal, &mHLEdgeVerts ) ) _renderDecalEdge( mHLEdgeVerts, ColorI( 255, 255, 255, 255 ) ); const F32 &decalSize = mHLDecal->mSize; Point3F boxSize( decalSize, decalSize, decalSize ); MatrixF worldMat( true ); mHLDecal->getWorldMatrix( &worldMat, true ); drawUtil->drawObjectBox( desc, boxSize, mHLDecal->mPosition, worldMat, ColorI( 255, 255, 255, 255 ) ); } }
bool BasicClouds::onAdd() { if ( !Parent::onAdd() ) return false; setGlobalBounds(); resetWorldBox(); addToScene(); if ( isClientObject() ) { _initTexture(); _initBuffers(); // Find ShaderData ShaderData *shaderData; mShader = Sim::findObject( "BasicCloudsShader", shaderData ) ? shaderData->getShader() : NULL; if ( !mShader ) { Con::errorf( "BasicClouds::onAdd - could not find BasicCloudsShader" ); return false; } // Create ShaderConstBuffer and Handles mShaderConsts = mShader->allocConstBuffer(); mModelViewProjSC = mShader->getShaderConstHandle( "$modelView" ); mTimeSC = mShader->getShaderConstHandle( "$accumTime" ); mTexScaleSC = mShader->getShaderConstHandle( "$texScale" ); mTexDirectionSC = mShader->getShaderConstHandle( "$texDirection" ); mTexOffsetSC = mShader->getShaderConstHandle( "$texOffset" ); mDiffuseMapSC = mShader->getShaderConstHandle( "$diffuseMap" ); // Create StateBlocks GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( false, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; desc.samplers[0].addressModeW = GFXAddressWrap; desc.samplers[0].magFilter = GFXTextureFilterLinear; desc.samplers[0].minFilter = GFXTextureFilterLinear; desc.samplers[0].mipFilter = GFXTextureFilterLinear; desc.samplers[0].textureColorOp = GFXTOPModulate; mStateblock = GFX->createStateBlock( desc ); } return true; }
void GFXDrawUtil::_setupStateBlocks() { // DrawBitmapStretchSR GFXStateBlockDesc bitmapStretchSR; bitmapStretchSR.setCullMode(GFXCullNone); bitmapStretchSR.setZReadWrite(false); bitmapStretchSR.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); bitmapStretchSR.samplersDefined = true; // Linear: Create wrap SB bitmapStretchSR.samplers[0] = GFXSamplerStateDesc::getWrapLinear(); mBitmapStretchWrapLinearSB = mDevice->createStateBlock(bitmapStretchSR); // Linear: Create clamp SB bitmapStretchSR.samplers[0] = GFXSamplerStateDesc::getClampLinear(); mBitmapStretchLinearSB = mDevice->createStateBlock(bitmapStretchSR); // Point: bitmapStretchSR.samplers[0].minFilter = GFXTextureFilterPoint; bitmapStretchSR.samplers[0].mipFilter = GFXTextureFilterPoint; bitmapStretchSR.samplers[0].magFilter = GFXTextureFilterPoint; // Point: Create clamp SB, last created clamped so no work required here mBitmapStretchSB = mDevice->createStateBlock(bitmapStretchSR); // Point: Create wrap SB, have to do this manually because getWrapLinear doesn't bitmapStretchSR.samplers[0].addressModeU = GFXAddressWrap; bitmapStretchSR.samplers[0].addressModeV = GFXAddressWrap; bitmapStretchSR.samplers[0].addressModeW = GFXAddressWrap; mBitmapStretchWrapSB = mDevice->createStateBlock(bitmapStretchSR); GFXStateBlockDesc rectFill; rectFill.setCullMode(GFXCullNone); rectFill.setZReadWrite(false); rectFill.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); mRectFillSB = mDevice->createStateBlock(rectFill); }
void DecalRoad::_initMaterial() { SAFE_DELETE( mMatInst ); if ( mMaterial ) mMatInst = mMaterial->createMatInstance(); else mMatInst = MATMGR->createMatInstance( "WarningMaterial" ); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); mMatInst->addStateBlockDesc( desc ); mMatInst->init( MATMGR->getDefaultFeatures(), getGFXVertexFormat<GFXVertexPNTBT>() ); }
void NavMesh::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) { if(overrideMat) return; if(state->isReflectPass()) return; PROFILE_SCOPE(NavMesh_Render); GFXDrawUtil *drawer = GFX->getDrawUtil(); GFXStateBlockDesc desc; desc.setZReadWrite(true, false); desc.setBlend(true); desc.setCullMode(GFXCullNone); drawer->drawCube(desc, getWorldBox(), ColorI(136, 255, 228, 45)); desc.setFillModeWireframe(); drawer->drawCube(desc, getWorldBox(), ColorI::BLACK); // Recast debug draw duDebugDrawTorque dd; NetObject *no = getServerObject(); if(no && isSelected()) { NavMesh *n = static_cast<NavMesh*>(no); RenderMode mode = mRenderMode; bool build = n->mBuilding; if(build) { mode = RENDER_NAVMESH; dd.overrideColour(duRGBA(255, 0, 0, 80)); } n->mNavMeshLock.lock(); switch(mode) { case RENDER_NAVMESH: if(n->nm) duDebugDrawNavMesh (&dd, *n->nm, 0); break; case RENDER_CONTOURS: if(n->cs) duDebugDrawContours (&dd, *n->cs); break; case RENDER_POLYMESH: if(n->pm) duDebugDrawPolyMesh (&dd, *n->pm); break; case RENDER_DETAILMESH: if(n->pmd) duDebugDrawPolyMeshDetail (&dd, *n->pmd); break; case RENDER_PORTALS: if(n->nm) duDebugDrawNavMeshPortals (&dd, *n->nm); break; } if(n->cs && mRenderConnections && !build) duDebugDrawRegionConnections(&dd, *n->cs); if(n->mInPolys && mRenderInput && !build) n->mInPolys->render(); n->mNavMeshLock.unlock(); } }
bool GuiRoadEditorCtrl::onAdd() { if( !Parent::onAdd() ) return false; mRoadSet = DecalRoad::getServerSet(); GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend(false); desc.setZReadWrite( false, false ); mZDisableSB = GFX->createStateBlock(desc); return true; }
void ForestWindEmitter::_renderEmitterInfo( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { if ( overrideMat ) return; GFXTransformSaver saver; GFXDrawUtil *drawer = GFX->getDrawUtil(); AssertFatal( drawer, "Got NULL GFXDrawUtil!" ); const Point3F &pos = getPosition(); const VectorF &windVec = mWind->getDirection(); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); // Draw an arrow pointing // in the wind direction. drawer->drawArrow( desc, pos, pos + (windVec * mWindStrength), ColorI( 0, 0, 255, 255 ) );//Point3F( -235.214, 219.589, 34.0991 ), Point3F( -218.814, 244.731, 37.5587 ), ColorI( 255, 255, 0, 255 ) );// drawer->drawArrow( desc, pos, pos + (mWind->getTarget() * mWindStrength ), ColorI( 255, 0, 0, 85 ) ); S32 useRadius = mWindRadius; // Draw a 2D circle for the wind radius. if ( isRadialEmitter() ) { //WLE - Vince //So the problem is that when your inside the sphere it won't render so it might make someone //think that it's not working right. So what I did was determine if the camera is inside the sphere. //If the camera is inside the sphere, then I find the distance from the center of the sphere to the camera //Round down and use that as the radius to draw the sphere. //That way if someone zooms in or out, their screen is still showing the sphere. GameConnection * gc = GameConnection::getConnectionToServer(); GameBase* gb = gc->getCameraObject(); if (gb) { Point3F camPos = gb->getPosition(); if ( getPosition().isInsideSphere( camPos, mWindRadius ) ) useRadius = getPosition().distanceTo(camPos); } drawer->drawSphere( desc, useRadius, pos, ColorI( 255, 0, 0, 80 ) ); } }
void EditTSCtrl::renderMissionArea() { MissionArea* obj = MissionArea::getServerObject(); if ( !obj ) return; if ( !mRenderMissionArea && !obj->isSelected() ) return; GFXDEBUGEVENT_SCOPE( Editor_renderMissionArea, ColorI::WHITE ); F32 minHeight = 0.0f; F32 maxHeight = 0.0f; TerrainBlock* terrain = getActiveTerrain(); if ( terrain ) { terrain->getMinMaxHeight( &minHeight, &maxHeight ); Point3F pos = terrain->getPosition(); maxHeight += pos.z + mMissionAreaHeightAdjust; minHeight += pos.z - mMissionAreaHeightAdjust; } const RectI& area = obj->getArea(); Box3F areaBox( area.point.x, area.point.y, minHeight, area.point.x + area.extent.x, area.point.y + area.extent.y, maxHeight ); GFXDrawUtil* drawer = GFX->getDrawUtil(); GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( false, false ); desc.setFillModeSolid(); drawer->drawCube( desc, areaBox, mMissionAreaFillColor ); desc.setFillModeWireframe(); drawer->drawCube( desc, areaBox, mMissionAreaFrameColor ); }
void ForestWindEmitter::_renderEmitterInfo( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { if ( overrideMat ) return; GFXTransformSaver saver; GFXDrawUtil *drawer = GFX->getDrawUtil(); AssertFatal( drawer, "Got NULL GFXDrawUtil!" ); const Point3F &pos = getPosition(); const VectorF &windVec = mWind->getDirection(); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); // Draw an arrow pointing // in the wind direction. drawer->drawArrow( desc, pos, pos + (windVec * mWindStrength), ColorI( 0, 0, 255, 255 ) );//Point3F( -235.214, 219.589, 34.0991 ), Point3F( -218.814, 244.731, 37.5587 ), ColorI( 255, 255, 0, 255 ) );// drawer->drawArrow( desc, pos, pos + (mWind->getTarget() * mWindStrength ), ColorI( 255, 0, 0, 85 ) ); S32 useRadius = mWindRadius; // Draw a 2D circle for the wind radius. if ( isRadialEmitter() ) { // If the camera is close to the sphere, shrink the sphere so it remains visible. GameConnection* gc = GameConnection::getConnectionToServer(); GameBase* gb; if ( gc && (gb = gc->getCameraObject()) ) { F32 camDist = (gb->getPosition() - getPosition()).len(); if ( camDist < mWindRadius ) useRadius = camDist; } drawer->drawSphere( desc, useRadius, pos, ColorI( 255, 0, 0, 80 ) ); } }
void AITurretShape::_renderScanner( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { GFXStateBlockDesc desc; desc.setBlend(false, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); desc.setZReadWrite(false,true); desc.fillMode = GFXFillWireframe; // Render the scan box GFX->getDrawUtil()->drawCube(desc, mTransformedScanBox.getExtents(), mTransformedScanBox.getCenter(), ColorI(255, 0, 0)); // Render a line from the scan node to the max scan distance MatrixF nodeMat; if (getNodeTransform(mDataBlock->scanNode, nodeMat)) { Point3F start; nodeMat.getColumn(3, &start); Point3F end(0.0f, mScanDistance, 0.0f); nodeMat.mulP(end); GFX->getDrawUtil()->drawLine(start, end, ColorI(255, 255, 0)); } }
void DecalData::_initMaterial() { SAFE_DELETE( matInst ); if ( material ) matInst = material->createMatInstance(); else matInst = MATMGR->createMatInstance( "WarningMaterial" ); GFXStateBlockDesc desc; desc.setZReadWrite( true, false ); //desc.zFunc = GFXCmpLess; matInst->addStateBlockDesc( desc ); matInst->init( MATMGR->getDefaultFeatures(), getGFXVertexFormat<DecalVertex>() ); if( !matInst->isValid() ) { Con::errorf( "DecalData::_initMaterial - failed to create material instance for '%s'", materialName.c_str() ); SAFE_DELETE( matInst ); matInst = MATMGR->createMatInstance( "WarningMaterial" ); matInst->init( MATMGR->getDefaultFeatures(), getGFXVertexFormat< DecalVertex >() ); } }
bool GuiTerrPreviewCtrl::onAdd() { if(Parent::onAdd() == false) { return false; } SimObject* inTerrEditor = Sim::findObject("ETerrainEditor"); if(!inTerrEditor) { Con::errorf(ConsoleLogEntry::General, "TerrainEditor::onAdd: failed to load Terrain Editor"); return false; } mTerrainEditor = dynamic_cast<TerrainEditor*>(inTerrEditor); GFXStateBlockDesc desc; desc.setBlend(false, GFXBlendOne, GFXBlendZero); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; desc.samplers[0].textureColorOp = GFXTOPSelectARG1; desc.samplers[0].colorArg1 = GFXTATexture; desc.setCullMode(GFXCullNone); desc.setZReadWrite(false); mTerrainBitmapStateBlock = GFX->createStateBlock(desc); desc.samplers[0].textureColorOp = GFXTOPDisable; mControlsStateBlock = GFX->createStateBlock(desc); return true; }
void ScatterSky::_debugRender( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) { GFXStateBlockDesc desc; desc.fillMode = GFXFillSolid; desc.setBlend( false, GFXBlendOne, GFXBlendZero ); desc.setZReadWrite( false, false ); GFXStateBlockRef sb = GFX->GFX->createStateBlock( desc ); GFX->setStateBlock( sb ); PrimBuild::begin( GFXLineStrip, mSkyPoints.size() ); PrimBuild::color3i( 255, 0, 255 ); for ( U32 i = 0; i < mSkyPoints.size(); i++ ) { Point3F pnt = mSkyPoints[i]; pnt.normalize(); pnt *= 500; pnt += state->getCameraPosition(); PrimBuild::vertex3fv( pnt ); } PrimBuild::end(); }
void DecalManager::renderDecalSpheres() { if ( mData && Con::getBoolVariable( "$renderSpheres" ) ) { PROFILE_SCOPE( DecalManager_renderDecalSpheres ); const Vector<DecalSphere*> &grid = mData->getGrid(); GFXDrawUtil *drawUtil = GFX->getDrawUtil(); ColorI sphereLineColor( 0, 255, 0, 25 ); ColorI sphereColor( 0, 0, 255, 30 ); GFXStateBlockDesc desc; desc.setBlend( true ); desc.setZReadWrite( true, false ); for ( U32 i = 0; i < grid.size(); i++ ) { DecalSphere *decalSphere = grid[i]; const SphereF &worldSphere = decalSphere->mWorldSphere; drawUtil->drawSphere( desc, worldSphere.radius, worldSphere.center, sphereColor ); } } }