BOOL CWizKMDatabaseServer::data_upload(const QString& strObjectGUID, const QString& strObjectType, const QByteArray& stream, const QString& strObjMD5, const QString& strDisplayName) { __int64 nStreamSize = stream.size(); if (0 == nStreamSize) { TOLOG(_T("fault error: stream is zero")); return FALSE; } // QString strMD5(strObjMD5); // QByteArray spPartStream; // int partSize = 500 * 1000; int partCount = int(nStreamSize / partSize); if (nStreamSize % partSize != 0) { partCount++; } // for (int i = 0; i < partCount; i++) { spPartStream.clear(); int start = i * partSize; int end = std::min<int>(start + partSize, int(nStreamSize)); ATLASSERT(end > start); // int curPartSize = end - start; ATLASSERT(curPartSize <= partSize); // const char* begin = stream.data() + start; spPartStream = spPartStream.fromRawData(begin, curPartSize); // int curPartStreamSize = (int)spPartStream.size(); ATLASSERT(curPartStreamSize == curPartSize); // if (!data_upload(strObjectGUID, strObjectType, strMD5, (int)nStreamSize, partCount, i, curPartSize, spPartStream)) { TOLOG1(_T("Failed to upload part data: %1"), strDisplayName); return FALSE; } } // // return TRUE; }
int PointCloud2Renderer::fillPointList(Renderable & renderable, std::vector<SbVec3f> &points, std::vector<SbColor> &colors) { const PointCloud2 & pc(renderable.pointcloud2()); int pointNum = pc.height()*pc.width(); points.reserve(pointNum); colors.reserve(pointNum); QByteArray dataArray; char * rawData = const_cast<char *>(pc.data().c_str()); for(int i = 0; i < pointNum; ++i) { dataArray.fromRawData(rawData,4); float x = *reinterpret_cast<float *> (rawData); rawData += 4; float y = *reinterpret_cast<float *> (rawData); rawData += 4; float z = *reinterpret_cast<float *> (rawData); rawData += 8; float blue = *reinterpret_cast<unsigned char *>(rawData)/255.0; rawData += 1; float green = *reinterpret_cast<unsigned char *>(rawData)/255.0; rawData += 1; float red = *reinterpret_cast<unsigned char *>(rawData)/255.0; rawData += 14; if(!std::isnan(x)) { points.push_back(SbVec3f(x, y, z)); colors.push_back(SbColor(red, green, blue)); } } return pointNum; }
void KisTextureTile::update(const KisTextureTileUpdateInfo &updateInfo) { glBindTexture(GL_TEXTURE_2D, m_textureId); setTextureParameters(); const GLvoid *fd = updateInfo.data(); #ifdef USE_PIXEL_BUFFERS KisConfig cfg; if (!m_glBuffer) { QByteArray ba; ba.fromRawData((const char*)updateInfo.data(), updateInfo.patchPixelsLength()); createTextureBuffer(ba); } #endif if (updateInfo.isEntireTileUpdated()) { #ifdef USE_PIXEL_BUFFERS if (cfg.useOpenGLTextureBuffer()) { m_glBuffer->bind(); m_glBuffer->allocate(updateInfo.patchPixelsLength()); void *vid = m_glBuffer->map(QGLBuffer::WriteOnly); memcpy(vid, fd, updateInfo.patchPixelsLength()); m_glBuffer->unmap(); // we set fill data to 0 so the next glTexImage2D call uses our buffer fd = 0; } #endif glTexImage2D(GL_TEXTURE_2D, 0, m_texturesInfo->internalFormat, m_texturesInfo->width, m_texturesInfo->height, 0, m_texturesInfo->format, m_texturesInfo->type, fd); #ifdef USE_PIXEL_BUFFERS if (cfg.useOpenGLTextureBuffer()) { m_glBuffer->release(); } #endif } else { QPoint patchOffset = updateInfo.patchOffset(); QSize patchSize = updateInfo.patchSize(); #ifdef USE_PIXEL_BUFFERS if (cfg.useOpenGLTextureBuffer()) { m_glBuffer->bind(); quint32 size = patchSize.width() * patchSize.height() * updateInfo.pixelSize(); m_glBuffer->allocate(size); void *vid = m_glBuffer->map(QGLBuffer::WriteOnly); memcpy(vid, fd, size); m_glBuffer->unmap(); // we set fill data to 0 so the next glTexImage2D call uses our buffer fd = 0; } #endif glTexSubImage2D(GL_TEXTURE_2D, 0, patchOffset.x(), patchOffset.y(), patchSize.width(), patchSize.height(), m_texturesInfo->format, m_texturesInfo->type, fd); #ifdef USE_PIXEL_BUFFERS if (cfg.useOpenGLTextureBuffer()) { m_glBuffer->release(); } #endif } /** * On the boundaries of KisImage, there is a border-effect as well. * So we just repeat the bounding pixels of the image to make * bilinear interpolator happy. */ /** * WARN: The width of the stripes will be equal to the broder * width of the tiles. */ const int pixelSize = updateInfo.pixelSize(); const QRect imageRect = updateInfo.imageRect(); const QPoint patchOffset = updateInfo.patchOffset(); const QSize patchSize = updateInfo.patchSize(); const QRect patchRect = QRect(m_textureRectInImagePixels.topLeft() + patchOffset, patchSize); const QSize tileSize = updateInfo.tileRect().size(); if(imageRect.top() == patchRect.top()) { int start = 0; int end = patchOffset.y() - 1; for (int i = start; i <= end; i++) { glTexSubImage2D(GL_TEXTURE_2D, 0, patchOffset.x(), i, patchSize.width(), 1, m_texturesInfo->format, m_texturesInfo->type, updateInfo.data()); } } if (imageRect.bottom() == patchRect.bottom()) { int shift = patchSize.width() * (patchSize.height() - 1) * pixelSize; int start = patchOffset.y() + patchSize.height(); int end = tileSize.height() - 1; for (int i = start; i < end; i++) { glTexSubImage2D(GL_TEXTURE_2D, 0, patchOffset.x(), i, patchSize.width(), 1, m_texturesInfo->format, m_texturesInfo->type, updateInfo.data() + shift); } } if (imageRect.left() == patchRect.left()) { QByteArray columnBuffer(patchSize.height() * pixelSize, 0); quint8 *srcPtr = updateInfo.data(); quint8 *dstPtr = (quint8*) columnBuffer.data(); for(int i = 0; i < patchSize.height(); i++) { memcpy(dstPtr, srcPtr, pixelSize); srcPtr += patchSize.width() * pixelSize; dstPtr += pixelSize; } int start = 0; int end = patchOffset.x() - 1; for (int i = start; i <= end; i++) { glTexSubImage2D(GL_TEXTURE_2D, 0, i, patchOffset.y(), 1, patchSize.height(), m_texturesInfo->format, m_texturesInfo->type, columnBuffer.constData()); } } if (imageRect.right() == patchRect.right()) { QByteArray columnBuffer(patchSize.height() * pixelSize, 0); quint8 *srcPtr = updateInfo.data() + (patchSize.width() - 1) * pixelSize; quint8 *dstPtr = (quint8*) columnBuffer.data(); for(int i = 0; i < patchSize.height(); i++) { memcpy(dstPtr, srcPtr, pixelSize); srcPtr += patchSize.width() * pixelSize; dstPtr += pixelSize; } int start = patchOffset.x() + patchSize.width(); int end = tileSize.width() - 1; for (int i = start; i <= end; i++) { glTexSubImage2D(GL_TEXTURE_2D, 0, i, patchOffset.y(), 1, patchSize.height(), m_texturesInfo->format, m_texturesInfo->type, columnBuffer.constData()); } } setNeedsMipmapRegeneration(); }