Add initial ogltest tool for user testing

This tool is currently very rudimentary. I pushed it because I need to
collect responses from it from users with diverse graphics
configurations, so I want the tool to be in the nightly builds.

This affects no KiCad code.
This commit is contained in:
Chris Pavlina 2017-03-29 16:19:43 -04:00
parent 8f3423b803
commit c8ef5208ee
3 changed files with 164 additions and 0 deletions

View File

@ -4,6 +4,7 @@ if( COMPILER_SUPPORTS_WSHADOW )
endif()
add_subdirectory( idftools )
add_subdirectory( kicad-ogltest )
if( KICAD_USE_OCE )
add_subdirectory( kicad2step )

View File

@ -0,0 +1,28 @@
include_directories( BEFORE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/include
${OPENGL_INCLUDE_DIR}
${Boost_INCLUDE_DIR}
)
include_directories( SYSTEM
)
set( OGLTEST_FILES
kicad-ogltest.cpp
)
add_executable( kicad-ogltest ${OGLTEST_FILES} )
target_link_libraries( kicad-ogltest ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} )
if( APPLE )
# puts binaries into the *.app bundle while linking
set_target_properties( kicad-ogltest PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_BIN_DIR}
)
else()
install( TARGETS kicad-ogltest
DESTINATION ${KICAD_BIN}
COMPONENT binary )
endif()

View File

@ -0,0 +1,135 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program 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 program 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 for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This executable tests for OpenGL compatibility. This is done in a separate
* process to contain any crashes.
*
* Early version, intended just for user testing.
*/
#include <wx/app.h>
#include <wx/debug.h>
#include <wx/settings.h>
#include <wx/glcanvas.h>
#include <wx/frame.h>
#include <wx/regex.h>
#include <iostream>
// Required OpenGL version
#define REQUIRED_MAJOR 2L
#define REQUIRED_MINOR 1L
static wxRegEx OGLVersionRegex( R"(^(\d+)\.(\d+))", wxRE_ADVANCED );
static const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 8, 0 };
class OGLTEST_APP : public wxApp
{
public:
virtual bool OnInit() override;
};
wxIMPLEMENT_APP( OGLTEST_APP );
class WX_QUIET
{
wxLogLevel m_old_level;
wxAssertHandler_t m_old_handler;
public:
WX_QUIET()
{
m_old_level = wxLog::GetLogLevel();
m_old_handler = wxTheAssertHandler;
wxTheAssertHandler = nullptr;
wxLog::SetLogLevel( wxLOG_FatalError );
}
~WX_QUIET()
{
wxLog::SetLogLevel( m_old_level );
wxTheAssertHandler = m_old_handler;
}
};
bool OGLTEST_APP::OnInit()
{
WX_QUIET be_quiet;
auto frame = new wxFrame( nullptr, wxID_ANY, "OpenGL test", wxDefaultPosition, wxDefaultSize,
wxTOPLEVEL_EX_DIALOG );
auto canvas = new wxGLCanvas( frame, wxID_ANY, &glAttributes[0] );
auto context = new wxGLContext( canvas );
frame->Show();
canvas->SetCurrent( *context );
printf( "INFO: Instantiated GL window\n" );
char* pversion = (char*) glGetString( GL_VERSION );
if( !pversion )
{
printf( "FAIL: Cannot get OpenGL version\n" );
return false;
}
wxString version = wxString::FromUTF8( pversion );
if( !OGLVersionRegex.Matches( version ) )
{
printf( "FAIL: Cannot interpret OpenGL version\n" );
return false;
}
wxString smajor = OGLVersionRegex.GetMatch( version, 1 );
wxString sminor = OGLVersionRegex.GetMatch( version, 2 );
long major, minor;
smajor.ToLong( &major );
sminor.ToLong( &minor );
if( major < REQUIRED_MAJOR || ( major == REQUIRED_MAJOR && minor < REQUIRED_MINOR ) )
{
printf( "FAIL: Found OpenGL version %ld.%ld, required at least %ld.%ld\n",
major, minor, REQUIRED_MAJOR, REQUIRED_MINOR );
return false;
}
else
{
printf( "INFO: Found OpenGL version %ld.%ld\n", major, minor );
}
bool supported = wxGLCanvas::IsDisplaySupported( &glAttributes[0] );
if( supported )
printf( "PASS\n" );
else
{
printf( "FAIL: Display settings not supported\n" );
return false;
}
return false;
}