셰이더를 사용하는 브라우저 기반 시각화에서 각각의 다른 뷰에 대한 텍스처 크기를 동적으로 생성하는 루프를 완성했습니다. 셰이더에 값을 전달하기 위해 필요한 최소 픽셀 수를 알고 있습니다. 그러나 나는 2 크기의 힘으로 그들을 확장하고, 그 다음 그들의 x와 y 차원이 1 : 1, 2 : 1, 또는 1 : 2 비율과 함께 2의 제곱수인지 확인해야합니다. 지금은 루프가 무한합니다. 내 비율 중 하나를 만족하는 크기에 도달 할 때까지 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