1#!/usr/bin/env python 2 3CopyRight = ''' 4/************************************************************************** 5 * 6 * Copyright 2010 VMware, Inc. 7 * All Rights Reserved. 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a 10 * copy of this software and associated documentation files (the 11 * "Software"), to deal in the Software without restriction, including 12 * without limitation the rights to use, copy, modify, merge, publish, 13 * distribute, sub license, and/or sell copies of the Software, and to 14 * permit persons to whom the Software is furnished to do so, subject to 15 * the following conditions: 16 * 17 * The above copyright notice and this permission notice (including the 18 * next paragraph) shall be included in all copies or substantial portions 19 * of the Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 24 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 26 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 27 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28 * 29 **************************************************************************/ 30 31/** 32 * @file 33 * SRGB translation. 34 * 35 * @author Brian Paul <brianp@vmware.com> 36 * @author Michal Krol <michal@vmware.com> 37 * @author Jose Fonseca <jfonseca@vmware.com> 38 */ 39''' 40 41 42import math 43 44 45def srgb_to_linear(x): 46 if x <= 0.04045: 47 return x / 12.92 48 else: 49 return math.pow((x + 0.055) / 1.055, 2.4) 50 51 52def linear_to_srgb(x): 53 if x >= 0.0031308: 54 return 1.055 * math.pow(x, 0.41666) - 0.055 55 else: 56 return 12.92 * x 57 58def generate_srgb_tables(): 59 print 'const float' 60 print 'util_format_srgb_8unorm_to_linear_float_table[256] = {' 61 for j in range(0, 256, 4): 62 print ' ', 63 for i in range(j, j + 4): 64 print '%.7e,' % (srgb_to_linear(i / 255.0),), 65 print 66 print '};' 67 print 68 print 'const uint8_t' 69 print 'util_format_srgb_to_linear_8unorm_table[256] = {' 70 for j in range(0, 256, 16): 71 print ' ', 72 for i in range(j, j + 16): 73 print '%3u,' % (int(srgb_to_linear(i / 255.0) * 255.0 + 0.5),), 74 print 75 print '};' 76 print 77 print 'const uint8_t' 78 print 'util_format_linear_to_srgb_8unorm_table[256] = {' 79 for j in range(0, 256, 16): 80 print ' ', 81 for i in range(j, j + 16): 82 print '%3u,' % (int(linear_to_srgb(i / 255.0) * 255.0 + 0.5),), 83 print 84 print '};' 85 print 86 87 88def main(): 89 print '/* This file is autogenerated by u_format_srgb.py. Do not edit directly. */' 90 print 91 # This will print the copyright message on the top of this file 92 print CopyRight.strip() 93 print 94 print '#include "u_format_srgb.h"' 95 print 96 generate_srgb_tables() 97 98 99if __name__ == '__main__': 100 main() 101