示例#1
0
def write_shader_param():
    header = CodeWriter(os.path.join(get_base_path(), 'shaderparam.h'))
    code = CodeWriter(os.path.join(get_base_path(), 'shaderparam.cpp'))

    parameters = []
    for shader in SHADERS:
        for param in shader.uniforms:
            parameters.append(param[0])
        if shader.tex_param:
            parameters.append(shader.tex_param)
    parameters = list(set(parameters))

    hash_data = get_hash_function('hash_shader_parameter', parameters,
                                  False)

    code.putln(hash_data.code.replace('inline ', ''))

    header.start_guard('CHOWDREN_SHADERPARAM_H')
    header.putln('unsigned int hash_shader_parameter(const char * str, '
                                                    'unsigned int len);')
    header.putln('')

    for k, v in hash_data.strings.iteritems():
        name = 'SHADER_PARAM_%s' % get_method_name(k).upper()
        header.putdefine(name, v)

    header.close_guard('CHOWDREN_SHADERPARAM_H')

    header.close()
    code.close()
示例#2
0
def get_string_int_map(map_func, hash_func, string_map, case_sensitive=True):
    strings = list(string_map.iterkeys())
    writer = CodeWriter()
    if strings:
        hash_data = get_hash_function(hash_func, strings, case_sensitive)
        writer.putlnc(hash_data.code)
        hashes = dict((v, k) for (k, v) in hash_data.strings.iteritems())

    writer.putmeth('int %s' % map_func, 'const std::string & in')
    writer.putln('if (in.empty())')
    writer.indent()
    writer.putln('return -1;')
    writer.dedent()

    if strings:
        writer.putlnc('unsigned int hash = %s(&in[0], in.size());',
                      hash_func)
        writer.putlnc('switch (hash) {')
        writer.indent()
        for i in xrange(hash_data.max_hash_value + 1):
            value = hashes.get(i, None)
            if value is None:
                continue
            else:
                value = string_map[value]
            writer.putlnc('case %s: return %s;', i, value)
        writer.end_brace()
    writer.putlnc('return -1;')
    writer.end_brace()
    return writer.get_data()
示例#3
0
def get_string_int_map(map_func, hash_func, string_map, case_sensitive=True):
    strings = list(string_map.iterkeys())
    writer = CodeWriter()
    if strings:
        hash_data = get_hash_function(hash_func, strings, case_sensitive)
        writer.putlnc(hash_data.code)
        hashes = dict((v, k) for (k, v) in hash_data.strings.iteritems())

    writer.putmeth('int %s' % map_func, 'const std::string & in')
    writer.putln('if (in.empty())')
    writer.indent()
    writer.putln('return -1;')
    writer.dedent()

    if strings:
        writer.putlnc('unsigned int hash = %s(&in[0], in.size());', hash_func)
        writer.putlnc('switch (hash) {')
        writer.indent()
        for i in xrange(hash_data.max_hash_value + 1):
            value = hashes.get(i, None)
            if value is None:
                continue
            else:
                value = string_map[value]
            writer.putlnc('case %s: return %s;', i, value)
        writer.end_brace()
    writer.putlnc('return -1;')
    writer.end_brace()
    return writer.get_data()