/*-------------------------------------------------------------------------
 * drawElements Quality Program Tester Core
 * ----------------------------------------
 *
 * Copyright 2014 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.
 *
 *//*!
 * \file
 * \brief EGL platform interface.
 *//*--------------------------------------------------------------------*/

#include "egluPlatform.hpp"
#include "egluStaticESLibrary.hpp"
#include "tcuFunctionLibrary.hpp"

namespace eglu
{

Platform::Platform (void)
{
}

Platform::~Platform (void)
{
}

tcu::FunctionLibrary* Platform::createDefaultGLFunctionLibrary (glu::ApiType apiType, const tcu::CommandLine&) const
{
	// \todo [2014-03-14 pyry] Do we want to implement tcu::DynamicFunctionLibrary-based fallback?
	if (apiType.getProfile() == glu::PROFILE_ES)
		return createStaticESLibrary();
	else
		return new tcu::StaticFunctionLibrary(DE_NULL, 0);
}

} // eglu
