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