purpose: Set the gamma table
usage: There are a number of ways of calling this function explained below.
Setting a redMin, redMax, redGamma, greenMin, etc.
mglSetGammaTable(0,1,0.8,0,1,0.9,0,1,0.75);
or with a vector of length 9:
mglSetGammaTable([0 1 0.8 0 1 0.9 0 1 0.75]);
or set with a single table for all there colors. Note that the table values go from 0 to 1 (i.e. 0 is the darkest value and 1 is the brightest value). If you have a 10 bit gamma table (most cards do–see section on monitor calibration for a list), then the intermediate values will be interpreted with 10 bits of resolution.
gammaTable = ((0:1/255:1).^0.8)'; mglSetGammaTable(gammaTable);
or set all three colors with differnet tables
redGammaTable = (0:1/255:1).^0.8; greenGammaTable = (0:1/255:1).^0.9; blueGammaTable = (0:1/255:1).^0.75; mglSetGammaTable(redGammaTable,greenGammaTable,blueGammaTable);
can also be called with an nx3 table
gammaTable(:,1) = (0:1/255:1).^0.8; gammaTable(:,2) = (0:1/255:1).^0.9; gammaTable(:,3) = (0:1/255:1).^0.75; mglSetGammaTable(gammaTable);
can also be called with the structure returned by mglGetGammaTable
mglSetGammaTable(mglGetGammaTable);
Note that the gamma table will be restored to the original after mglClose.
Timing. The setting of the gamma table is done by the OS in a way that seems to be asynchronous with mglFlush. For instance, the following code gives unexpected results:
mglOpen(1); mglClearScreen(1); % set back buffer to white mglWaitSecs(2); % now set the gamma table to all black, this should insure that nothing will be displayed mglSetGammaTable(zeros(1,256)); mglFlush; % now the flush will bring the value 255, set by the mglClearScreen above, % to the front buffer, but because the gamma table is set to black, % nothing should be displayed mglWaitSecs(2); mglClose;
This should keep the screen black, but on my machine, the screen temporarily flashes white. Presumably this is because the mglSetGammaTable happens after the mglFlush. It is recommended that you change the gamma while there is nothing displayed on the screen and wait for at least one screen refresh before assuming that the gamma table has actually changed.
purpose: returns what the gamma table is set to usage: table = mglGetGammaTable()
mglOpen; gammaTable = mglGetGammaTable