I'm trying to better understand how Java variable scope works and what exactly happens to the underlying data when we do something like the following in a method:
this.variable = variable
What exactly does this line do? Here is my actual problem:
I'm loading Bitmaps to apply as textures in my (Android) OpenGL ES 2.0 project. It goes something like this:
public loadBitmapsForTextures(){
myBitmap = BitmapFactory.decodeResource(view.getResources(), R.drawable.testbmp, Options);
myObject.setTexture(view, myBitmap);
Log.v("NewTag","Recycled: Again: "+myBitmap);
myBitmap.recycle(); //All done - no longer required. But why is myBitmap still valid here?
}
within my Sprite class (of which myObject is an object), I have the following:
public void setTexture(GLSurfaceView view, Bitmap imgTexture){
this.imgTexture=imgTexture; //What exactly is this line doing? Copying the actual data? Just making another 'pointer' to the original data?
iProgId = Utils.LoadProgram(strVShader, strFShader);
iBaseMap = GLES20.glGetUniformLocation(iProgId, "u_baseMap");
iPosition = GLES20.glGetAttribLocation(iProgId, "a_position");
iTexCoords = GLES20.glGetAttribLocation(iProgId, "a_texCoords");
//Return usable texture ID from Utils class
texID = Utils.LoadTexture(view, imgTexture);
Log.v("NewTag","Recycled: Before: "+imgTexture);
imgTexture.recycle();
imgTexture=null;
Log.v("NewTag","Recycled: After"+imgTexture);
}
The logs in the setTexture method give the results I am expecting. The first one names the bitmap:
Recycled: Before: android.graphics.Bitmap@1111111
Recycled: After: null
However, the log statement in the initial loadBitmapsForTextures() method give something I wasn't expecing:
Recycled: Again: android.graphics.Bitmap@1111111
Why am I allowed to (seemingly) recycle this bitmap again? I can only assume that my understanding of the following line is flawed:
this.imgTexture=imgTexture;
So, this line does what exactly? As far as I can tell, it applies the class variable the same value as the local variable (which was passed into the method), however, obviously something more is happening. Does it actually create a whole new bitmap? If so, why is the name the same when logging?