void TestTransferFunctionColorWidget::initWithTestData() { vtkImageDataPtr dummyImageData = cx::Image::createDummyImageData(2, 1); cx::ImagePtr dummyImage(new cx::Image("DummyImage", dummyImageData)); cx::ImageTFDataPtr transferFunction; transferFunction = dummyImage->getTransferFunctions3D(); this->setData(dummyImage, transferFunction); }
StelQGLTextureBackend* StelQGLTextureBackend::fromViewport (StelQGLRenderer* renderer, const QSize viewportSize, const QGLFormat& viewportFormat) { // This function should only be used as a fallback for when FBOs aren't supported. const int r = viewportFormat.redBufferSize(); const int g = viewportFormat.greenBufferSize(); const int b = viewportFormat.blueBufferSize(); const int a = viewportFormat.alpha() ? viewportFormat.alphaBufferSize() : 0; // Creating a texture from a dummy image. QImage dummyImage(64, 64, QImage::Format_Mono); const TextureParams params = TextureParams(); StelQGLTextureBackend* result = new StelQGLTextureBackend(renderer, QString(), params); // Get image and GL pixel format matching viewport format. int glFormat; if(r == 8 && g == 8 && b == 8 && a == 8) { glFormat = GL_RGBA8; result->pixelBytes = 4.0f; } else if(r == 8 && g == 8 && b == 8 && a == 0) { glFormat = GL_RGB8; result->pixelBytes = 3.0f; } else if(r == 5 && g == 6 && b == 5 && a == 0) { glFormat = GL_RGB5; result->pixelBytes = 2.0f; } else { // This is extremely unlikely, but we can't rule it out. Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown screen vertex format when getting texture from viewport. " "Switching to OpenGL2, disabling viewport effects or " "chaning video mode bit depth might help"); // Invalid value to avoid warnings. glFormat = -1; } QGLContext* context = result->prepareContextForLoading(); const GLuint glTextureID = context->bindTexture(dummyImage, GL_TEXTURE_2D, glFormat, getTextureBindOptions(params)); // Need a power-of-two texture (as this is used mainly with GL1) const QSize size = StelUtils::smallestPowerOfTwoSizeGreaterOrEqualTo(viewportSize); // Set viewport so it matches the size of the texture glViewport(0, 0, size.width(), size.height()); // Copy viewport to texture (this overrides texture size - we must use POT for GL1) glCopyTexImage2D(GL_TEXTURE_2D, 0, glFormat, 0, 0, size.width(), size.height(), 0); // Restore viewport glViewport(0, 0, viewportSize.width(), viewportSize.height()); // Will need change if different screen bit depths are ever supported renderer->getStatistics()[ESTIMATED_TEXTURE_MEMORY] += size.width() * size.height() * result->pixelBytes; result->startedLoading(); result->glTextureID = glTextureID; result->finishedLoading(size); return result; }