Я разработал цикл для динамического создания размеров текстур для каждого другого представления, которое у меня есть в визуализации на основе браузера с использованием шейдеров. Я знаю минимальное количество пикселей, которое мне нужно, чтобы передать мои значения в шейдеры; однако мне нужно масштабировать их до 2-х размеров, а затем убедитесь, что их размеры x и y также равны степеням двух с соотношением 1: 1, 2: 1 или 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