A demo that shows the interactions of SRGB conversions and anti-aliasing
 
 
 
Go to file
Allen Webster c650d41a82 fill out the README with more detail 2023-04-28 20:00:33 -07:00
bin setup the srgb anti-aliasing experiments standalone program 2023-04-24 19:12:55 -07:00
src monitor calibration test block 2023-04-28 19:22:32 -07:00
.gitignore setup the srgb anti-aliasing experiments standalone program 2023-04-24 19:12:55 -07:00
LICENSE-GPL-3.txt setup the srgb anti-aliasing experiments standalone program 2023-04-24 19:12:55 -07:00
README.md fill out the README with more detail 2023-04-28 20:00:33 -07:00
project.4coder setup the srgb anti-aliasing experiments standalone program 2023-04-24 19:12:55 -07:00

README.md

Copyright (C) 2023 Allen Webster https://mr4th.com

Distributed with GPL 3 license (full license in LICENSE-GPL-3.txt)

Contact

allenw@mr4th.com

Purpose

This is a standalone Win32 OpenGL application that works as a set of experiments to demonstrate the behavior and effect of SRGB conversions and antialiasing techniques

In the final output program, the left side shows the gamma-naive results where no SRGB conversions are applied to input colors or to output colors. The right side shows the gamma-aware results where input colors are converted from SRGB to Linear RGB, and output colors are converted from Linear RGB to SRGB.

From top to bottom the experiments are:

  1. A gradient which goes white (1,1,1) to black (0,0,0) interpolated linearly by alpha = (x - left)/(right - left) color = (1,1,1)(1 - alpha) + (0,0,0)(alpha)

  2. Pulls out three colors into solid color blocks: (0,0,0), (0.5,0.5,0.5), and (1,1,1)

  3. Tests sRGB -> Linear approximation function. (Right side only) Compares two discrete gray pallets. The top shows 16 levels of gray by sampling them from an SRGB texture. The bottom shows the same 16 gray values with the input colors converted from sRGB -> Linear by x^2.2 instead of by texture sampling.

  4. Tests color gradients (1,0,0) >>> (1,1,0) (1,1,0) >>> (0,1,0) (0,1,0) >>> (0,1,1) (0,1,1) >>> (0,0,1) (0,0,1) >>> (1,0,1) (1,0,1) >>> (1,0,0)

  5. Tests partial transparency 3 horizontal stripes - opaque 3 vertical stripes - alpha = 0.5 3 vertical stripes - alpha = 0.75

  6. Tests rectangle anti-aliasing by drawing rectangles with a width of 2 placed at various sub-pixel positions

  7. Tests circle anti-aliasing by drawing three circles of various radii. The circle anti-aliasing is computed with a highly accurate area-under-the-curve integration method - see the "sanity test" functions for how the accuracy of the pixel coverage is verified.

  8. Tests circle anti-aliasing with colored backgrounds and shape colors to see if anti-aliasing gives rise to any colored fringes.

In the top-left corner there is a gamma calibration test image. The top left corner is "0.5 Gray" in the "Linear color space" and the bottom right corner is "0.5 Gray" in the "sRGB color space". The other two corners are identical black-and-white checkerboards. When squinting to physically blur the checkerboard, the brihgtness should resemble the brightness of the top left corner on a correctly calibrated monitor.

The anti-aliasing of the rectangles and circles should also look better on linear color space side for a correctly calibrated monitor.