+++ /dev/null
-/*-------------------------------------------------------------------------
- * 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 Win32 GLES3 wrapper platform.
- *//*--------------------------------------------------------------------*/
-
-#include "tcuWin32GLES3Platform.hpp"
-#include "gluRenderConfig.hpp"
-#include "gluRenderContext.hpp"
-#include "tcuRenderTarget.hpp"
-#include "gl3Context.h"
-#include "glwInitES30Direct.hpp"
-
-struct gl3PlatformContext_s
-{
- tcu::wgl::Context* context;
-
- gl3PlatformContext_s (void)
- : context(DE_NULL)
- {
- }
-};
-
-gl3FunctionPtr gl3PlatformContext_getProcAddress (gl3PlatformContext* platformCtx, const char* procName)
-{
- DE_ASSERT(platformCtx && platformCtx->context);
- return platformCtx->context->getGLFunction(procName);
-}
-
-namespace tcu
-{
-
-enum
-{
- DEFAULT_WINDOW_WIDTH = 400,
- DEFAULT_WINDOW_HEIGHT = 300
-};
-
-// Win32GLES3Context
-
-class Win32GLES3Context : public glu::RenderContext
-{
-public:
- Win32GLES3Context (const wgl::Core& wgl, HINSTANCE instance, const glu::RenderConfig& config);
- ~Win32GLES3Context (void);
-
- glu::ContextType getType (void) const { return glu::CONTEXTTYPE_ES3; }
- const RenderTarget& getRenderTarget (void) const { return m_renderTarget; }
- void postIterate (void);
- const glw::Functions& getFunctions (void) const { return m_functions; }
-
-private:
- Win32GLES3Context (const Win32GLES3Context& other);
- Win32GLES3Context& operator= (const Win32GLES3Context& other);
-
- RenderTarget m_renderTarget;
- Win32Window m_window;
-
- gl3PlatformContext m_platformCtx;
- gl3Context* m_context;
-
- glw::Functions m_functions;
-};
-
-typedef const char* (GL_APIENTRY* glGetStringHackFunc) (GLenum str);
-
-Win32GLES3Context::Win32GLES3Context (const wgl::Core& wgl, HINSTANCE instance, const glu::RenderConfig& config)
- : m_renderTarget(config.width != glu::RenderConfig::DONT_CARE ? config.width : DEFAULT_WINDOW_WIDTH,
- config.height != glu::RenderConfig::DONT_CARE ? config.height : DEFAULT_WINDOW_HEIGHT,
- PixelFormat(8, 8, 8, 8), 24, 8, 0)
- , m_window (instance, m_renderTarget.getWidth(), m_renderTarget.getHeight())
- , m_context (DE_NULL)
-{
- const HDC deviceCtx = m_window.getDeviceContext();
- const int pixelFormat = wgl::choosePixelFormat(wgl, deviceCtx, config);
-
- if (pixelFormat < 0)
- throw NotSupportedError("No compatible WGL pixel format found");
-
- m_platformCtx.context = new wgl::Context(&wgl, m_window.getDeviceContext(), wgl::PROFILE_COMPATIBILITY, 3, 3, pixelFormat);
-
- try
- {
- m_context = gl3Context_create(&m_platformCtx);
- if (!m_context)
- throw ResourceError("Failed to create GLES3 wrapper context");
-
- gl3Context_setCurrentContext(m_context);
- glw::initES30Direct(&m_functions);
-
- m_window.setVisible(config.windowVisibility != glu::RenderConfig::VISIBILITY_HIDDEN);
-
- {
- const wgl::PixelFormatInfo info = wgl.getPixelFormatInfo(deviceCtx, pixelFormat);
- const IVec2 size = m_window.getSize();
-
- m_renderTarget = tcu::RenderTarget(size.x(), size.y(),
- tcu::PixelFormat(info.redBits, info.greenBits, info.blueBits, info.alphaBits),
- info.depthBits, info.stencilBits,
- info.sampleBuffers ? info.samples : 0);
- }
- }
- catch (...)
- {
- if (m_context)
- gl3Context_destroy(m_context);
- delete m_platformCtx.context;
- throw;
- }
-}
-
-Win32GLES3Context::~Win32GLES3Context (void)
-{
- if (m_context)
- gl3Context_destroy(m_context);
-
- delete m_platformCtx.context;
-}
-
-void Win32GLES3Context::postIterate (void)
-{
- m_platformCtx.context->swapBuffers();
-}
-
-// Win32GLES3ContextFactory
-
-class Win32GLES3ContextFactory : public glu::ContextFactory
-{
-public:
- Win32GLES3ContextFactory (HINSTANCE instance);
- ~Win32GLES3ContextFactory (void);
-
- virtual glu::RenderContext* createContext (const glu::RenderConfig& config, const tcu::CommandLine& cmdLine) const;
-
-private:
- const HINSTANCE m_instance;
- wgl::Core m_wglCore;
-};
-
-Win32GLES3ContextFactory::Win32GLES3ContextFactory (HINSTANCE instance)
- : glu::ContextFactory ("gles3_wrapper", "GLES3 Wrapper Context")
- , m_instance (instance)
- , m_wglCore (instance)
-{
-}
-
-Win32GLES3ContextFactory::~Win32GLES3ContextFactory (void)
-{
-}
-
-glu::RenderContext* Win32GLES3ContextFactory::createContext (const glu::RenderConfig& config, const tcu::CommandLine&) const
-{
- if (config.type == glu::CONTEXTTYPE_ES3)
- return new Win32GLES3Context(m_wglCore, m_instance, config);
- else
- throw NotSupportedError("Unsupported rendering context type");
-}
-
-// Win32GLES3Platform
-
-Win32GLES3Platform::Win32GLES3Platform (void)
-{
- const HINSTANCE instance = GetModuleHandle(NULL);
-
- // Set priority to lower.
- SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
-
- m_glContextFactoryRegistry.registerFactory(new Win32GLES3ContextFactory(instance));
-}
-
-Win32GLES3Platform::~Win32GLES3Platform (void)
-{
-}
-
-bool Win32GLES3Platform::processEvents (void)
-{
- MSG msg;
- while (PeekMessage(&msg, NULL, 0, 0, TRUE))
- {
- DispatchMessage(&msg);
- if (msg.message == WM_QUIT)
- return false;
- }
- return true;
-}
-
-} // tcu
-
-// Platform factory
-tcu::Platform* createPlatform (void)
-{
- return new tcu::Win32GLES3Platform();
-}
+++ /dev/null
-#ifndef _TCUWIN32GLES3PLATFORM_HPP
-#define _TCUWIN32GLES3PLATFORM_HPP
-/*-------------------------------------------------------------------------
- * 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 Win32 GLES3 wrapper platform.
- *//*--------------------------------------------------------------------*/
-
-#include "tcuDefs.hpp"
-#include "tcuPlatform.hpp"
-#include "tcuWin32Window.hpp"
-#include "tcuWGL.hpp"
-#include "tcuWin32API.h"
-
-namespace tcu
-{
-
-class CommandLine;
-
-class Win32GLES3Platform : public tcu::Platform
-{
-public:
- Win32GLES3Platform (void);
- virtual ~Win32GLES3Platform (void);
-
- bool processEvents (void);
-};
-
-} // tcu
-
-#endif // _TCUWIN32GLES3PLATFORM_HPP