|
@@ -4026,7 +4026,7 @@ static void _get_Cs(real L, real a_, real b_,real *rC_0, real *rC_mid, real *rC_
|
|
|
|
|
|
*rC_0=C_0; *rC_mid=C_mid; *rC_max=C_max;
|
|
|
}
|
|
|
-void tnsHCY2RGB(real *hcy, real *rgb){
|
|
|
+void tnsHCY2RGBLinear(real *hcy, real *rgb){
|
|
|
real h = hcy[0]; real s = hcy[1]; real l = hcy[2];
|
|
|
|
|
|
if (l >= 1.0f){ tnsVectorSet3(rgb,1,1,1); return; }
|
|
@@ -4057,15 +4057,10 @@ void tnsHCY2RGB(real *hcy, real *rgb){
|
|
|
|
|
|
real okl[3]={L, C * a_, C * b_};
|
|
|
tnsOKLAB2RGB(okl, rgb);
|
|
|
- rgb[0]=_srgb_transfer_function(rgb[0]);
|
|
|
- rgb[1]=_srgb_transfer_function(rgb[1]);
|
|
|
- rgb[2]=_srgb_transfer_function(rgb[2]);
|
|
|
}
|
|
|
-void tnsRGB2HCY(real *rgb, real *hcy){
|
|
|
+void tnsRGB2HCYLinear(real *rgb, real *hcy){
|
|
|
real lab[3]; real lrgb[3];
|
|
|
- lrgb[0]=_srgb_transfer_function_inv(rgb[0]);
|
|
|
- lrgb[1]=_srgb_transfer_function_inv(rgb[1]);
|
|
|
- lrgb[2]=_srgb_transfer_function_inv(rgb[2]);
|
|
|
+ lrgb[0]=rgb[0]; lrgb[1]=rgb[1]; lrgb[2]=rgb[2];
|
|
|
tnsRGB2OKLAB(lrgb,lab);
|
|
|
|
|
|
if(lab[0]>=1.0f-1e-4){ tnsVectorSet3(hcy,0,0,1); return; }
|
|
@@ -4100,6 +4095,19 @@ void tnsRGB2HCY(real *rgb, real *hcy){
|
|
|
real l = _toe(L);
|
|
|
hcy[0]=h; hcy[1]=s; hcy[2]=l;
|
|
|
}
|
|
|
+void tnsHCY2RGB(real *hcy, real *rgb){
|
|
|
+ tnsHCY2RGBLinear(hcy,rgb);
|
|
|
+ rgb[0]=_srgb_transfer_function(rgb[0]);
|
|
|
+ rgb[1]=_srgb_transfer_function(rgb[1]);
|
|
|
+ rgb[2]=_srgb_transfer_function(rgb[2]);
|
|
|
+}
|
|
|
+void tnsRGB2HCY(real *rgb, real *hcy){
|
|
|
+ real lrgb[3];
|
|
|
+ lrgb[0]=_srgb_transfer_function_inv(rgb[0]);
|
|
|
+ lrgb[1]=_srgb_transfer_function_inv(rgb[1]);
|
|
|
+ lrgb[2]=_srgb_transfer_function_inv(rgb[2]);
|
|
|
+ tnsRGB2HCYLinear(lrgb,hcy);
|
|
|
+}
|
|
|
|
|
|
void tnsClearAll(){
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|