シェイダーを使用してブラウザベースの視覚化を行っているときに、それぞれ異なるビューのテクスチャサイズを動的に生成するループを作成しました。シェーダーに値を渡すために必要なピクセルの最小数を知っています。しかし、私はそれらを2の累乗にスケールアップし、そしてそれらのxとyの次元が2:1、2:1、または1:2の比率で2のべき乗であることを確認する必要があります。現在、私のループは無限です。私は、自分の比率の1つを満たすサイズに達するまで、2ピクセルカウントの全体的なパワーを引き続き増やす必要があると思います。2の累乗でテクスチャのサイズとサイズを動的かつ効率的に生成する方法
私の質問は、私がここでやろうとしていることを達成するための効率的または直接的な方法がありますか?
var motifMinBufferSize = 80000;
var bufferSize; // the total number of texels that will be in the computation buffers (must be a power of two)
var dimensions;
function initValues() {
bufferSize = setBufferSize();
dimensions = setPositionsTextureSize();
}
function setBufferSize() {
var buffer = motifMinBufferSize;
// fill out the buffers to a power of two - necessary for the computation textures in the shaders
var powCount = 1;
var powOf2 = 2;
while (buffer > powOf2) {
powOf2 *= 2;
powCount++;
}
while (buffer < powOf2) {
buffer += 1;
}
}
function setPositionsTextureSize() {
var dimensions = {
texWidth : null,
texHeight : null
};
var foundDimensions = false;
var powOf2 = 2;
while (foundDimensions === false) {
var candidateWidth = bufferSize/powOf2;
if (candidateWidth === powOf2 || candidateWidth/2 === powOf2 || candidateWidth*2 === powOf2) {
dimensions.texWidth = candidateWidth;
dimensions.textHeight = powOf2;
foundDimensions = true;
} else {
powOf2 *= 2;
}
}
return dimensions;
}
非常にエレガント - ありがとう! – gromiczek