Home | History | Annotate | Download | only in common
      1 /*-------------------------------------------------------------------------
      2  * OpenGL Conformance Test Suite
      3  * -----------------------------
      4  *
      5  * Copyright (c) 2016 Google Inc.
      6  * Copyright (c) 2016 The Khronos Group Inc.
      7  *
      8  * Licensed under the Apache License, Version 2.0 (the "License");
      9  * you may not use this file except in compliance with the License.
     10  * You may obtain a copy of the License at
     11  *
     12  *      http://www.apache.org/licenses/LICENSE-2.0
     13  *
     14  * Unless required by applicable law or agreed to in writing, software
     15  * distributed under the License is distributed on an "AS IS" BASIS,
     16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     17  * See the License for the specific language governing permissions and
     18  * limitations under the License.
     19  *
     20  */ /*!
     21  * \file
     22  * \brief OpenGL test context.
     23  */ /*-------------------------------------------------------------------*/
     24 
     25 #include "glcContext.hpp"
     26 #include "gluContextInfo.hpp"
     27 #include "gluDummyRenderContext.hpp"
     28 #include "gluFboRenderContext.hpp"
     29 #include "gluRenderConfig.hpp"
     30 #include "gluRenderContext.hpp"
     31 #include "glwWrapper.hpp"
     32 #include "tcuCommandLine.hpp"
     33 
     34 namespace deqp
     35 {
     36 
     37 Context::Context(tcu::TestContext& testCtx, glu::ContextType contextType)
     38 	: m_testCtx(testCtx), m_renderCtx(DE_NULL), m_contextInfo(DE_NULL)
     39 {
     40 	createRenderContext(contextType);
     41 }
     42 
     43 Context::~Context(void)
     44 {
     45 	destroyRenderContext();
     46 }
     47 
     48 void Context::createRenderContext(glu::ContextType& contextType, glu::ContextFlags ctxFlags)
     49 {
     50 	DE_ASSERT(!m_renderCtx && !m_contextInfo);
     51 
     52 	try
     53 	{
     54 		glu::RenderConfig renderCfg(glu::ContextType(contextType.getAPI(), contextType.getFlags() | ctxFlags));
     55 
     56 		glu::parseRenderConfig(&renderCfg, m_testCtx.getCommandLine());
     57 
     58 		if (m_testCtx.getCommandLine().getRunMode() != tcu::RUNMODE_EXECUTE)
     59 		{
     60 			// \todo [2016-11-16 pyry] Create DummyRenderContext instead to allow generating all case lists
     61 			//						   on a system that doesn't support some GL(ES) versions.
     62 			renderCfg.surfaceType = glu::RenderConfig::SURFACETYPE_OFFSCREEN_GENERIC;
     63 		}
     64 
     65 		m_renderCtx   = glu::createRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), renderCfg);
     66 		m_contextInfo = glu::ContextInfo::create(*m_renderCtx);
     67 
     68 		glw::setCurrentThreadFunctions(&m_renderCtx->getFunctions());
     69 	}
     70 	catch (...)
     71 	{
     72 		destroyRenderContext();
     73 		throw;
     74 	}
     75 }
     76 
     77 void Context::destroyRenderContext(void)
     78 {
     79 	delete m_contextInfo;
     80 	delete m_renderCtx;
     81 
     82 	m_contextInfo = DE_NULL;
     83 	m_renderCtx   = DE_NULL;
     84 }
     85 
     86 glu::RenderContext* Context::createSharedContext(glu::ContextFlags, glu::ResetNotificationStrategy)
     87 {
     88 	TCU_THROW(InternalError, "Not implemented");
     89 }
     90 
     91 const tcu::RenderTarget& Context::getRenderTarget(void) const
     92 {
     93 	return m_renderCtx->getRenderTarget();
     94 }
     95 
     96 } // deqp
     97