void BloomEffect::apply(const sf::RenderTexture& input, sf::RenderTarget& output) { prepareTextures(input.getSize()); filterBright(input, mBrightnessTexture); downsample(mBrightnessTexture, mFirstPassTextures[0]); blurMultipass(mFirstPassTextures); downsample(mFirstPassTextures[0], mSecondPassTextures[0]); blurMultipass(mSecondPassTextures); add(mFirstPassTextures[0], mSecondPassTextures[0], mFirstPassTextures[1]); mFirstPassTextures[1].display(); add(input, mFirstPassTextures[1], output); }
void EMIModel::loadMesh(Common::SeekableReadStream *data) { //int strLength = 0; // Usefull for PS2-strings Common::String nameString = readLAString(data); _sphereData->readFromStream(data); _boxData->readFromStream(data); _boxData2->readFromStream(data); _numTexSets = data->readUint32LE(); _setType = data->readUint32LE(); _numTextures = data->readUint32LE(); _texNames = new Common::String[_numTextures]; for (uint32 i = 0; i < _numTextures; i++) { _texNames[i] = readLAString(data); // Every texname seems to be followed by 4 0-bytes (Ref mk1.mesh, // this is intentional) data->skip(4); } prepareTextures(); int type = data->readUint32LE(); // Check that it is one of the known types //3 is no texture vertecies //18 is no normals //19 is regular assert(type == 19 || type == 18 || type == 3); _numVertices = data->readUint32LE(); // Vertices _vertices = new Math::Vector3d[_numVertices]; _drawVertices = new Math::Vector3d[_numVertices]; for (int i = 0; i < _numVertices; i++) { _vertices[i].readFromStream(data); _drawVertices[i] = _vertices[i]; } _normals = new Math::Vector3d[_numVertices]; if (type != 18) { for (int i = 0; i < _numVertices; i++) { _normals[i].readFromStream(data); } } _colorMap = new EMIColormap[_numVertices]; for (int i = 0; i < _numVertices; ++i) { _colorMap[i].r = data->readByte(); _colorMap[i].g = data->readByte(); _colorMap[i].b = data->readByte(); _colorMap[i].a = data->readByte(); } if (type != 3) { _texVerts = new Math::Vector2d[_numVertices]; for (int i = 0; i < _numVertices; i++) { _texVerts[i].readFromStream(data); } } // Faces _numFaces = data->readUint32LE(); if (data->eos()) { _numFaces = 0; _faces = NULL; return; } _faces = new EMIMeshFace[_numFaces]; for (uint32 j = 0; j < _numFaces; j++) { _faces[j].setParent(this); _faces[j].loadFace(data); } int hasBones = data->readUint32LE(); if (hasBones == 1) { _numBones = data->readUint32LE(); _boneNames = new Common::String[_numBones]; for (int i = 0; i < _numBones; i++) { _boneNames[i] = readLAString(data); } _numBoneInfos = data->readUint32LE(); _boneInfos = new BoneInfo[_numBoneInfos]; for (int i = 0; i < _numBoneInfos; i++) { _boneInfos[i]._incFac = data->readUint32LE(); _boneInfos[i]._joint = data->readUint32LE(); _boneInfos[i]._weight = data->readUint32LE(); } } else { _numBones = 0; _numBoneInfos = 0; } prepareForRender(); }