bool ImageViewport::loadImage(unsigned int *buffer, unsigned int size, unsigned int format, double ts)
{
	unsigned int *tmp_image;
	bool ret;

	// if scale was changed
	if (m_scaleChange) {
		// reset image
		init(m_capSize[0], m_capSize[1]);
	}

	// size must be identical
	if (size < getBuffSize())
		return false;

	if (m_avail) {
		// just copy
		return ImageBase::loadImage(buffer, size, format, ts);
	}
	else {
		tmp_image = m_image;
		m_image = buffer;
		calcViewport(0, ts, format);
		ret = m_avail;
		m_image = tmp_image;
		// since the image was not loaded to our buffer, it's not valid
		m_avail = false;
	}
	return ret;
}
Esempio n. 2
0
bool ImageBase::loadImage(unsigned int *buffer, unsigned int size, unsigned int format, double ts)
{
	unsigned int *d, *s, v, len;
	if (getImage(0, ts) != NULL && size >= getBuffSize()) {
		switch (format) {
		case GL_RGBA:
			memcpy(buffer, m_image, getBuffSize());
			break;
		case GL_BGRA:
			len = (unsigned int)m_size[0] * m_size[1];
			for (s=m_image, d=buffer; len; len--) {
				v = *s++;
				*d++ = VT_SWAPBR(v);
			}
			break;
		default:
			THRWEXCP(InvalidImageMode,S_OK);
		}
		return true;
	}
	return false;
}