void ActivateButton::saveToFile(std::ofstream *fout) { *fout << getType() << " " << getID() << " " << getX() << " " << getY() << " " << getWidth() << " " << getHeight() << " "; if(mGate != NULL) *fout << mGate->getID() << " "; else *fout << 99999 << " "; *fout << getTextureSource() << endl; }
void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha) { if (mIndex < 0) return; activate(); if (mCurrBlendType != TB_COMBINE || gGL.mDirty) { mCurrBlendType = TB_COMBINE; gGL.flush(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); } // We want an early out, because this function does a LOT of stuff. if ( ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2)) || (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2)) ) && !gGL.mDirty) { return; } gGL.flush(); // Get the gl source enums according to the eTextureBlendSrc sources passed in GLint source1 = getTextureSource(src1); GLint source2 = getTextureSource(src2); // Get the gl operand enums according to the eTextureBlendSrc sources passed in GLint operand1 = getTextureSourceType(src1, isAlpha); GLint operand2 = getTextureSourceType(src2, isAlpha); // Default the scale amount to 1 S32 scale_amount = 1; GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum; if (isAlpha) { // Set enums to ALPHA ones comb_enum = GL_COMBINE_ALPHA_ARB; src0_enum = GL_SOURCE0_ALPHA_ARB; src1_enum = GL_SOURCE1_ALPHA_ARB; src2_enum = GL_SOURCE2_ALPHA_ARB; operand0_enum = GL_OPERAND0_ALPHA_ARB; operand1_enum = GL_OPERAND1_ALPHA_ARB; operand2_enum = GL_OPERAND2_ALPHA_ARB; // cache current combiner mCurrAlphaOp = op; mCurrAlphaSrc1 = src1; mCurrAlphaSrc2 = src2; } else { // Set enums to RGB ones comb_enum = GL_COMBINE_RGB_ARB; src0_enum = GL_SOURCE0_RGB_ARB; src1_enum = GL_SOURCE1_RGB_ARB; src2_enum = GL_SOURCE2_RGB_ARB; operand0_enum = GL_OPERAND0_RGB_ARB; operand1_enum = GL_OPERAND1_RGB_ARB; operand2_enum = GL_OPERAND2_RGB_ARB; // cache current combiner mCurrColorOp = op; mCurrColorSrc1 = src1; mCurrColorSrc2 = src2; } switch(op) { case TBO_REPLACE: // Slightly special syntax (no second sources), just set all and return. glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE); glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); (isAlpha) ? setAlphaScale(1) : setColorScale(1); return; case TBO_MULT: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); break; case TBO_MULT_X2: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); scale_amount = 2; break; case TBO_MULT_X4: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE); scale_amount = 4; break; case TBO_ADD: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD); break; case TBO_ADD_SIGNED: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB); break; case TBO_SUBTRACT: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB); break; case TBO_LERP_VERT_ALPHA: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB); glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); break; case TBO_LERP_TEX_ALPHA: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE); glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); break; case TBO_LERP_PREV_ALPHA: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB); glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); break; case TBO_LERP_CONST_ALPHA: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB); glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA); break; case TBO_LERP_VERT_COLOR: glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB); glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR); break; default: llwarns << "Unknown eTextureBlendOp: " << op << ". Setting op to replace." << llendl; // Slightly special syntax (no second sources), just set all and return. glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE); glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); (isAlpha) ? setAlphaScale(1) : setColorScale(1); return; } // Set sources, operands, and scale accordingly glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1); glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1); glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2); glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2); (isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount); }
void Teleport::saveToFile(std::ofstream *fout) { *fout << getType() << " " << getID() << " " << (int)getX() << " " << (int)getY() << " " << (int)mDestX << " " << (int)mDestY << " "; *fout << getWidth() << " " << getHeight() << " "; *fout << getTextureSource() << " " << mDestTextureSource << endl; }
/// \brief Drawing the DynamicTerrain Action::ResultE DynamicTerrain::drawPrimitives( DrawActionBase* action ) { // do frustum culling here.. extract frustum from the current camera: RenderAction* renderAction = dynamic_cast< RenderAction* >( action ); if( needInitialize_ ) { if( getHeightData() != NullFC ) { if( getLevelSize() < 3 ) { SWARNING << "DynamicTerrain: LevelSize is below minimum (using default)!" << std::endl; setLevelSize( 63 ); } // todo: choose the correct height-/texturedata source: geoClipmaps_.initialize( getLevelSize(), &imageHeightSource_, getTextureSource() ); } needInitialize_ = false; } if( !geoClipmaps_.isValid() ) { // no valid data yet return Action::Continue; } // todo: get the viewport of the RenderAction, check if the camera already has a terrain attachment: // if not: create a new TerrainView and attach it to the camera // update/render the view if( renderAction ) { // frustum culling const FrustumVolume& frustum = renderAction->getFrustum(); // make an update right here: Matrix camera = renderAction->getCameraToWorld(); Matrix toworld = renderAction->top_matrix(); toworld.invert(); camera.multLeft(toworld); Pnt3f eyePoint( camera[ 3 ][ 0 ], camera[ 3 ][ 1 ], camera[ 3 ][ 2 ] ); // transform the eyePoint to the unscaled sample space: const WorldTransformation worldTransform = getWorldTransform(); const Pnt3f worldOffset( worldTransform.offset[ 0 ], 0.0f, worldTransform.offset[ 1 ] ); const Pnt3f localEyePoint = componentDivide( ( eyePoint - worldOffset ), worldTransform.sampleDistance ); if( !getDisableUpdate() ) { geoClipmaps_.update( localEyePoint ); } // and now draw what we have: ClipmapRenderParameters renderParams; renderParams.renderAction = renderAction; renderParams.window = renderAction->getWindow(); renderParams.viewFrustum = frustum; renderParams.enableFrustumCulling = getEnableFrustumCulling(); renderParams.showTransitionRegions = getShowTransitionRegions(); renderParams.useVboExtension = getUseVboExtension(); renderParams.globalTexture = globalTexture_; renderParams.heightColorTexture = getHeightColorTexture(); renderParams.worldTransform = worldTransform; ClipmapRenderStatistics renderStats; geoClipmaps_.render( renderParams, renderStats ); if( getShowBoundingBoxes() ) { //drawBox( } // update stats: StatCollector* statCollector = action->getStatistics(); if( statCollector ) { StatIntElem* statTriangleCount = statCollector->getElem( Drawable::statNTriangles, false ); StatIntElem* statVertexCount = statCollector->getElem( Drawable::statNVertices, false ); if( statTriangleCount ) { statTriangleCount->add( renderStats.drawnTriangleCount ); } if( statVertexCount ) { statVertexCount->add( renderStats.transformedVertexCount ); } } } else { //todo: can this ever happen?! SLOG << "Test\n"; } return Action::Continue; }