Образец одноцветной текстуры в металле - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь настроить некоторые одноцветные текстуры.Я хочу использовать текстуру, состоящую из одного 32-битного числа с плавающей точкой.Затем используйте линейный сэмплер для интерполяции значений из него.Я настроил свой дескриптор текстуры металла следующим образом.

MTLTextureDescriptor *textureDescriptor = [[MTLTextureDescriptor alloc] init];
textureDescriptor.textureType = MTLTextureType2D;
textureDescriptor.pixelFormat = MTLPixelFormatR32Float;
textureDescriptor.width = width;
textureDescriptor.height = height;
textureDescriptor.depth = 1;
textureDescriptor.mipmapLevelCount = 1;
textureDescriptor.sampleCount = 1;
textureDescriptor.arrayLength = 1;
textureDescriptor.cpuCacheMode = MTLCPUCacheModeWriteCombined;
textureDescriptor.storageMode = MTLStorageModeManaged;
textureDescriptor.allowGPUOptimizedContents = true;
textureDescriptor.usage = MTLTextureUsageShaderRead;

Однако я получаю ошибку компиляции в своем коде шейдера.

kernel text_kernel(texture2d<float, access::sample> x [[texture(0)]]) {
    constexpr sampler linear(coord::normalized,
                             address::clamp_to_edge,
                             filter::linear);
    float x_sample = x.sample(linear, float2(0.1, 0.2)) 
}

Похоже, что sample хочет вернуть float4вместо одного поплавка.Так что возникает ряд вопросов.

1 Что возвращается в трех других компонентах?

Возвращает ли он соседние пиксели или просто помещает все те же значения в другие компоненты.

2 Нормализует ли образецзначения в пикселях?

Если я инициализирую текстуру с плавающими значениями больше 1 или меньше нуля, то зажимает ли она выборочные значения?

1 Ответ

0 голосов
/ 23 января 2019

1 Что возвращается в трех других компонентах?

Я полагаю, что он заполняет недостающие компоненты из соответствующего компонента float4(0, 0, 0, 1).

Если вы 'Вы заинтересованы только в красном компоненте, просто примените .r к результату из sample().Т.е.:

    float x_sample = x.sample(linear, float2(0.1, 0.2)).r;

2 Нормализует ли выборка значения пикселей?

Нет.Для форматов пикселей с плавающей точкой он не сжимается.

...