colour lib needs reviewers

Manu via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 13 17:28:55 PDT 2016


On 14 September 2016 at 00:56, John Colvin via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> On Tuesday, 13 September 2016 at 09:31:53 UTC, Manu wrote:
>>
>> On 13 September 2016 at 17:47, John Colvin via Digitalmars-d
>> <digitalmars-d at puremagic.com> wrote:
>>>
>>> On Tuesday, 13 September 2016 at 01:05:56 UTC, Manu wrote:
>>>>>
>>>>>
>>>>> Also can I swizzle channels directly?
>>>>
>>>>
>>>>
>>>> I could add something like:
>>>>   auto brg =  c.swizzle!"brg";
>>>>
>>>> The result would be strongly typed to the new arrangement.
>>>
>>>
>>>
>>> Perfect use-case for opDispatch like in gl3n.
>>
>>
>> One trouble with arbitrary swizzling is that people often want to
>> write expressions like "c.xyzy", or whatever, but repeating
>> components... and that's not something my colours can do. It's useful
>> in realtime code, but it doesn't mean anything, and you can't
>> interpret that value as a colour anymore after you do that.
>> This sort of thing is used when you're not actually storing colours in
>> textures, but instead just some arbitrary data. Don't use a colour
>> type for that, use a vector type instead.
>> What that sort of swizzling really is, are vector operations, not
>> colour operations. Maybe I could add an API to populate a vector from
>> the components of colours, in-order... but then we don't actually have
>> linear algebra functions in phobos either! So colour->vectors and
>> arbitrary swizzling is probably not something we need immediately.
>>
>> In my lib, colours are colours. If you have `BGR8 x` and `RGB8 y`, and add
>> them, you don't get x.b+y.r, x.g+y.g, x.r+y.b... that's not a colour
>> operation, that's an element-wise vector operation.
>
>
> Fair enough, you know much better than me how useful it would be. I was just
> suggesting that if you do support some sorts of swizzling then opDispatch
> would allow you to avoid users having to use strings. It would be as simple
> to implement as `alias opDispatch = swizzle;` given the swizzle function you
> were using before.

Oh, it would be super-useful! Just that it's not a colour operation,
its liner algebra... I think it's a job for another lib. Getting a
colour as a vector is all that's needed.


More information about the Digitalmars-d mailing list