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 34namespace deqp 35{ 36 37Context::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 43Context::~Context(void) 44{ 45 destroyRenderContext(); 46} 47 48void 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 EmptyRenderContext 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 77void 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 86const tcu::RenderTarget& Context::getRenderTarget(void) const 87{ 88 return m_renderCtx->getRenderTarget(); 89} 90 91} // deqp 92