13.2.1-20 baseline
Former-commit-id:ad663b925c
[formerly6a55bc5dff
] [formerlyad663b925c
[formerly6a55bc5dff
] [formerly539faf0a71
[formerly 901c37ddfaeb0103160d0bbb2f1c2f623a16f73e]]] Former-commit-id:539faf0a71
Former-commit-id:b062373048
[formerly12d4316b3a
] Former-commit-id:9c51f2d15f
This commit is contained in:
parent
0ff4cc2cc4
commit
fbddfb5a25
10 changed files with 313 additions and 103 deletions
|
@ -40,6 +40,8 @@ import com.raytheon.uf.viz.core.exception.VizException;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Nov 17, 2011 mschenke Initial creation
|
* Nov 17, 2011 mschenke Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Add ColorMapData constructor that
|
||||||
|
* creates buffer from the dataType.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -81,6 +83,16 @@ public interface IColorMapDataRetrievalCallback {
|
||||||
this.dataType = dataType;
|
this.dataType = dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param dataType
|
||||||
|
* @param dataBounds
|
||||||
|
*/
|
||||||
|
public ColorMapData(ColorMapDataType dataType, int[] dimensions) {
|
||||||
|
this.buffer = getBuffer(dataType, dimensions);
|
||||||
|
this.dimensions = dimensions;
|
||||||
|
this.dataType = dataType;
|
||||||
|
}
|
||||||
|
|
||||||
public Buffer getBuffer() {
|
public Buffer getBuffer() {
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
@ -106,6 +118,30 @@ public interface IColorMapDataRetrievalCallback {
|
||||||
throw new RuntimeException("Could not find ColorMapDataType for "
|
throw new RuntimeException("Could not find ColorMapDataType for "
|
||||||
+ buffer);
|
+ buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Buffer getBuffer(ColorMapDataType dataType,
|
||||||
|
int[] dimensions) {
|
||||||
|
int size = 1;
|
||||||
|
for (int i : dimensions) {
|
||||||
|
size *= i;
|
||||||
|
}
|
||||||
|
switch (dataType) {
|
||||||
|
case BYTE:
|
||||||
|
case SIGNED_BYTE:
|
||||||
|
return ByteBuffer.allocate(size);
|
||||||
|
case SHORT:
|
||||||
|
case UNSIGNED_SHORT:
|
||||||
|
return ShortBuffer.allocate(size);
|
||||||
|
case FLOAT:
|
||||||
|
return FloatBuffer.allocate(size);
|
||||||
|
case INT:
|
||||||
|
return IntBuffer.allocate(size);
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Could not find Buffer for "
|
||||||
|
+ dataType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package com.raytheon.viz.core.gl.dataformat;
|
package com.raytheon.viz.core.gl.dataformat;
|
||||||
|
|
||||||
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData;
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData;
|
||||||
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapDataType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory class for getting GLColorMapDataFormat objects given the ColorMapData
|
* Factory class for getting GLColorMapDataFormat objects given the ColorMapData
|
||||||
|
@ -32,6 +33,8 @@ import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Nov 21, 2011 mschenke Initial creation
|
* Nov 21, 2011 mschenke Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -43,8 +46,13 @@ public class GLColorMapDataFormatFactory {
|
||||||
|
|
||||||
public static AbstractGLColorMapDataFormat getGLColorMapDataFormat(
|
public static AbstractGLColorMapDataFormat getGLColorMapDataFormat(
|
||||||
ColorMapData colorMapData) {
|
ColorMapData colorMapData) {
|
||||||
|
return getGLColorMapDataFormat(colorMapData.getDataType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AbstractGLColorMapDataFormat getGLColorMapDataFormat(
|
||||||
|
ColorMapDataType colorMapDataType) {
|
||||||
AbstractGLColorMapDataFormat dataFormat = null;
|
AbstractGLColorMapDataFormat dataFormat = null;
|
||||||
switch (colorMapData.getDataType()) {
|
switch (colorMapDataType) {
|
||||||
case BYTE: {
|
case BYTE: {
|
||||||
dataFormat = new GLByteDataFormat();
|
dataFormat = new GLByteDataFormat();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -31,6 +31,7 @@ import javax.media.opengl.GL;
|
||||||
import com.raytheon.uf.viz.core.IExtent;
|
import com.raytheon.uf.viz.core.IExtent;
|
||||||
import com.raytheon.uf.viz.core.IView;
|
import com.raytheon.uf.viz.core.IView;
|
||||||
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
||||||
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapDataType;
|
||||||
import com.raytheon.uf.viz.core.data.IRenderedImageCallback;
|
import com.raytheon.uf.viz.core.data.IRenderedImageCallback;
|
||||||
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
||||||
import com.raytheon.uf.viz.core.drawables.IImage;
|
import com.raytheon.uf.viz.core.drawables.IImage;
|
||||||
|
@ -40,6 +41,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
|
||||||
import com.raytheon.viz.core.gl.IGLTarget;
|
import com.raytheon.viz.core.gl.IGLTarget;
|
||||||
import com.raytheon.viz.core.gl.dataformat.AbstractGLColorMapDataFormat;
|
import com.raytheon.viz.core.gl.dataformat.AbstractGLColorMapDataFormat;
|
||||||
import com.raytheon.viz.core.gl.dataformat.GLByteDataFormat;
|
import com.raytheon.viz.core.gl.dataformat.GLByteDataFormat;
|
||||||
|
import com.raytheon.viz.core.gl.dataformat.GLColorMapDataFormatFactory;
|
||||||
import com.raytheon.viz.core.gl.dataformat.IGLColorMapDataFormatProvider;
|
import com.raytheon.viz.core.gl.dataformat.IGLColorMapDataFormatProvider;
|
||||||
import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
||||||
import com.raytheon.viz.core.gl.images.GLColormappedImage;
|
import com.raytheon.viz.core.gl.images.GLColormappedImage;
|
||||||
|
@ -60,6 +62,8 @@ import com.raytheon.viz.core.gl.internal.ext.GLColormappedImageExtension;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jul 10, 2012 bsteffen Initial creation
|
* Jul 10, 2012 bsteffen Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -174,51 +178,37 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension<IGLTarget>
|
||||||
}
|
}
|
||||||
|
|
||||||
public GLColormappedImage constructOffscreenImage(
|
public GLColormappedImage constructOffscreenImage(
|
||||||
Class<? extends Buffer> dataType, int[] dimensions)
|
ColorMapDataType dataType, int[] dimensions) throws VizException {
|
||||||
throws VizException {
|
|
||||||
return constructOffscreenImage(dataType, dimensions, null);
|
return constructOffscreenImage(dataType, dimensions, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GLColormappedImage constructOffscreenImage(
|
public GLColormappedImage constructOffscreenImage(
|
||||||
Class<? extends Buffer> dataType, final int[] dimensions,
|
final ColorMapDataType dataType, final int[] dimensions,
|
||||||
ColorMapParameters parameters) throws VizException {
|
ColorMapParameters parameters) throws VizException {
|
||||||
int width = dimensions[0];
|
GLColormappedImageExtension cmapExt = target
|
||||||
int height = dimensions[1];
|
.getExtension(GLColormappedImageExtension.class);
|
||||||
// Need to add support for multiple buffer types
|
if (!supportsLuminance) {
|
||||||
Buffer imageBuffer = null;
|
return cmapExt.initializeRaster(new NoLuminanceDataCallback(
|
||||||
if (dataType.isAssignableFrom(ByteBuffer.class)) {
|
dimensions, dataType), parameters);
|
||||||
int pixels = 3;
|
} else {
|
||||||
if (supportsLuminance) {
|
GLColormappedImage image = cmapExt.initializeRaster(
|
||||||
pixels = 1;
|
new IColorMapDataRetrievalCallback() {
|
||||||
}
|
|
||||||
byte[] buf = new byte[width * height * pixels];
|
|
||||||
imageBuffer = ByteBuffer.wrap(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (imageBuffer != null) {
|
@Override
|
||||||
GLColormappedImage image = null;
|
public ColorMapData getColorMapData()
|
||||||
final Buffer buffer = imageBuffer;
|
throws VizException {
|
||||||
GLColormappedImageExtension cmapExt = target
|
return new ColorMapData(dataType, dimensions);
|
||||||
.getExtension(GLColormappedImageExtension.class);
|
}
|
||||||
if (supportsLuminance) {
|
}, parameters);
|
||||||
image = cmapExt.initializeRaster(
|
|
||||||
new IColorMapDataRetrievalCallback() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ColorMapData getColorMapData()
|
|
||||||
throws VizException {
|
|
||||||
return new ColorMapData(buffer, dimensions);
|
|
||||||
}
|
|
||||||
}, parameters);
|
|
||||||
} else {
|
|
||||||
image = cmapExt.initializeRaster(new GLOffscreenDataCallback(
|
|
||||||
buffer, dimensions), parameters);
|
|
||||||
}
|
|
||||||
if (!checkedLuminance) {
|
if (!checkedLuminance) {
|
||||||
checkedLuminance = true;
|
checkedLuminance = true;
|
||||||
try {
|
try {
|
||||||
renderOffscreen(image);
|
renderOffscreen(image);
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
|
// Log this so it is easy to see in the console logs.
|
||||||
|
new VizException(
|
||||||
|
"Graphics card does not support luminance textures.",
|
||||||
|
e).printStackTrace(System.out);
|
||||||
// assume we don't support luminance
|
// assume we don't support luminance
|
||||||
supportsLuminance = false;
|
supportsLuminance = false;
|
||||||
// Reconstruct image
|
// Reconstruct image
|
||||||
|
@ -229,84 +219,76 @@ public class GLOffscreenRenderingExtension extends GraphicsExtension<IGLTarget>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return image;
|
return image;
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class GLOffscreenDataCallback implements
|
private static final class NoLuminanceDataFormat extends GLByteDataFormat {
|
||||||
IColorMapDataRetrievalCallback, IGLColorMapDataFormatProvider {
|
|
||||||
|
|
||||||
private Buffer dataBuffer;
|
// Used to get the original min/max which makes signed bytes work and
|
||||||
|
// theoretically will give better looking results for other integer data
|
||||||
|
// types.
|
||||||
|
private final ColorMapDataType originalType;
|
||||||
|
|
||||||
|
private NoLuminanceDataFormat(ColorMapDataType originalType) {
|
||||||
|
this.originalType = originalType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTextureInternalFormat() {
|
||||||
|
return GL.GL_RGB8;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTextureFormat() {
|
||||||
|
return GL.GL_RGB;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getValuesPerPixel() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getDataFormatMin() {
|
||||||
|
return getOriginalGLColorMapDataFormat().getDataFormatMin();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getDataFormatMax() {
|
||||||
|
return getOriginalGLColorMapDataFormat().getDataFormatMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
private AbstractGLColorMapDataFormat getOriginalGLColorMapDataFormat() {
|
||||||
|
return GLColorMapDataFormatFactory
|
||||||
|
.getGLColorMapDataFormat(originalType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class NoLuminanceDataCallback implements
|
||||||
|
IColorMapDataRetrievalCallback, IGLColorMapDataFormatProvider {
|
||||||
|
|
||||||
private int[] dimensions;
|
private int[] dimensions;
|
||||||
|
|
||||||
private GLOffscreenDataCallback(Buffer dataBuffer, int[] dimensions) {
|
private final ColorMapDataType originalType;
|
||||||
this.dataBuffer = dataBuffer;
|
|
||||||
|
private NoLuminanceDataCallback(int[] dimensions,
|
||||||
|
ColorMapDataType type) {
|
||||||
this.dimensions = dimensions;
|
this.dimensions = dimensions;
|
||||||
|
this.originalType = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* com.raytheon.viz.core.gl.dataprep.IGLColorMapDataRetrievalCallback
|
|
||||||
* #getGLColorMapData
|
|
||||||
* (com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback
|
|
||||||
* .ColorMapData)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractGLColorMapDataFormat getGLColorMapDataFormat(
|
public AbstractGLColorMapDataFormat getGLColorMapDataFormat(
|
||||||
ColorMapData colorMapData) {
|
ColorMapData colorMapData) {
|
||||||
return new GLByteDataFormat() {
|
return new NoLuminanceDataFormat(originalType);
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see com.raytheon.viz.core.gl.dataprep.GLByteDataFormat#
|
|
||||||
* getTextureInternalFormat()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getTextureInternalFormat() {
|
|
||||||
return GL.GL_RGB8;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* com.raytheon.viz.core.gl.dataprep.AbstractGLColorMapDataFormat
|
|
||||||
* #getTextureFormat()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getTextureFormat() {
|
|
||||||
return GL.GL_RGB;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* com.raytheon.viz.core.gl.dataprep.AbstractGLColorMapDataFormat
|
|
||||||
* #getPointsPerPixel()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getValuesPerPixel() {
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback#
|
|
||||||
* getColorMapData()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ColorMapData getColorMapData() throws VizException {
|
public ColorMapData getColorMapData() throws VizException {
|
||||||
return new ColorMapData(dataBuffer, dimensions);
|
Buffer buffer = ByteBuffer.allocate(dimensions[0] * dimensions[1]
|
||||||
|
* 3);
|
||||||
|
return new ColorMapData(buffer, dimensions, originalType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import javax.media.opengl.glu.GLU;
|
||||||
|
|
||||||
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
||||||
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData;
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapData;
|
||||||
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapDataType;
|
||||||
import com.raytheon.uf.viz.core.exception.VizException;
|
import com.raytheon.uf.viz.core.exception.VizException;
|
||||||
import com.raytheon.viz.core.gl.GLContextBridge;
|
import com.raytheon.viz.core.gl.GLContextBridge;
|
||||||
import com.raytheon.viz.core.gl.dataformat.GLColorMapData;
|
import com.raytheon.viz.core.gl.dataformat.GLColorMapData;
|
||||||
|
@ -49,6 +50,8 @@ import com.raytheon.viz.core.gl.objects.GLTextureObject;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Aug 2, 2011 bsteffen Initial creation
|
* Aug 2, 2011 bsteffen Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -271,4 +274,8 @@ public class GLCMTextureData implements IImageCacheable {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ColorMapDataType getColorMapDataType() {
|
||||||
|
return data.getDataType();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ package com.raytheon.viz.core.gl.images;
|
||||||
import javax.media.opengl.GL;
|
import javax.media.opengl.GL;
|
||||||
|
|
||||||
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback;
|
||||||
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapDataType;
|
||||||
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
||||||
import com.raytheon.uf.viz.core.drawables.IColormappedImage;
|
import com.raytheon.uf.viz.core.drawables.IColormappedImage;
|
||||||
import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension;
|
import com.raytheon.uf.viz.core.drawables.ext.IImagingExtension;
|
||||||
|
@ -39,6 +40,8 @@ import com.sun.opengl.util.texture.TextureCoords;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Jul 27, 2009 mschenke Initial creation
|
* Jul 27, 2009 mschenke Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -109,6 +112,10 @@ public class GLColormappedImage extends AbstractGLImage implements
|
||||||
return data.getTextureType();
|
return data.getTextureType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ColorMapDataType getColorMapDataType() {
|
||||||
|
return data.getColorMapDataType();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the texture's format
|
* Return the texture's format
|
||||||
*
|
*
|
||||||
|
|
|
@ -38,6 +38,8 @@ import com.raytheon.viz.core.gl.images.GLDelegateImage;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Dec 16, 2011 mschenke Initial creation
|
* Dec 16, 2011 mschenke Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -165,4 +167,9 @@ public class GLMosaicImage extends GLDelegateImage<GLColormappedImage>
|
||||||
return image.getValue(x, y);
|
return image.getValue(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setWrappedImage(GLColormappedImage wrappedImage) {
|
||||||
|
this.image.dispose();
|
||||||
|
this.image = wrappedImage;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,15 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.viz.core.gl.internal.ext.mosaic;
|
package com.raytheon.viz.core.gl.internal.ext.mosaic;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
|
|
||||||
import javax.media.opengl.GL;
|
import javax.media.opengl.GL;
|
||||||
|
|
||||||
import com.raytheon.uf.viz.core.DrawableImage;
|
import com.raytheon.uf.viz.core.DrawableImage;
|
||||||
import com.raytheon.uf.viz.core.IExtent;
|
import com.raytheon.uf.viz.core.IExtent;
|
||||||
import com.raytheon.uf.viz.core.PixelCoverage;
|
import com.raytheon.uf.viz.core.PixelCoverage;
|
||||||
|
import com.raytheon.uf.viz.core.data.IColorMapDataRetrievalCallback.ColorMapDataType;
|
||||||
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
import com.raytheon.uf.viz.core.drawables.ColorMapParameters;
|
||||||
import com.raytheon.uf.viz.core.drawables.IImage;
|
import com.raytheon.uf.viz.core.drawables.IImage;
|
||||||
|
import com.raytheon.uf.viz.core.drawables.IImage.Status;
|
||||||
import com.raytheon.uf.viz.core.drawables.ImagingSupport;
|
import com.raytheon.uf.viz.core.drawables.ImagingSupport;
|
||||||
import com.raytheon.uf.viz.core.drawables.PaintProperties;
|
import com.raytheon.uf.viz.core.drawables.PaintProperties;
|
||||||
import com.raytheon.uf.viz.core.drawables.ext.IMosaicImageExtension;
|
import com.raytheon.uf.viz.core.drawables.ext.IMosaicImageExtension;
|
||||||
|
@ -36,6 +36,7 @@ import com.raytheon.viz.core.gl.ext.GLOffscreenRenderingExtension;
|
||||||
import com.raytheon.viz.core.gl.glsl.AbstractGLSLImagingExtension;
|
import com.raytheon.viz.core.gl.glsl.AbstractGLSLImagingExtension;
|
||||||
import com.raytheon.viz.core.gl.glsl.GLShaderProgram;
|
import com.raytheon.viz.core.gl.glsl.GLShaderProgram;
|
||||||
import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
||||||
|
import com.raytheon.viz.core.gl.images.GLColormappedImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extension used for rendering radar mosaic images
|
* Extension used for rendering radar mosaic images
|
||||||
|
@ -47,6 +48,8 @@ import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Dec 16, 2011 mschenke Initial creation
|
* Dec 16, 2011 mschenke Initial creation
|
||||||
|
* Mar 21, 2013 1806 bsteffen Update GL mosaicing to use dynamic data
|
||||||
|
* format for offscreen textures.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -57,13 +60,14 @@ import com.raytheon.viz.core.gl.images.AbstractGLImage;
|
||||||
public class GLMosaicImageExtension extends AbstractGLSLImagingExtension
|
public class GLMosaicImageExtension extends AbstractGLSLImagingExtension
|
||||||
implements IMosaicImageExtension {
|
implements IMosaicImageExtension {
|
||||||
|
|
||||||
private AbstractGLImage writeToImage;
|
private GLColormappedImage writeToImage;
|
||||||
|
|
||||||
public GLMosaicImage initializeRaster(int[] imageBounds,
|
public GLMosaicImage initializeRaster(int[] imageBounds,
|
||||||
IExtent imageExtent, ColorMapParameters params) throws VizException {
|
IExtent imageExtent, ColorMapParameters params) throws VizException {
|
||||||
|
// Since byte is the most common type of mosaic start with a byte image. It might switch later if needed.
|
||||||
return new GLMosaicImage(target.getExtension(
|
return new GLMosaicImage(target.getExtension(
|
||||||
GLOffscreenRenderingExtension.class).constructOffscreenImage(
|
GLOffscreenRenderingExtension.class).constructOffscreenImage(
|
||||||
ByteBuffer.class, imageBounds, params), imageBounds,
|
ColorMapDataType.BYTE, imageBounds, params), imageBounds,
|
||||||
imageExtent, this.getClass());
|
imageExtent, this.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +97,7 @@ public class GLMosaicImageExtension extends AbstractGLSLImagingExtension
|
||||||
if (image instanceof GLMosaicImage) {
|
if (image instanceof GLMosaicImage) {
|
||||||
GLMosaicImage mosaicImage = (GLMosaicImage) image;
|
GLMosaicImage mosaicImage = (GLMosaicImage) image;
|
||||||
if (mosaicImage.isRepaint()) {
|
if (mosaicImage.isRepaint()) {
|
||||||
writeToImage = mosaicImage.getWrappedImage();
|
writeToImage = getWriteToImage(mosaicImage);
|
||||||
GLOffscreenRenderingExtension extension = target
|
GLOffscreenRenderingExtension extension = target
|
||||||
.getExtension(GLOffscreenRenderingExtension.class);
|
.getExtension(GLOffscreenRenderingExtension.class);
|
||||||
try {
|
try {
|
||||||
|
@ -134,6 +138,38 @@ public class GLMosaicImageExtension extends AbstractGLSLImagingExtension
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GLColormappedImage getWriteToImage(GLMosaicImage mosaicImage)
|
||||||
|
throws VizException {
|
||||||
|
ColorMapDataType neededType = null;
|
||||||
|
for (DrawableImage di : mosaicImage.getImagesToMosaic()) {
|
||||||
|
IImage image = di.getImage();
|
||||||
|
if (image.getStatus() != Status.LOADED) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (image instanceof GLColormappedImage) {
|
||||||
|
GLColormappedImage colorMapImage = (GLColormappedImage) image;
|
||||||
|
ColorMapDataType type = colorMapImage.getColorMapDataType();
|
||||||
|
if (neededType == null) {
|
||||||
|
neededType = type;
|
||||||
|
} else if (neededType != type) {
|
||||||
|
// Mosaicing images of different types?
|
||||||
|
// No Idea how to handle this
|
||||||
|
return mosaicImage.getWrappedImage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GLColormappedImage writeTo = mosaicImage.getWrappedImage();
|
||||||
|
if (neededType != null && neededType != writeTo.getColorMapDataType()) {
|
||||||
|
GLOffscreenRenderingExtension offscreenExt = target
|
||||||
|
.getExtension(GLOffscreenRenderingExtension.class);
|
||||||
|
int[] dimensions = { writeTo.getWidth(), writeTo.getHeight() };
|
||||||
|
writeTo = offscreenExt.constructOffscreenImage(neededType,
|
||||||
|
dimensions, writeTo.getColorMapParameters());
|
||||||
|
mosaicImage.setWrappedImage(writeTo);
|
||||||
|
}
|
||||||
|
return writeTo;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
|
|
@ -94,8 +94,8 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||||
* ?? ?? Initial Creation
|
* ?? ?? Initial Creation
|
||||||
* 1-3-2013 DR 15667 M.Porricelli Made EnvironParamsLevelTable.xml
|
* 1-3-2013 DR 15667 M.Porricelli Made EnvironParamsLevelTable.xml
|
||||||
* accessible from SITE level
|
* accessible from SITE level
|
||||||
* 03/21/2013 DR 15872 D. Friedman Correct clipped grid coordinates. (From DR 14770.)
|
* 04/02/2013 DR 15872 D. Friedman Correct clipped grid coordinates. (From DR 14770.)
|
||||||
* Correct grid orientation.
|
* Correct grid orientation. Ensure square grid.
|
||||||
**/
|
**/
|
||||||
public class RPGEnvironmentalDataManager {
|
public class RPGEnvironmentalDataManager {
|
||||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
|
@ -119,6 +119,8 @@ public class RPGEnvironmentalDataManager {
|
||||||
|
|
||||||
private boolean compressionEnabled = true;
|
private boolean compressionEnabled = true;
|
||||||
|
|
||||||
|
private boolean squareGrid = true;
|
||||||
|
|
||||||
public RPGEnvironmentalDataManager() {
|
public RPGEnvironmentalDataManager() {
|
||||||
try {
|
try {
|
||||||
initialize();
|
initialize();
|
||||||
|
@ -599,6 +601,43 @@ public class RPGEnvironmentalDataManager {
|
||||||
i2 = (int) Math.round(c.x);
|
i2 = (int) Math.round(c.x);
|
||||||
j2 = maxY - (int) Math.round(c.y);
|
j2 = maxY - (int) Math.round(c.y);
|
||||||
|
|
||||||
|
if (squareGrid) {
|
||||||
|
/*
|
||||||
|
* ORPG may have a problem with non-square grids. This will be
|
||||||
|
* fixed in a later release of the ORPG software. For now,
|
||||||
|
* ensure the output is square.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to expand one edge if needed so as to not go out of
|
||||||
|
* bounds. If that fails, try shrinking one edge.
|
||||||
|
*/
|
||||||
|
int outputSpan = Math.max(i2 - i1, j2 - j1);
|
||||||
|
boolean solved = false;
|
||||||
|
for (int nTries = 0; !solved && nTries < 2; ++nTries) {
|
||||||
|
solved = false;
|
||||||
|
if (i2 - i1 != outputSpan) {
|
||||||
|
if (i1 + outputSpan <= ge.getHigh(0)) {
|
||||||
|
i2 = i1 + outputSpan;
|
||||||
|
solved = true;
|
||||||
|
} else if (i2 - outputSpan >= ge.getLow(0)) {
|
||||||
|
i1 = i2 - outputSpan;
|
||||||
|
solved = true;
|
||||||
|
}
|
||||||
|
} else if (j2 - j1 != outputSpan) {
|
||||||
|
if (j1 + outputSpan <= ge.getHigh(1)) {
|
||||||
|
j2 = j1 + outputSpan;
|
||||||
|
solved = true;
|
||||||
|
} else if (j2 - outputSpan >= ge.getLow(1)) {
|
||||||
|
j1 = j2 - outputSpan;
|
||||||
|
solved = true;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
solved = true;
|
||||||
|
outputSpan = Math.min(i2 - i1, j2 - j1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (i1 < ge.getLow(0) || i2 > ge.getHigh(0) || j1 < ge.getLow(1)
|
if (i1 < ge.getLow(0) || i2 > ge.getHigh(0) || j1 < ge.getLow(1)
|
||||||
|| j2 > ge.getHigh(1)) {
|
|| j2 > ge.getHigh(1)) {
|
||||||
throw new GeoInfoException(
|
throw new GeoInfoException(
|
||||||
|
@ -1134,6 +1173,14 @@ public class RPGEnvironmentalDataManager {
|
||||||
this.compressionEnabled = compressionEnabled;
|
this.compressionEnabled = compressionEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSquareGrid() {
|
||||||
|
return squareGrid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSquareGrid(boolean squareGrid) {
|
||||||
|
this.squareGrid = squareGrid;
|
||||||
|
}
|
||||||
|
|
||||||
public String getMessages() {
|
public String getMessages() {
|
||||||
return logMessages.toString();
|
return logMessages.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
This_software_was_developed_and_/_or_modified_by_Raytheon_Company,
|
||||||
|
pursuant_to_Contract_DG133W-05-CQ-1067_with_the_US_Government.
|
||||||
|
|
||||||
|
U.S._EXPORT_CONTROLLED_TECHNICAL_DATA
|
||||||
|
This_software_product_contains_export-restricted_data_whose
|
||||||
|
export/transfer/disclosure_is_restricted_by_U.S._law._Dissemination
|
||||||
|
to_non-U.S._persons_whether_in_the_United_States_or_abroad_requires
|
||||||
|
an_export_license_or_other_authorization.
|
||||||
|
|
||||||
|
Contractor_Name:________Raytheon_Company
|
||||||
|
Contractor_Address:_____6825_Pine_Street,_Suite_340
|
||||||
|
________________________Mail_Stop_B8
|
||||||
|
________________________Omaha,_NE_68106
|
||||||
|
________________________402.291.0100
|
||||||
|
|
||||||
|
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
|
||||||
|
further_licensing_information.
|
||||||
|
-->
|
||||||
|
<!-- To send the RUC40 model to the RPG, copy this file to
|
||||||
|
/awips2/edex/data/utility/edex_static/site/{SITE-ID}/rpgenvdata/EnvironParamsLevelTable.xml
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
<model name="RUC236" description="RUC 40km" />
|
||||||
|
|
||||||
|
<!-- <inventoryHint levelType="MB" nLevels="36" /> -->
|
||||||
|
<inventoryHint levelType="SFC" nLevels="1" />
|
||||||
|
<timeStepHint>3600</timeStepHint>
|
||||||
|
|
||||||
|
<clipRadius value="400" units="km" />
|
||||||
|
<!-- EDEX unit is actually "gpm" -->
|
||||||
|
<field name="GH" units="m" description="Geopotential Height">
|
||||||
|
<level name="MB" description="Pressure Level" units="mb"
|
||||||
|
levels="1000 950 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100" />
|
||||||
|
</field>
|
||||||
|
<field name="RH" units="%" description="Relative Humidity">
|
||||||
|
<level name="MB" description="Pressure Level" units="mb"
|
||||||
|
levels="1000 950 900 850 800 750 700 650 600 550 500 450 400 350 300" />
|
||||||
|
</field>
|
||||||
|
<field name="T" units="K" description="Temperature">
|
||||||
|
<level name="MB" description="Pressure Level" units="mb"
|
||||||
|
levels="1000 950 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100" />
|
||||||
|
</field>
|
||||||
|
<field name="uW" description="U Wind Component" units="m/s">
|
||||||
|
<level name="MB" description="Pressure Level" units="mb"
|
||||||
|
levels="1000 950 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100" />
|
||||||
|
</field>
|
||||||
|
<field name="vW" description="V Wind Component" units="m/s">
|
||||||
|
<level name="MB" description="Pressure Level" units="mb"
|
||||||
|
levels="1000 950 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100" />
|
||||||
|
</field>
|
||||||
|
<field name="P" units="Pa" description="Pressure">
|
||||||
|
<level name="SFC" description="Surface Level" units="" />
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<parameter id="mod_name" name="Model Name" type="string" />
|
||||||
|
<parameter id="mod_run_date" name="Model Run Date" type="string" />
|
||||||
|
<parameter id="mod_run_time" name="Model Run Time" type="string" />
|
||||||
|
<parameter id="val_date" name="Valid Date" type="string" />
|
||||||
|
<parameter id="val_time" name="Valid Time" type="string" />
|
||||||
|
<parameter id="forecast_hr" name="Forecast Hour" type="int" />
|
||||||
|
<parameter id="coord_system" name="Coordinate System" type="string" value="Cartesian"/>
|
||||||
|
<parameter id="proj" name="Projection" type="string" />
|
||||||
|
<parameter id="lat_lower_left" name="Latitude Lower Left Corner" units="degrees" type="float" />
|
||||||
|
<parameter id="lon_lower_left" name="Longitude Lower Left Corner" units="degrees" type="float" />
|
||||||
|
<parameter id="lat_upper_right" name="Latitude Upper Right Corner" units="degrees" type="float" />
|
||||||
|
<parameter id="lon_upper_right" name="Longitude Upper Right Corner" units="degrees" type="float" />
|
||||||
|
<parameter id="lat_tang_pt" name="Latitude of Tangent point" units="degrees" type="float" />
|
||||||
|
<parameter id="lon_tang_pt" name="Longitude of Tangent point" units="degrees" type="float" />
|
||||||
|
<parameter id="numXpts" name="Number of points in X direction" type="int" />
|
||||||
|
<parameter id="numYpts" name="Number of points in Y direction" type="int" />
|
||||||
|
</configuration>
|
|
@ -316,6 +316,13 @@ if [ "${1}" = "-ade" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Build the source jar file
|
||||||
|
ade_work_dir="/home/dmsys/Dim12/build/AWIPS2/AWIPS2-ADE-OB13.2.1-CM"
|
||||||
|
cd $ade_work_dir
|
||||||
|
./build_source_jar.sh
|
||||||
|
cp -v /tmp/awips-component/tmp/awips2-ade-baseline-SOURCES.jar ${WORKSPACE}/${ade_directory}
|
||||||
|
|
||||||
|
|
||||||
# Tar the directory.
|
# Tar the directory.
|
||||||
pushd . > /dev/null 2>&1
|
pushd . > /dev/null 2>&1
|
||||||
cd ${WORKSPACE}
|
cd ${WORKSPACE}
|
||||||
|
|
Loading…
Add table
Reference in a new issue