mirror of
https://github.com/OPM/ResInsight.git
synced 2025-01-05 21:53:27 -06:00
ce9a65ee41
Housekeeping in VizFwk in preparation for introducing support for QOpenGLWidget and Qt6 * Adjusted unit tests to changes in source code * Use Qt5 as default and removed copying of Qt DLLs * Removed support for Qt4 * Removed the CVF_OPENGL_ES define. If we ever want to re-introduce support fro OpenGLES/Angle it should be handled differently. *Added include of <locale.h> * Added target for running Glsl2Include in order to build cvfShaderSourceStrings.h * Removed all usage of CVF_USING_CMAKE * Removed visual studio project files
235 lines
7.0 KiB
C++
235 lines
7.0 KiB
C++
//##################################################################################################
|
|
//
|
|
// Custom Visualization Core library
|
|
// Copyright (C) 2011-2013 Ceetron AS
|
|
//
|
|
// This library may be used under the terms of either the GNU General Public License or
|
|
// the GNU Lesser General Public License as follows:
|
|
//
|
|
// GNU General Public License Usage
|
|
// This library is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
|
//
|
|
// See the GNU General Public License at <<http://www.gnu.org/licenses/gpl.html>>
|
|
// for more details.
|
|
//
|
|
// GNU Lesser General Public License Usage
|
|
// This library is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation; either version 2.1 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
|
//
|
|
// See the GNU Lesser General Public License at <<http://www.gnu.org/licenses/lgpl-2.1.html>>
|
|
// for more details.
|
|
//
|
|
//##################################################################################################
|
|
|
|
|
|
#include "cvfBase.h"
|
|
#include "cvfOpenGL.h"
|
|
#include "cvfSystem.h"
|
|
|
|
// Get rid of warnings from glew
|
|
#ifdef WIN32
|
|
#pragma warning (disable: 4706 4365 4191 4668)
|
|
#endif
|
|
|
|
CVF_GCC_DIAGNOSTIC_IGNORE("-Wconversion")
|
|
|
|
#undef glewGetContext
|
|
|
|
extern "C"
|
|
{
|
|
#include "glew/glew.c"
|
|
}
|
|
|
|
|
|
namespace cvf {
|
|
|
|
|
|
|
|
//==================================================================================================
|
|
///
|
|
/// \class cvf::OpenGL
|
|
/// \ingroup Render
|
|
///
|
|
/// Static class providing OpenGL wrappers and helpers
|
|
///
|
|
//==================================================================================================
|
|
|
|
bool OpenGL::m_enableCheckOgl = true;
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
bool OpenGL::hasOpenGLError(OpenGLContext* oglContext)
|
|
{
|
|
// glGetError will end up in an endless loop if no context is current
|
|
CVF_ASSERT(oglContext);
|
|
CVF_ASSERT(oglContext->isCurrent());
|
|
CVF_UNUSED(oglContext);
|
|
|
|
cvfGLenum err = glGetError();
|
|
if (err == GL_NO_ERROR)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
// Empty all error flags
|
|
while (err != GL_NO_ERROR)
|
|
{
|
|
err = glGetError();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void OpenGL::clearOpenGLError(OpenGLContext* oglContext)
|
|
{
|
|
// glGetError will end up in an endless loop if no context is current
|
|
CVF_ASSERT(oglContext);
|
|
CVF_ASSERT(oglContext->isCurrent());
|
|
CVF_UNUSED(oglContext);
|
|
|
|
cvfGLenum err = glGetError();
|
|
|
|
// Empty all error flags
|
|
while (err != GL_NO_ERROR)
|
|
{
|
|
err = glGetError();
|
|
}
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
String OpenGL::mapOpenGLErrorToString(cvfGLenum errorCode)
|
|
{
|
|
String errCodeStr;
|
|
|
|
switch (errorCode)
|
|
{
|
|
case GL_INVALID_ENUM: errCodeStr = "GL_INVALID_ENUM"; break;
|
|
case GL_INVALID_VALUE: errCodeStr = "GL_INVALID_VALUE"; break;
|
|
case GL_INVALID_OPERATION: errCodeStr = "GL_INVALID_OPERATION"; break;
|
|
case GL_OUT_OF_MEMORY: errCodeStr = "GL_OUT_OF_MEMORY"; break;
|
|
case GL_STACK_OVERFLOW: errCodeStr = "GL_STACK_OVERFLOW"; break;
|
|
case GL_STACK_UNDERFLOW: errCodeStr = "GL_STACK_UNDERFLOW"; break;
|
|
case GL_NO_ERROR: errCodeStr = "GL_NO_ERROR"; break;
|
|
|
|
default:
|
|
{
|
|
char szBuf[101];
|
|
System::sprintf(szBuf, 100, "0x%04x", errorCode);
|
|
errCodeStr = szBuf;
|
|
}
|
|
}
|
|
|
|
return errCodeStr;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
/// Returns false if no error.
|
|
//--------------------------------------------------------------------------------------------------
|
|
bool OpenGL::testAndReportOpenGLError(OpenGLContext* oglContext, const char* operation, const CodeLocation& codeLocation)
|
|
{
|
|
// glGetError will end up in an endless loop if no context is current
|
|
CVF_ASSERT(oglContext);
|
|
CVF_ASSERT(oglContext->isCurrent());
|
|
|
|
cvfGLenum err = glGetError();
|
|
if (err == GL_NO_ERROR)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Logger* logger = oglContext->group()->logger();
|
|
|
|
while (err != GL_NO_ERROR)
|
|
{
|
|
if (logger)
|
|
{
|
|
String errCodeStr = mapOpenGLErrorToString(err);
|
|
String msg = String("Operation: ") + operation;
|
|
msg += "OGL(" + errCodeStr + "): ";
|
|
logger->error(msg, codeLocation);
|
|
}
|
|
|
|
err = glGetError();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void OpenGL::cvf_check_ogl(OpenGLContext* oglContext, const CodeLocation& codeLocation)
|
|
{
|
|
if (OpenGL::m_enableCheckOgl)
|
|
{
|
|
cvfGLenum err = glGetError();
|
|
while (err != GL_NO_ERROR)
|
|
{
|
|
// glGetError will end up in an endless loop if no context is current
|
|
CVF_ASSERT(oglContext);
|
|
CVF_ASSERT(oglContext->isCurrent());
|
|
|
|
Logger* logger = oglContext->group()->logger();
|
|
#if defined(CVF_OSX)
|
|
if (logger && (err != GL_INVALID_FRAMEBUFFER_OPERATION))
|
|
#else
|
|
if (logger)
|
|
#endif /* defined(CVF_OSX) */
|
|
{
|
|
String errCodeStr = mapOpenGLErrorToString(err);
|
|
String msg = "OGL(" + errCodeStr + "): ";
|
|
logger->error(msg, codeLocation);
|
|
}
|
|
|
|
err = glGetError();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void OpenGL::enableCheckOgl(bool enable)
|
|
{
|
|
m_enableCheckOgl = enable;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
bool OpenGL::isCheckOglEnabled()
|
|
{
|
|
return m_enableCheckOgl;
|
|
}
|
|
|
|
|
|
} // namespace cvf
|
|
|