Basic proof of PO2 size

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?


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.


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)));