Home | History | Annotate | Download | only in opengl
      1 # -*- coding: utf-8 -*-
      2 
      3 #-------------------------------------------------------------------------
      4 # drawElements Quality Program utilities
      5 # --------------------------------------
      6 #
      7 # Copyright 2015 The Android Open Source Project
      8 #
      9 # Licensed under the Apache License, Version 2.0 (the "License");
     10 # you may not use this file except in compliance with the License.
     11 # You may obtain a copy of the License at
     12 #
     13 #      http://www.apache.org/licenses/LICENSE-2.0
     14 #
     15 # Unless required by applicable law or agreed to in writing, software
     16 # distributed under the License is distributed on an "AS IS" BASIS,
     17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     18 # See the License for the specific language governing permissions and
     19 # limitations under the License.
     20 #
     21 #-------------------------------------------------------------------------
     22 
     23 import os
     24 from src_util import *
     25 from itertools import imap, chain
     26 
     27 def getMangledName (funcName):
     28 	assert funcName[:2] == "gl"
     29 	return "glw" + funcName[2:]
     30 
     31 def commandAliasDefinition (command):
     32 	return "#define\t%s\t%s" % (command.name, getMangledName(command.name))
     33 
     34 def commandWrapperDeclaration (command):
     35 	return "%s\t%s\t(%s);" % (
     36 		command.type,
     37 		getMangledName(command.name),
     38 		", ".join([param.declaration for param in command.params]))
     39 
     40 def genWrapperHeader (iface):
     41 	defines = imap(commandAliasDefinition, iface.commands)
     42 	prototypes = imap(commandWrapperDeclaration, iface.commands)
     43 	src = indentLines(chain(defines, prototypes))
     44 	writeInlFile(os.path.join(OPENGL_INC_DIR, "glwApi.inl"), src)
     45 
     46 def getDefaultReturn (command):
     47 	if command.name == "glGetError":
     48 		return "GL_INVALID_OPERATION"
     49 	else:
     50 		assert command.type != 'void'
     51 		return "(%s)0" % command.type
     52 
     53 def commandWrapperDefinition (command):
     54 	template = """
     55 {returnType} {mangledName} ({paramDecls})
     56 {{
     57 	const glw::Functions* gl = glw::getCurrentThreadFunctions();
     58 	if (!gl)
     59 		return{defaultReturn};
     60 	{maybeReturn}gl->{memberName}({arguments});
     61 }}"""
     62 	return template.format(
     63 		returnType		= command.type,
     64 		mangledName		= getMangledName(command.name),
     65 		paramDecls		= commandParams(command),
     66 		defaultReturn	= " " + getDefaultReturn(command) if command.type != 'void' else "",
     67 		maybeReturn		= "return " if command.type != 'void' else "",
     68 		memberName		= getFunctionMemberName(command.name),
     69 		arguments		= commandArgs(command))
     70 
     71 def genWrapperImplementation (iface):
     72 	genCommandList(iface, commandWrapperDefinition, OPENGL_INC_DIR, "glwImpl.inl")
     73 
     74 def genWrapper (iface):
     75 	genWrapperHeader(iface)
     76 	genWrapperImplementation(iface)
     77 
     78 if __name__ == "__main__":
     79 	genWrapper(getHybridInterface())
     80