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; }
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; }