Exemple #1
0
void Histogram::computeLog( const pfs::Array2Df *image )
{
  const int size = image->getRows()*image->getCols();

  float max, min;               // Find min, max
  {
    min = 999999999.0f;
    max = -999999999.0f;
    
    for( int i = 0; i < size; i += accuracy ) {
      float v = (*image)(i);
      if( v > max ) max = v;
      else if( v < min ) min = v;
    }
  }
  computeLog( image, min, max );
}
Exemple #2
0
// hlavni funkce main
int main(int argc, char* argv[])
{
    ProgParams state;
    Error err = parseParams(argc, argv, &state);
    CHECK_ERROR(err);

    switch (state.progState) {
        case PS_HELP:
            printHelp();
            break;

        case PS_WEIGHTED_ARITHMETIC_MEAN:
            err = computeWeightedMean(stdin, stdout, WM_ARITHMETIC);
            CHECK_ERROR(err);
            break;

        case PS_WEIGHTED_QUADRATIC_MEAN:
            err = computeWeightedMean(stdin, stdout, WM_QUADRATIC);
            CHECK_ERROR(err);
            break;

        case PS_HYPERBOLIC_TANGENT:
            err = computeTanh(stdin, stdout, sigdigToEpsylon(state.sigdig));
            CHECK_ERROR(err);
            break;

        case PS_LOGARITHM:
            err = computeLog(stdin, stdout, state.logBase, sigdigToEpsylon(state.sigdig));
            CHECK_ERROR(err);
            break;

        default:
            printError(E_NOT_IMPLEMENTED);
            return EXIT_FAILURE;
    }
    
    return EXIT_SUCCESS;
}
    void GLESTextureBuffer::buildMipmaps(const PixelBox &data)
    {
        int width;
        int height;
        int logW;
        int logH;
        int level;
        PixelBox scaled = data;
        scaled.data = data.data;
        scaled.left = data.left;
        scaled.right = data.right;
        scaled.top = data.top;
        scaled.bottom = data.bottom;
        scaled.front = data.front;
        scaled.back = data.back;

        width = data.getWidth();
        height = data.getHeight();

        logW = computeLog(width);
        logH = computeLog(height);
        level = (logW > logH ? logW : logH);

        for (int mip = 0; mip <= level; mip++)
        {
            GLenum glFormat = GLESPixelUtil::getGLOriginFormat(scaled.format);
            GLenum dataType = GLESPixelUtil::getGLOriginDataType(scaled.format);

            glTexImage2D(mFaceTarget,
                         mip,
                         glFormat,
                         width, height,
                         0,
                         glFormat,
                         dataType,
                         scaled.data);

            GL_CHECK_ERROR;

            if (mip != 0)
            {
                delete[] (uint8*) scaled.data;
                scaled.data = 0;
            }

            if (width > 1)
            {
                width = width / 2;
            }

            if (height > 1)
            {
                height = height / 2;
            }

            int sizeInBytes = PixelUtil::getMemorySize(width, height, 1,
                                                       data.format);
            scaled = PixelBox(width, height, 1, data.format);
            scaled.data = new uint8[sizeInBytes];
            Image::scale(data, scaled, Image::FILTER_LINEAR);
        }
    }
    void GLES2TextureBuffer::buildMipmaps(const PixelBox &data)
    {
        int width;
        int height;
        int logW;
        int logH;
        int level;
        PixelBox scaled = data;
        scaled.data = data.data;
        scaled.left = data.left;
        scaled.right = data.right;
        scaled.top = data.top;
        scaled.bottom = data.bottom;
        scaled.front = data.front;
        scaled.back = data.back;

        width = data.getWidth();
        height = data.getHeight();

        logW = computeLog(width);
        logH = computeLog(height);
        level = (logW > logH ? logW : logH);

        for (int mip = 0; mip <= level; mip++)
        {
            GLenum glFormat = GLES2PixelUtil::getGLOriginFormat(scaled.format);
            GLenum dataType = GLES2PixelUtil::getGLOriginDataType(scaled.format);
            GLenum internalFormat = glFormat;
#if OGRE_NO_GLES3_SUPPORT == 0
            // In GL ES 3, the internalformat and format parameters do not need to be identical
            internalFormat = GLES2PixelUtil::getClosestGLInternalFormat(scaled.format);
#endif
            switch(mTarget)
            {
                case GL_TEXTURE_2D:
                case GL_TEXTURE_CUBE_MAP:
                    OGRE_CHECK_GL_ERROR(glTexImage2D(mFaceTarget,
                                                     mip,
                                                     internalFormat,
                                                     width, height,
                                                     0,
                                                     glFormat,
                                                     dataType,
                                                     scaled.data));
                    break;
#if OGRE_NO_GLES3_SUPPORT == 0
                case GL_TEXTURE_3D:
                case GL_TEXTURE_2D_ARRAY:
                    OGRE_CHECK_GL_ERROR(glTexImage3D(mFaceTarget,
                                                     mip,
                                                     internalFormat,
                                                     width, height, depth,
                                                     0,
                                                     glFormat,
                                                     dataType,
                                                     scaled.data));
                    break;
#endif
            }

            if (mip != 0)
            {
                OGRE_DELETE[] (uint8*) scaled.data;
                scaled.data = 0;
            }

            if (width > 1)
            {
                width = width / 2;
            }

            if (height > 1)
            {
                height = height / 2;
            }

            int sizeInBytes = PixelUtil::getMemorySize(width, height, 1,
                                                       data.format);
            scaled = PixelBox(width, height, 1, data.format);
            scaled.data = new uint8[sizeInBytes];
            Image::scale(data, scaled, Image::FILTER_LINEAR);
        }