Project

General

Profile

« Previous | Next » 

Revision f85f2943

Added by Leszek Koltunski about 2 years ago

FactorySticker: further improvements.

View differences:

src/main/java/org/distorted/library/main/DistortedTexture.java
35 35
public class DistortedTexture extends InternalSurface
36 36
  {
37 37
  private Bitmap mBmp;
38
  private boolean mBitmapInverted;
38 39

  
39 40
///////////////////////////////////////////////////////////////////////////////////////////////////
40
// We have to flip vertically every single Bitmap that we get fed with.
41
// We have to vertically flip all the bitmaps passed here via setTexture().
41 42
//
42 43
// Reason: textures read from files are the only objects in OpenGL which have their origins at the
43 44
// upper-left corner. Everywhere else the origin is in the lower-left corner. Thus we have to flip.
44 45
// The alternative solution, namely inverting the y-coordinate of the TexCoord does not really work-
45 46
// i.e. it works only in case of rendering directly to the screen, but if we render to an FBO and
46 47
// then take the FBO and render to screen, (DistortedNode does so!) things get inverted as textures
47
// created from FBO have their origins in the lower-left... Mindfuck!
48
// created from FBO have their origins in the lower-left...
48 49

  
49 50
  private static Bitmap flipBitmap(Bitmap src)
50 51
    {
......
72 73
      GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR );
73 74
      GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE );
74 75
      GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE );
75
      GLUtils.texImage2D(GLES30.GL_TEXTURE_2D, 0, flipBitmap(mBmp), 0);
76
      GLUtils.texImage2D(GLES30.GL_TEXTURE_2D, 0, mBitmapInverted ? mBmp : flipBitmap(mBmp), 0);
76 77
      GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0);
77 78

  
78 79
      mBmp = null;
......
150 151
      }
151 152
    else
152 153
      {
154
      mBitmapInverted = false;
155
      mBmp= bmp;
156
      markForCreation();
157
      return true;
158
      }
159
    }
160

  
161
///////////////////////////////////////////////////////////////////////////////////////////////////
162
/**
163
 * Sets the underlying android.graphics.Bitmap object - this version assumes the object is already
164
 * flipped upside down.
165
 * <p>
166
 * You can only recycle() the passed Bitmap once the OpenGL context gets created (i.e. after call
167
 * to GLSurfaceView.onSurfaceCreated) because only after this point can the Library upload it to the GPU!
168
 *
169
 * @param bmp The (vertically flipped!) android.graphics.Bitmap object to apply effects to and display.
170
 * @return true if successful, false if texture too large.
171
 */
172
  public boolean setTextureAlreadyInverted(Bitmap bmp)
173
    {
174
    int width = bmp.getWidth();
175
    int height= bmp.getHeight();
176
    int max   = DistortedLibrary.getMaxTextureSize();
177

  
178
    if( width>max || height>max )
179
      {
180
      android.util.Log.e("texture","error, trying to upload too large texture of size "+width+" x "+height+". Max is "+max);
181
      return false;
182
      }
183
    else
184
      {
185
      mBitmapInverted = true;
153 186
      mBmp= bmp;
154 187
      markForCreation();
155 188
      return true;

Also available in: Unified diff