зеркало из https://github.com/mozilla/gecko-dev.git
Bug 791422. Support more flexibiltiy qcms output format. r=BenWa
This will help support Chrome and should also let us output directly to a cairo compatible format.
This commit is contained in:
Родитель
b3365668ec
Коммит
3de99c3be7
|
@ -274,3 +274,26 @@ void qcms_transform_data_rgba_out_lut_sse1(qcms_transform *transform,
|
||||||
size_t length);
|
size_t length);
|
||||||
|
|
||||||
extern qcms_bool qcms_supports_iccv4;
|
extern qcms_bool qcms_supports_iccv4;
|
||||||
|
|
||||||
|
#ifdef NATIVE_OUTPUT
|
||||||
|
# define RGB_OUTPUT_COMPONENTS 4
|
||||||
|
# define RGBA_OUTPUT_COMPONENTS 4
|
||||||
|
# ifdef IS_LITTLE_ENDIAN
|
||||||
|
# define OUTPUT_INDEX_A 3
|
||||||
|
# define OUTPUT_INDEX_R 2
|
||||||
|
# define OUTPUT_INDEX_G 1
|
||||||
|
# define OUTPUT_INDEX_B 0
|
||||||
|
# else
|
||||||
|
# define OUTPUT_INDEX_A 0
|
||||||
|
# define OUTPUT_INDEX_R 1
|
||||||
|
# define OUTPUT_INDEX_G 2
|
||||||
|
# define OUTPUT_INDEX_B 3
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define RGB_OUTPUT_COMPONENTS 3
|
||||||
|
# define RGBA_OUTPUT_COMPONENTS 4
|
||||||
|
# define OUTPUT_R_INDEX 0
|
||||||
|
# define OUTPUT_G_INDEX 1
|
||||||
|
# define OUTPUT_B_INDEX 2
|
||||||
|
# define OUTPUT_A_INDEX 3
|
||||||
|
#endif
|
||||||
|
|
|
@ -95,10 +95,10 @@ void qcms_transform_data_rgb_out_lut_sse1(qcms_transform *transform,
|
||||||
src += 3;
|
src += 3;
|
||||||
|
|
||||||
/* use calc'd indices to output RGB values */
|
/* use calc'd indices to output RGB values */
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
dest += 3;
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle final (maybe only) pixel */
|
/* handle final (maybe only) pixel */
|
||||||
|
@ -120,9 +120,9 @@ void qcms_transform_data_rgb_out_lut_sse1(qcms_transform *transform,
|
||||||
result = _mm_movehl_ps(result, result);
|
result = _mm_movehl_ps(result, result);
|
||||||
*((__m64 *)&output[2]) = _mm_cvtps_pi32(result);
|
*((__m64 *)&output[2]) = _mm_cvtps_pi32(result);
|
||||||
|
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
|
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,7 @@ void qcms_transform_data_rgba_out_lut_sse1(qcms_transform *transform,
|
||||||
vec_b = _mm_mul_ps(vec_b, mat2);
|
vec_b = _mm_mul_ps(vec_b, mat2);
|
||||||
|
|
||||||
/* store alpha for this pixel; load alpha for next */
|
/* store alpha for this pixel; load alpha for next */
|
||||||
dest[3] = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
alpha = src[3];
|
alpha = src[3];
|
||||||
|
|
||||||
/* crunch, crunch, crunch */
|
/* crunch, crunch, crunch */
|
||||||
|
@ -218,9 +218,9 @@ void qcms_transform_data_rgba_out_lut_sse1(qcms_transform *transform,
|
||||||
src += 4;
|
src += 4;
|
||||||
|
|
||||||
/* use calc'd indices to output RGB values */
|
/* use calc'd indices to output RGB values */
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
dest += 4;
|
dest += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ void qcms_transform_data_rgba_out_lut_sse1(qcms_transform *transform,
|
||||||
vec_g = _mm_mul_ps(vec_g, mat1);
|
vec_g = _mm_mul_ps(vec_g, mat1);
|
||||||
vec_b = _mm_mul_ps(vec_b, mat2);
|
vec_b = _mm_mul_ps(vec_b, mat2);
|
||||||
|
|
||||||
dest[3] = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
|
||||||
vec_r = _mm_add_ps(vec_r, _mm_add_ps(vec_g, vec_b));
|
vec_r = _mm_add_ps(vec_r, _mm_add_ps(vec_g, vec_b));
|
||||||
vec_r = _mm_max_ps(min, vec_r);
|
vec_r = _mm_max_ps(min, vec_r);
|
||||||
|
@ -245,9 +245,9 @@ void qcms_transform_data_rgba_out_lut_sse1(qcms_transform *transform,
|
||||||
result = _mm_movehl_ps(result, result);
|
result = _mm_movehl_ps(result, result);
|
||||||
*((__m64 *)&output[2]) = _mm_cvtps_pi32(result);
|
*((__m64 *)&output[2]) = _mm_cvtps_pi32(result);
|
||||||
|
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
|
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,10 +93,10 @@ void qcms_transform_data_rgb_out_lut_sse2(qcms_transform *transform,
|
||||||
src += 3;
|
src += 3;
|
||||||
|
|
||||||
/* use calc'd indices to output RGB values */
|
/* use calc'd indices to output RGB values */
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
dest += 3;
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle final (maybe only) pixel */
|
/* handle final (maybe only) pixel */
|
||||||
|
@ -116,9 +116,9 @@ void qcms_transform_data_rgb_out_lut_sse2(qcms_transform *transform,
|
||||||
|
|
||||||
_mm_store_si128((__m128i*)output, _mm_cvtps_epi32(result));
|
_mm_store_si128((__m128i*)output, _mm_cvtps_epi32(result));
|
||||||
|
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
}
|
}
|
||||||
|
|
||||||
void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
||||||
|
@ -191,7 +191,7 @@ void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
||||||
vec_b = _mm_mul_ps(vec_b, mat2);
|
vec_b = _mm_mul_ps(vec_b, mat2);
|
||||||
|
|
||||||
/* store alpha for this pixel; load alpha for next */
|
/* store alpha for this pixel; load alpha for next */
|
||||||
dest[3] = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
alpha = src[3];
|
alpha = src[3];
|
||||||
|
|
||||||
/* crunch, crunch, crunch */
|
/* crunch, crunch, crunch */
|
||||||
|
@ -210,10 +210,10 @@ void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
||||||
src += 4;
|
src += 4;
|
||||||
|
|
||||||
/* use calc'd indices to output RGB values */
|
/* use calc'd indices to output RGB values */
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
dest += 4;
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle final (maybe only) pixel */
|
/* handle final (maybe only) pixel */
|
||||||
|
@ -226,7 +226,7 @@ void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
||||||
vec_g = _mm_mul_ps(vec_g, mat1);
|
vec_g = _mm_mul_ps(vec_g, mat1);
|
||||||
vec_b = _mm_mul_ps(vec_b, mat2);
|
vec_b = _mm_mul_ps(vec_b, mat2);
|
||||||
|
|
||||||
dest[3] = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
|
||||||
vec_r = _mm_add_ps(vec_r, _mm_add_ps(vec_g, vec_b));
|
vec_r = _mm_add_ps(vec_r, _mm_add_ps(vec_g, vec_b));
|
||||||
vec_r = _mm_max_ps(min, vec_r);
|
vec_r = _mm_max_ps(min, vec_r);
|
||||||
|
@ -235,9 +235,9 @@ void qcms_transform_data_rgba_out_lut_sse2(qcms_transform *transform,
|
||||||
|
|
||||||
_mm_store_si128((__m128i*)output, _mm_cvtps_epi32(result));
|
_mm_store_si128((__m128i*)output, _mm_cvtps_epi32(result));
|
||||||
|
|
||||||
dest[0] = otdata_r[output[0]];
|
dest[OUTPUT_R_INDEX] = otdata_r[output[0]];
|
||||||
dest[1] = otdata_g[output[1]];
|
dest[OUTPUT_G_INDEX] = otdata_g[output[1]];
|
||||||
dest[2] = otdata_b[output[2]];
|
dest[OUTPUT_B_INDEX] = otdata_b[output[2]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -251,9 +251,10 @@ static void qcms_transform_data_rgb_out_pow(qcms_transform *transform, unsigned
|
||||||
float out_device_g = pow(out_linear_g, transform->out_gamma_g);
|
float out_device_g = pow(out_linear_g, transform->out_gamma_g);
|
||||||
float out_device_b = pow(out_linear_b, transform->out_gamma_b);
|
float out_device_b = pow(out_linear_b, transform->out_gamma_b);
|
||||||
|
|
||||||
*dest++ = clamp_u8(255*out_device_r);
|
dest[OUTPUT_R_INDEX] = clamp_u8(255*out_device_r);
|
||||||
*dest++ = clamp_u8(255*out_device_g);
|
dest[OUTPUT_G_INDEX] = clamp_u8(255*out_device_g);
|
||||||
*dest++ = clamp_u8(255*out_device_b);
|
dest[OUTPUT_B_INDEX] = clamp_u8(255*out_device_b);
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -271,9 +272,10 @@ static void qcms_transform_data_gray_out_lut(qcms_transform *transform, unsigned
|
||||||
out_device_g = lut_interp_linear(linear, transform->output_gamma_lut_g, transform->output_gamma_lut_g_length);
|
out_device_g = lut_interp_linear(linear, transform->output_gamma_lut_g, transform->output_gamma_lut_g_length);
|
||||||
out_device_b = lut_interp_linear(linear, transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
out_device_b = lut_interp_linear(linear, transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
||||||
|
|
||||||
*dest++ = clamp_u8(out_device_r*255);
|
dest[OUTPUT_R_INDEX] = clamp_u8(out_device_r*255);
|
||||||
*dest++ = clamp_u8(out_device_g*255);
|
dest[OUTPUT_G_INDEX] = clamp_u8(out_device_g*255);
|
||||||
*dest++ = clamp_u8(out_device_b*255);
|
dest[OUTPUT_B_INDEX] = clamp_u8(out_device_b*255);
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,10 +299,11 @@ static void qcms_transform_data_graya_out_lut(qcms_transform *transform, unsigne
|
||||||
out_device_g = lut_interp_linear(linear, transform->output_gamma_lut_g, transform->output_gamma_lut_g_length);
|
out_device_g = lut_interp_linear(linear, transform->output_gamma_lut_g, transform->output_gamma_lut_g_length);
|
||||||
out_device_b = lut_interp_linear(linear, transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
out_device_b = lut_interp_linear(linear, transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
||||||
|
|
||||||
*dest++ = clamp_u8(out_device_r*255);
|
dest[OUTPUT_R_INDEX] = clamp_u8(out_device_r*255);
|
||||||
*dest++ = clamp_u8(out_device_g*255);
|
dest[OUTPUT_G_INDEX] = clamp_u8(out_device_g*255);
|
||||||
*dest++ = clamp_u8(out_device_b*255);
|
dest[OUTPUT_B_INDEX] = clamp_u8(out_device_b*255);
|
||||||
*dest++ = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,9 +320,10 @@ static void qcms_transform_data_gray_out_precache(qcms_transform *transform, uns
|
||||||
/* we could round here... */
|
/* we could round here... */
|
||||||
gray = linear * PRECACHE_OUTPUT_MAX;
|
gray = linear * PRECACHE_OUTPUT_MAX;
|
||||||
|
|
||||||
*dest++ = transform->output_table_r->data[gray];
|
dest[OUTPUT_R_INDEX] = transform->output_table_r->data[gray];
|
||||||
*dest++ = transform->output_table_g->data[gray];
|
dest[OUTPUT_G_INDEX] = transform->output_table_g->data[gray];
|
||||||
*dest++ = transform->output_table_b->data[gray];
|
dest[OUTPUT_B_INDEX] = transform->output_table_b->data[gray];
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,10 +340,11 @@ static void qcms_transform_data_graya_out_precache(qcms_transform *transform, un
|
||||||
/* we could round here... */
|
/* we could round here... */
|
||||||
gray = linear * PRECACHE_OUTPUT_MAX;
|
gray = linear * PRECACHE_OUTPUT_MAX;
|
||||||
|
|
||||||
*dest++ = transform->output_table_r->data[gray];
|
dest[OUTPUT_R_INDEX] = transform->output_table_r->data[gray];
|
||||||
*dest++ = transform->output_table_g->data[gray];
|
dest[OUTPUT_G_INDEX] = transform->output_table_g->data[gray];
|
||||||
*dest++ = transform->output_table_b->data[gray];
|
dest[OUTPUT_B_INDEX] = transform->output_table_b->data[gray];
|
||||||
*dest++ = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,9 +375,10 @@ static void qcms_transform_data_rgb_out_lut_precache(qcms_transform *transform,
|
||||||
g = out_linear_g * PRECACHE_OUTPUT_MAX;
|
g = out_linear_g * PRECACHE_OUTPUT_MAX;
|
||||||
b = out_linear_b * PRECACHE_OUTPUT_MAX;
|
b = out_linear_b * PRECACHE_OUTPUT_MAX;
|
||||||
|
|
||||||
*dest++ = transform->output_table_r->data[r];
|
dest[OUTPUT_R_INDEX] = transform->output_table_r->data[r];
|
||||||
*dest++ = transform->output_table_g->data[g];
|
dest[OUTPUT_G_INDEX] = transform->output_table_g->data[g];
|
||||||
*dest++ = transform->output_table_b->data[b];
|
dest[OUTPUT_A_INDEX] = transform->output_table_b->data[b];
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,10 +410,11 @@ static void qcms_transform_data_rgba_out_lut_precache(qcms_transform *transform,
|
||||||
g = out_linear_g * PRECACHE_OUTPUT_MAX;
|
g = out_linear_g * PRECACHE_OUTPUT_MAX;
|
||||||
b = out_linear_b * PRECACHE_OUTPUT_MAX;
|
b = out_linear_b * PRECACHE_OUTPUT_MAX;
|
||||||
|
|
||||||
*dest++ = transform->output_table_r->data[r];
|
dest[OUTPUT_R_INDEX] = transform->output_table_r->data[r];
|
||||||
*dest++ = transform->output_table_g->data[g];
|
dest[OUTPUT_G_INDEX] = transform->output_table_g->data[g];
|
||||||
*dest++ = transform->output_table_b->data[b];
|
dest[OUTPUT_B_INDEX] = transform->output_table_b->data[b];
|
||||||
*dest++ = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,10 +584,11 @@ static void qcms_transform_data_tetra_clut_rgba(qcms_transform *transform, unsig
|
||||||
clut_g = c0_g + c1_g*rx + c2_g*ry + c3_g*rz;
|
clut_g = c0_g + c1_g*rx + c2_g*ry + c3_g*rz;
|
||||||
clut_b = c0_b + c1_b*rx + c2_b*ry + c3_b*rz;
|
clut_b = c0_b + c1_b*rx + c2_b*ry + c3_b*rz;
|
||||||
|
|
||||||
*dest++ = clamp_u8(clut_r*255.0f);
|
dest[OUTPUT_R_INDEX] = clamp_u8(clut_r*255.0f);
|
||||||
*dest++ = clamp_u8(clut_g*255.0f);
|
dest[OUTPUT_G_INDEX] = clamp_u8(clut_g*255.0f);
|
||||||
*dest++ = clamp_u8(clut_b*255.0f);
|
dest[OUTPUT_B_INDEX] = clamp_u8(clut_b*255.0f);
|
||||||
*dest++ = in_a;
|
dest[OUTPUT_A_INDEX] = in_a;
|
||||||
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,9 +699,10 @@ static void qcms_transform_data_tetra_clut(qcms_transform *transform, unsigned c
|
||||||
clut_g = c0_g + c1_g*rx + c2_g*ry + c3_g*rz;
|
clut_g = c0_g + c1_g*rx + c2_g*ry + c3_g*rz;
|
||||||
clut_b = c0_b + c1_b*rx + c2_b*ry + c3_b*rz;
|
clut_b = c0_b + c1_b*rx + c2_b*ry + c3_b*rz;
|
||||||
|
|
||||||
*dest++ = clamp_u8(clut_r*255.0f);
|
dest[OUTPUT_R_INDEX] = clamp_u8(clut_r*255.0f);
|
||||||
*dest++ = clamp_u8(clut_g*255.0f);
|
dest[OUTPUT_G_INDEX] = clamp_u8(clut_g*255.0f);
|
||||||
*dest++ = clamp_u8(clut_b*255.0f);
|
dest[OUTPUT_B_INDEX] = clamp_u8(clut_b*255.0f);
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -726,9 +735,10 @@ static void qcms_transform_data_rgb_out_lut(qcms_transform *transform, unsigned
|
||||||
out_device_b = lut_interp_linear(out_linear_b,
|
out_device_b = lut_interp_linear(out_linear_b,
|
||||||
transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
||||||
|
|
||||||
*dest++ = clamp_u8(out_device_r*255);
|
dest[OUTPUT_R_INDEX] = clamp_u8(out_device_r*255);
|
||||||
*dest++ = clamp_u8(out_device_g*255);
|
dest[OUTPUT_G_INDEX] = clamp_u8(out_device_g*255);
|
||||||
*dest++ = clamp_u8(out_device_b*255);
|
dest[OUTPUT_B_INDEX] = clamp_u8(out_device_b*255);
|
||||||
|
dest += RGB_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,10 +772,11 @@ static void qcms_transform_data_rgba_out_lut(qcms_transform *transform, unsigned
|
||||||
out_device_b = lut_interp_linear(out_linear_b,
|
out_device_b = lut_interp_linear(out_linear_b,
|
||||||
transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
transform->output_gamma_lut_b, transform->output_gamma_lut_b_length);
|
||||||
|
|
||||||
*dest++ = clamp_u8(out_device_r*255);
|
dest[OUTPUT_R_INDEX] = clamp_u8(out_device_r*255);
|
||||||
*dest++ = clamp_u8(out_device_g*255);
|
dest[OUTPUT_G_INDEX] = clamp_u8(out_device_g*255);
|
||||||
*dest++ = clamp_u8(out_device_b*255);
|
dest[OUTPUT_B_INDEX] = clamp_u8(out_device_b*255);
|
||||||
*dest++ = alpha;
|
dest[OUTPUT_A_INDEX] = alpha;
|
||||||
|
dest += RGBA_OUTPUT_COMPONENTS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче