Ejemplo n.º 1
0
    void DebugActor::doUpdate(const UpdateState& us)
    {
        static int fps = 0;
        ++_frames;
        if (_frames > 50)
        {
            timeMS this_time = getTimeMS();
            if (this_time != _startTime)
            {
                fps = int(((float)_frames / (this_time - _startTime)) * 1000);
            }
            _startTime = this_time;
            _frames = 0;
        }

        std::stringstream s;
        s << "fps=" << fps << std::endl;



#ifdef __S3E__
        int mem_used = -1;
        int mem_free = -1;

        mem_used = s3eMemoryGetInt(S3E_MEMORY_USED);
        mem_free = s3eMemoryGetInt(S3E_MEMORY_FREE);

        s << "mfree=" << mem_free << " mem=" << mem_used << std::endl;
#endif



#ifdef OXYGINE_DEBUG_TRACE_LEAKS
        s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << std::endl;
#endif
#ifdef OXYGINE_TRACE_VIDEO_STATS
        s << "batches=" << _videoStats.batches << " triangles=" << _videoStats.triangles << std::endl;
#endif
        s << "update=" << getStage()->_statUpdate << "ms ";
        s << "render=" << getStage()->_statRender << "ms ";
        s << "textures=" << NativeTexture::created << " ";
        s << "\nlisteners=" << getStage()->getListenersCount() << "";

        if (!_debugText.empty())
        {
            s << "\n";
            s << _debugText;
        }
        _debugText = "";

        _text->setText(s.str());


        setHeight(_text->getTextRect().size.y + _text->getY() + 3);
        _bg->setSize(getSize());


        Vector2 ds = core::getDisplaySize();

        Vector2 pos(0, 0);

        switch (_corner)
        {
            case 1:
                pos.x = ds.x;
                break;
            case 2:
                pos = ds;
                break;
            case 3:
                pos.y = ds.y;
                break;
        }

        pos = getStage()->global2local(pos);

        Vector2 realSize = getScaledSize();
        switch (_corner)
        {
            case 1:
                pos.x -= realSize.x;
                break;
            case 2:
                pos -= realSize;
                break;
            case 3:
                pos.y -= realSize.y;
                break;
        }

        setPosition(pos);
        setScale(1.0f / getStage()->getScaleX());
    }
Ejemplo n.º 2
0
int decodeResizeImage(char const *filename, int maxPixels, Bitmap* bitmap) {
    LOGI("decodeResizeImage. START");
    int returnCode;

    int maxWidth;
    int maxHeight;

    // Decode Image
    returnCode = decodeImage(filename, bitmap);

    if (returnCode != MEMORY_OK) {
        LOGE("Failed to decode image");
        freeUnsignedCharArray(&(*bitmap).red);
        freeUnsignedCharArray(&(*bitmap).green);
        freeUnsignedCharArray(&(*bitmap).blue);
        return returnCode;
    }
    LOGI("decodeResizeImage. IMAGE DECODED");

    doTransforms(bitmap, 1, 0, 0);
    // Resize red channel
    getScaledSize((*bitmap).redWidth, (*bitmap).redHeight, maxPixels, &maxWidth, &maxHeight); //We only need to do this once as r, g, b should be the same sizes
    returnCode = resizeChannel(&(*bitmap).red, (*bitmap).redWidth, (*bitmap).redHeight, maxWidth, maxHeight);
    if (returnCode != MEMORY_OK) {
        freeUnsignedCharArray(&(*bitmap).red);
        return returnCode;
    }
    // Set red channel dimensions
    if ((*bitmap).redWidth >= maxWidth && (*bitmap).redHeight >= maxHeight) {
        (*bitmap).redWidth = maxWidth;
        (*bitmap).redHeight = maxHeight;
    }
    LOGI("decodeResizeImage. RED COMPLETE");

    /**
     * GREEN CHANNEL
     */
    doTransforms(bitmap, 0, 1, 0);
    // Resize green channel
    returnCode = resizeChannel(&(*bitmap).green, (*bitmap).greenWidth, (*bitmap).greenHeight, maxWidth, maxHeight);
    if (returnCode != MEMORY_OK) {
        freeUnsignedCharArray(&(*bitmap).red);
        freeUnsignedCharArray(&(*bitmap).green);
        return returnCode;
    }
    // Set green channel dimensions
    if ((*bitmap).greenWidth >= maxWidth && (*bitmap).greenHeight >= maxHeight) {
        (*bitmap).greenWidth = maxWidth;
        (*bitmap).greenHeight = maxHeight;
    }
    LOGI("decodeResizeImage. GREEN COMPLETE");


    /**
     * BLUE CHANNEL
     */
    doTransforms(bitmap, 0, 0, 1);
    // Resize blue channel
    returnCode = resizeChannel(&(*bitmap).blue, (*bitmap).blueWidth, (*bitmap).blueHeight, maxWidth, maxHeight);
    if (returnCode != MEMORY_OK) {
        freeUnsignedCharArray(&(*bitmap).red);
        freeUnsignedCharArray(&(*bitmap).green);
        freeUnsignedCharArray(&(*bitmap).blue);
        return returnCode;
    }
    // Set blue channel dimensions
    if ((*bitmap).blueWidth >= maxWidth && (*bitmap).blueHeight >= maxHeight) {
        (*bitmap).blueWidth = maxWidth;
        (*bitmap).blueHeight = maxHeight;
    }
    LOGI("decodeResizeImage. BLUE COMPLETE");


    // Set the final bitmap dimensions
    if ((*bitmap).redWidth == (*bitmap).greenWidth && (*bitmap).redWidth == (*bitmap).blueWidth
            && (*bitmap).redHeight == (*bitmap).greenHeight && (*bitmap).redHeight == (*bitmap).blueHeight) {
        (*bitmap).width = (*bitmap).redWidth;
        (*bitmap).height = (*bitmap).redHeight;
    } else {
        freeUnsignedCharArray(&(*bitmap).red);
        freeUnsignedCharArray(&(*bitmap).green);
        freeUnsignedCharArray(&(*bitmap).blue);
        return INCONSISTENT_BITMAP_ERROR;
    }
    LOGI("decodeResizeImage. FINISHED");

    return MEMORY_OK;
}
Ejemplo n.º 3
0
int decodeJpegData(char* jpegData, int jpegSize, int maxPixels, Bitmap* bitmap) {
	int returnCode;

	int maxWidth;
	int maxHeight;

	// Decode red channel
	returnCode = decodeJpegChannel(jpegData, jpegSize, 0, &(*bitmap).red, &(*bitmap).redWidth, &(*bitmap).redHeight);
	if (returnCode != MEMORY_OK) {
		LOGE("Failed to decode red channel");
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		return returnCode;
	}

	doTransforms(bitmap, 1, 0, 0);
	// Resize red channel
	getScaledSize((*bitmap).redWidth, (*bitmap).redHeight, maxPixels, &maxWidth, &maxHeight); //We only need to do this once as r, g, b should be the same sizes
	returnCode = resizeChannel(&(*bitmap).red, (*bitmap).redWidth, (*bitmap).redHeight, maxWidth, maxHeight);
	if (returnCode != MEMORY_OK) {
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		return returnCode;
	}
	// Set red channel dimensions
	if ((*bitmap).redWidth >= maxWidth && (*bitmap).redHeight >= maxHeight) {
		(*bitmap).redWidth = maxWidth;
		(*bitmap).redHeight = maxHeight;
	}

	// Decode green channel
	returnCode = decodeJpegChannel(jpegData, jpegSize, 1, &(*bitmap).green, &(*bitmap).greenWidth, &(*bitmap).greenHeight);
	if (returnCode != MEMORY_OK) {
		LOGE("Failed to decode green channel");
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		freeUnsignedCharArray(&(*bitmap).green);
		return returnCode;
	}

	doTransforms(bitmap, 0, 1, 0);
	// Resize green channel
	returnCode = resizeChannel(&(*bitmap).green, (*bitmap).greenWidth, (*bitmap).greenHeight, maxWidth, maxHeight);
	if (returnCode != MEMORY_OK) {
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		freeUnsignedCharArray(&(*bitmap).green);
		return returnCode;
	}
	// Set green channel dimensions
	if ((*bitmap).greenWidth >= maxWidth && (*bitmap).greenHeight >= maxHeight) {
		(*bitmap).greenWidth = maxWidth;
		(*bitmap).greenHeight = maxHeight;
	}

	// Decode blue channel
	returnCode = decodeJpegChannel(jpegData, jpegSize, 2, &(*bitmap).blue, &(*bitmap).blueWidth, &(*bitmap).blueHeight);
	if (returnCode != MEMORY_OK) {
		LOGE("Failed to decode blue channel");
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		freeUnsignedCharArray(&(*bitmap).green);
		freeUnsignedCharArray(&(*bitmap).blue);
		return returnCode;
	}

	doTransforms(bitmap, 0, 0, 1);
	// Resize blue channel
	returnCode = resizeChannel(&(*bitmap).blue, (*bitmap).blueWidth, (*bitmap).blueHeight, maxWidth, maxHeight);
	if (returnCode != MEMORY_OK) {
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		freeUnsignedCharArray(&(*bitmap).green);
		freeUnsignedCharArray(&(*bitmap).blue);
		return returnCode;
	}
	// Set blue channel dimensions
	if ((*bitmap).blueWidth >= maxWidth && (*bitmap).blueHeight >= maxHeight) {
		(*bitmap).blueWidth = maxWidth;
		(*bitmap).blueHeight = maxHeight;
	}

	// Set the final bitmap dimensions
	if ((*bitmap).redWidth == (*bitmap).greenWidth && (*bitmap).redWidth == (*bitmap).blueWidth
			&& (*bitmap).redHeight == (*bitmap).greenHeight && (*bitmap).redHeight == (*bitmap).blueHeight) {
		(*bitmap).width = (*bitmap).redWidth;
		(*bitmap).height = (*bitmap).redHeight;
	} else {
		njDone();
		freeUnsignedCharArray(&(*bitmap).red);
		freeUnsignedCharArray(&(*bitmap).green);
		freeUnsignedCharArray(&(*bitmap).blue);
		return INCONSISTENT_BITMAP_ERROR;
	}

	njDoneLeaveRGBData();

	return MEMORY_OK;
}
Ejemplo n.º 4
0
    void DebugActor::render(RenderState const& parentRS)
    {
        timeMS tm = getTimeMS();

        static int fps = 0;
        ++_frames;
        if (_frames > 50)
        {
            if (tm != _startTime)
            {
                fps = int(((float)_frames / (tm - _startTime)) * 1000);
            }
            _startTime = tm;
            _frames = 0;
        }

        std::stringstream s;
        s << "fps=" << fps << std::endl;



#ifdef __S3E__
        int mem_used = -1;
        int mem_free = -1;

        mem_used = s3eMemoryGetInt(S3E_MEMORY_USED);
        mem_free = s3eMemoryGetInt(S3E_MEMORY_FREE);

        s << "mfree=" << mem_free << " mem=" << mem_used << std::endl;
#endif

        const IVideoDriver::Stats& vstats = IVideoDriver::_stats;

#ifdef OXYGINE_DEBUG_TRACE_LEAKS
        s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << std::endl;
#endif

#if OXYGINE_TRACE_VIDEO_STATS
        int primitives = 0;
        primitives += vstats.elements[IVideoDriver::PT_TRIANGLES] / 3;
        if (vstats.elements[IVideoDriver::PT_TRIANGLE_STRIP])
            primitives += vstats.elements[IVideoDriver::PT_TRIANGLE_STRIP] - 2;
        s << "batches=" << aligned(vstats.batches, 3) << " primitives=" << aligned(primitives, 3) << std::endl;
#endif

        s << "update=" << aligned(getStage()->_statUpdate, 2) << "ms ";
        s << "render=" << aligned(vstats.duration, 2) << "ms ";
        s << "textures=" << aligned(NativeTexture::created, 2) << " ";

#ifdef __APPLE__
        size_t mem;
        iosGetMemoryUsage(mem);
        s << "memory=" << mem / 1024 << "kb ";
#endif

#ifdef _WIN32
        PROCESS_MEMORY_COUNTERS_EX pmc;
        GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmc, sizeof(pmc));
        s << "memory=" << pmc.PrivateUsage / 1024 << "kb ";

#endif

        if (!_debugText.empty())
        {
            s << "\n";
            s << _debugText;
        }
        _debugText = "";

        _text->setText(s.str());


        setHeight(_text->getTextRect().size.y + _text->getY() + 3);
        _bg->setSize(getSize());


        Vector2 ds = core::getDisplaySize();

        Vector2 pos(0, 0);

        switch (_corner)
        {
            case 1:
                pos.x = ds.x;
                break;
            case 2:
                pos = ds;
                break;
            case 3:
                pos.y = ds.y;
                break;
        }

        pos = getStage()->parent2local(pos);

        Vector2 realSize = getScaledSize();
        switch (_corner)
        {
            case 1:
                pos.x -= realSize.x;
                break;
            case 2:
                pos -= realSize;
                break;
            case 3:
                pos.y -= realSize.y;
                break;
        }

        //setPosition(pos);
        setScale(1.0f / getStage()->getScaleX());

        RenderState rs = parentRS;
        parentRS.material->finish();

        STDRenderer renderer;
        STDMaterial mat(&renderer);
        mat.apply(0);


        IVideoDriver* driver = renderer.getDriver();


        Rect vp(Point(0, 0), core::getDisplaySize());
        driver->setViewport(vp);
        renderer.initCoordinateSystem(vp.getWidth(), vp.getHeight());
        renderer.resetSettings();
        rs.material = &mat;
        Actor::render(rs);
        renderer.drawBatch();

        mat.finish();

        Material::setCurrent(0);

        timeMS dur = getTimeMS() - tm;

        IVideoDriver::_stats.start += dur;
    }