@Override void clearLive(int refCount) { super.clearLive(refCount); if (images != null) { for (int j = 0; j < numFaces; j++) { for (int i = 0; i < maxLevels; i++) { images[j][i].clearLive(refCount); images[j][i].removeUser(mirror); } } } }
void evaluateExtABGR(int ext) { // If abgrSupported is false, a copy has been created so // we don't have to check again. if(!abgrSupported) { return; } if(getImageFormatType() != ImageFormatType.TYPE_BYTE_ABGR) { return; } if((ext & Canvas3D.EXT_ABGR) != 0) { return; } // ABGR is unsupported, set flag to false. abgrSupported = false; convertImageDataFromABGRToRGBA(); }
ImageData createRenderedImageDataObject(RenderedImage byRefImage) { return createRenderedImageDataObject(byRefImage, width, height); }
void evaluateExtensions(Canvas3D canvas) { // Issue 366: need to synchronize since it could be called concurrently // from multiple renderers (and maybe the renderer(s) and renderbin) synchronized (evaluateExtLock) { // For performance reason the ordering of the following 2 statements is intentional. // So that we only need to do format conversion for imageData only evaluateExtABGR(canvas.extensionsSupported); evaluateExtNonPowerOfTwo(canvas.textureExtendedFeatures); } }
if (imageData == null && !isByReference()) { return; npotWidth = getCeilPowerOf2(width); npotHeight = getCeilPowerOf2(height); } else { npotWidth = getClosestPowerOf2(width); npotHeight = getClosestPowerOf2(height); RenderedImage ri = (RenderedImage) getRefImage(0); imageData = createRenderedImageDataObject(null); copySupportedImageToImageData(ri, 0, imageData); imageDataPowerOfTwo = createRenderedImageDataObject(null, npotWidth, npotHeight); copySupportedImageToImageData(scaledImg, 0, imageDataPowerOfTwo);
copyImageByBlock((BufferedImage)ri, depthIndex, data); } else { copyImageLineByLine((BufferedImage)ri, 0, 0, 0, 0, depthIndex, data.dataWidth, data.dataHeight, data); copySupportedImageToImageData(ri, ri.getMinX(), ri.getMinY(), 0, 0, depthIndex, data.dataWidth, data.dataHeight, data);
mirrorTexture.images[face][level].removeUser(mirror); mirrorTexture.images[face][level] = (ImageComponentRetained)image.retained; mirrorTexture.images[face][level].addUser(mirror); mirrorTexture.images[face][i].removeUser(mirror); mirrorTexture.images[face][i] = (ImageComponentRetained)images[i].retained; mirrorTexture.images[face][i].addUser(mirror);
@Override void clearLive(int refCount) { super.clearLive(refCount); }
private void updateImageDataPowerOfTwo(int depthIndex) { assert enforceNonPowerOfTwoSupport; BufferedImage bufImage = imageData.createBufferedImage(depthIndex); BufferedImage scaledImg = powerOfTwoATOp.filter(bufImage, null); copySupportedImageToImageData(scaledImg, 0, imageDataPowerOfTwo); }
void copyUnsupportedImageToImageData(RenderedImage ri, int depthIndex, ImageData data) { assert (data.getType() == ImageDataType.TYPE_BYTE_ARRAY); if (MasterControl.isDevLoggable(Level.INFO)) { MasterControl.getDevLogger().info("ImageComponent - Copying Unsupported Image, use a different image type"); } if (ri instanceof BufferedImage) { copyUnsupportedImageToImageData((BufferedImage)ri, 0, 0, 0, 0, depthIndex, data.dataWidth, data.dataHeight, data); } else { copyUnsupportedImageToImageData(ri, ri.getMinX(), ri.getMinY(), 0, 0, depthIndex, data.dataWidth, data.dataHeight, data); } }
images[j][i].addUser(mirrorTexture);
void createBlankImageData() { assert (imageData == null); switch(numberOfComponents) { case 4: imageType = BufferedImage.TYPE_INT_ARGB; imageFormatType = ImageFormatType.TYPE_INT_ARGB; unitsPerPixel = 1; break; case 3: imageType = BufferedImage.TYPE_INT_RGB; imageFormatType = ImageFormatType.TYPE_INT_RGB; unitsPerPixel = 1; break; default: // Only valid for 3 and 4 channel case. ( Read back from framebuffer ) assert false; } imageTypeIsSupported = true; imageData = createRenderedImageDataObject(null); }