28package com.jogamp.opengl.util.texture;
30import java.io.IOException;
31import java.net.URLConnection;
32import java.util.ArrayList;
35import com.jogamp.opengl.GL;
36import com.jogamp.opengl.GLException;
37import com.jogamp.opengl.GLProfile;
39import com.jogamp.common.util.IOUtil;
40import com.jogamp.math.Vec4f;
49 private final int textureUnit;
50 private final boolean useBuildInTexLookup;
52 private final int[] texMinMagFilter = { GL.GL_NEAREST, GL.GL_NEAREST };
53 private final int[] texWrapST = { GL.GL_CLAMP_TO_EDGE, GL.GL_CLAMP_TO_EDGE };
54 private volatile int frameIdx = 0;
55 private volatile boolean manualStepping =
false;
56 private int textureFragmentShaderHashCode = 0;
57 private boolean aRatioAdjustment =
true;
58 private boolean aRatioLbox =
false;
59 private final Vec4f aRatioLboxBackColor =
new Vec4f();
61 public ImageSequence(
final int textureUnit,
final boolean useBuildInTexLookup) {
62 this.textureUnit = textureUnit;
63 this.useBuildInTexLookup = useBuildInTexLookup;
66 public void setParams(
final int magFilter,
final int minFilter,
final int wrapS,
final int wrapT) {
67 texMinMagFilter[0] = minFilter;
68 texMinMagFilter[1] = magFilter;
78 frame.texture.bind(gl);
79 gl.glTexParameteri(
getTextureTarget(), GL.GL_TEXTURE_MIN_FILTER, texMinMagFilter[0]);
80 gl.glTexParameteri(
getTextureTarget(), GL.GL_TEXTURE_MAG_FILTER, texMinMagFilter[1]);
86 return frames.remove(tex);
92 public final void addFrame(
final GL gl,
final Class<?> context,
final String imageResourcePath,
final String imageSuffix)
throws IOException {
93 final URLConnection urlConn = IOUtil.getResource(imageResourcePath, context.getClassLoader(), context);
95 final TextureData texData = TextureIO.newTextureData(GLProfile.getGL2ES2(), urlConn.getInputStream(),
false, imageSuffix);
97 tex.updateImage(gl, texData);
103 public final void setCurrentIdx(
final int idx)
throws IndexOutOfBoundsException {
104 if( 0 > idx || idx >= frames.size() ) {
105 throw new IndexOutOfBoundsException(
"idx shall be within 0 <= "+idx+
" < "+frames.size());
116 public void destroy(
final GL gl)
throws GLException {
117 for(
int i=frames.size()-1; i>=0; i--) {
118 frames.get(i).getTexture().destroy(gl);
125 return GL.GL_TEXTURE_2D;
135 return texMinMagFilter;
182 if( null != backColor ) {
183 aRatioLboxBackColor.set(backColor);
192 return frames.get(frameIdx);
197 if( !manualStepping ) {
198 frameIdx = ( frameIdx + 1 ) % frames.size();
200 return frames.get(frameIdx);
205 return "// TextTextureSequence: No extensions required\n";
213 private String textureLookupFunctionName =
"myTexture2D";
217 if(useBuildInTexLookup) {
218 textureLookupFunctionName =
"texture2D";
219 }
else if(null != texLookupFuncName && texLookupFuncName.length()>0) {
220 textureLookupFunctionName = texLookupFuncName;
222 textureFragmentShaderHashCode = 0;
223 return textureLookupFunctionName;
228 return textureLookupFunctionName;
233 if(useBuildInTexLookup) {
239 " return texture2D(image, texCoord);\n"+
246 if( useBuildInTexLookup ) {
256 textureFragmentShaderHashCode = 0;
258 }
else if( 0 == textureFragmentShaderHashCode ) {
260 textureFragmentShaderHashCode = hash;
262 return textureFragmentShaderHashCode;
TextureFrame(final Texture t, final int pts, final int duration)
Simple TextureSequence implementation allowing existing textures or image streams to be used and repl...
final void addFrame(final GL gl, final Class<?> context, final String imageResourcePath, final String imageSuffix)
String getTextureFragmentShaderHashID()
final void setManualStepping(final boolean v)
final boolean isManualStepping()
TextureSequence TextureFrame getLastTexture()
final TextureSequence TextureFrame addFrame(final GL gl, final TextureSequence.TextureFrame frame)
void setARatioLetterbox(final boolean v, final Vec4f backColor)
String setTextureLookupFunctionName(final String texLookupFuncName)
final void setCurrentIdx(final int idx)
final int getFrameCount()
String getTextureSampler2DType()
final int getCurrentIdx()
void setARatioAdjustment(final boolean v)
boolean useARatioLetterbox()
boolean useARatioAdjustment()
int[] getTextureMinMagFilter()
ImageSequence(final int textureUnit, final boolean useBuildInTexLookup)
Vec4f getARatioLetterboxBackColor()
final boolean isSequenceAnimating()
Returns true if not isManualStepping() and getFrameCount() > 1.
TextureSequence TextureFrame getNextTexture(final GL gl)
void setParams(final int magFilter, final int minFilter, final int wrapS, final int wrapT)
String getTextureLookupFragmentShaderImpl()
String getTextureLookupFunctionName()
boolean removeFrame(final TextureFrame tex)
int getTextureFragmentShaderHashCode()
boolean isTextureAvailable()
String getRequiredExtensionsShaderStub()
void destroy(final GL gl)
final TextureSequence TextureFrame addFrame(final GL gl, final Texture tex)
final TextureSequence TextureFrame getFrame(final int idx)