# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------
# drawElements Quality Program utilities
# --------------------------------------
#
# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-------------------------------------------------------------------------

from src_util import *

# Functions that have special implementation
OVERRIDE_FUNCS = set([
    "glGetError",
    "glGetIntegerv",
    "glGetBooleanv",
    "glGetFloatv",
    "glGetString",
    "glGetStringi",
    "glCreateShader",
    "glCreateProgram",
    "glGetShaderiv",
    "glGetProgramiv",
    "glGenTextures",
    "glGenQueries",
    "glGenBuffers",
    "glGenRenderbuffers",
    "glGenFramebuffers",
    "glGenVertexArrays",
    "glGenSamplers",
    "glGenTransformFeedbacks",
    "glGenProgramPipelines",
    "glGetInternalformativ",
    "glMapBufferRange",
    "glCheckFramebufferStatus",
    "glReadPixels",
    "glBindBuffer",
    "glDeleteBuffers",
    "glGetAttribLocation",
])

NULL_PLATFORM_DIR = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "framework", "platform", "null"))

def commandDummyImpl (command):
    if command.name in OVERRIDE_FUNCS:
        return None
    template = """
GLW_APICALL {returnType} GLW_APIENTRY {commandName} ({paramDecls})
{{
{body}{maybeReturn}
}}"""
    return template.format(
        returnType = command.type,
        commandName = command.name,
        paramDecls = commandParams(command),
        body = ''.join("\tDE_UNREF(%s);\n" % p.name for p in command.params),
        maybeReturn = "\n\treturn (%s)0;" % command.type if command.type != 'void' else "")

def commandInitStatement (command):
    return "gl->%s\t= %s;" % (getFunctionMemberName(command.name), command.name)

def genNullRenderContext (iface):
    genCommandList(iface, commandInitStatement,
                   directory = NULL_PLATFORM_DIR,
                   filename = "tcuNullRenderContextInitFuncs.inl",
                   align = True)
    genCommandList(iface, commandDummyImpl,
                   directory = NULL_PLATFORM_DIR,
                   filename = "tcuNullRenderContextFuncs.inl")

if __name__ == "__main__":
    genNullRenderContext(getHybridInterface())
