I know the solution is simple to calculate, I just dislike the current solution because of lack of proof behind it(who gives a damn if it works? It has to be proven in the realm of mathematics before it's useful).

I had to revisit this issue because I have to make a 3D networked game for my assignment and wanted to re-invent the wheel, with solid proof.

If you don't care about this then don't read it. I only did this as a proof for my assignment and thought maybe someone might benefit from my proof.

lambda = texture dimension size (either width or height)

alpha = some unknown integer value that is the power

This statement is assuming that the current dimension is PO2 but since I don't know this, I thought I'd try and find the power while converting the base from PO2 into something more common (base e).

lambda = 2^alpha

Convert base 2 to base e.

ln(lambda) = ln(2^alpha)

ln(lambda) = alpha*ln(2)

alpha = ln(lambda) / ln(2)

How to get this to work?

1 2 3 4 5
| private static boolean isPowerOf2(final int width, final int height) { currentImageScaledWidth = (int) Math.pow(2, Math.ceil(Math.log(width) / Math.log(2))); currentImageScaledHeight = (int) Math.pow(2, Math.ceil(Math.log(height) / Math.log(2))); return ((width == currentImageScaledWidth) && (height == currentImageScaledHeight)); } |

If it's already a PO2 texture then nothing happens. If a dimension isn't PO2, then it converts to the nearest higher PO2 dimension.

1 2 3 4 5 6 7
| Texture tex = TextureLoader.load("C:\\Documents and Settings\\Kruno\\Desktop\\newOOP2Ass\\res\\Title.BMP"); double curTexBaseX = Math.log(tex.width) / Math.log(2); double curTexBaseY = Math.log(tex.height) / Math.log(2); System.out.println(tex); System.out.print("PO2 Width: " + Math.pow(2, Math.ceil(curTexBaseX))); System.out.print("\t PO2 Height: " + Math.pow(2, Math.ceil(curTexBaseY))); |

Output:

BPP: 3 Width: 453 Height: 239 Scaled Width: 512 Scaled Height: 256

PO2 Width: 512.0 PO2 Height: 256.0