Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Gaperton, Вы писали:
G>>Собственно, все. Можно сделать чтобы работало как в статике, так и в динамике. Без макросов. Где у нас подвох? WH>Подвох в том что базового пространства нет. WH>И завести его без потери точности и эффективности невозможно.
В классе пространств, которые приводятся линейным преобразованием друг к другу (а это, как ты сказал, половина твоих преобразований), такое пространство, через которое ты будешь гнать цвет, в явном виде не нужно. Ты всегда получаешь прямое преобразование перемножением матриц, и потери эфективности и точности здесь не будет. А если ты воспользуешься оптимизированной библиотекой BLAS от Intel, и применишь 32-х битные float для компонент цвета (чего вполне достаточно) то у тебя будет чистый выигрышь в производительности (будет задействовано SSE). Это делается чисто и понятно — без макросов.
Для пространств, которые преобразовыватся нелинейно, достаточно описать одно преобразование в любое "линейное" цветовое пространство. Позволь мне усомниться в том, что у тебя сильно упадет точность при использовании линейного пространства как переходного и применении плавающей арифметики хорошей разрядности — ты можешь в конце концов задействовать и double — SSE замечаетельно работает и с ними.
Также, для прямого оптимизированного перехода между двумя нелинейними пространствами (что надо делать по показаниям) — никто не мешает определить специализированный метод.
Необходимости в макросах я тут не вижу. Почему должна просесть точность и производительность — тоже не понимаю. А вот то, что применение макросов — это переусложнение — это понятно.