Merge branch 'anti-aliasing'
This commit is contained in:
commit
e99b79cb2d
|
@ -19,24 +19,6 @@ if( NOT APPLE ) # windows and linux use openssl under curl
|
|||
find_package( OpenSSL REQUIRED )
|
||||
endif()
|
||||
|
||||
|
||||
# Generate header files containing shader programs
|
||||
# Order of input files is significant
|
||||
add_custom_command(
|
||||
OUTPUT gal/opengl/shader_src.h
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DinputFiles="${PROJECT_SOURCE_DIR}/common/gal/opengl/shader.vert\\;${PROJECT_SOURCE_DIR}/common/gal/opengl/shader.frag"
|
||||
-DoutputFile="shader_src.h"
|
||||
-P ${CMAKE_MODULE_PATH}/Shaders.cmake
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/common/gal/opengl
|
||||
COMMENT "Generating headers containing GLSL source code"
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
shader_headers ALL
|
||||
DEPENDS gal/opengl/shader_src.h
|
||||
)
|
||||
|
||||
set( GAL_SRCS
|
||||
# Common part
|
||||
basic_gal.cpp
|
||||
|
@ -46,6 +28,7 @@ set( GAL_SRCS
|
|||
worksheet_viewitem.cpp
|
||||
origin_viewitem.cpp
|
||||
gl_context_mgr.cpp
|
||||
gal/gal_display_options.cpp
|
||||
gal/graphics_abstraction_layer.cpp
|
||||
gal/stroke_font.cpp
|
||||
gal/color4d.cpp
|
||||
|
@ -55,6 +38,8 @@ set( GAL_SRCS
|
|||
|
||||
# OpenGL GAL
|
||||
gal/opengl/opengl_gal.cpp
|
||||
gal/opengl/gl_resources.cpp
|
||||
gal/opengl/gl_builtin_shaders.cpp
|
||||
gal/opengl/shader.cpp
|
||||
gal/opengl/vertex_item.cpp
|
||||
gal/opengl/vertex_container.cpp
|
||||
|
@ -62,6 +47,7 @@ set( GAL_SRCS
|
|||
gal/opengl/noncached_container.cpp
|
||||
gal/opengl/vertex_manager.cpp
|
||||
gal/opengl/gpu_manager.cpp
|
||||
gal/opengl/antialiasing.cpp
|
||||
gal/opengl/opengl_compositor.cpp
|
||||
gal/opengl/utils.cpp
|
||||
|
||||
|
@ -71,7 +57,6 @@ set( GAL_SRCS
|
|||
)
|
||||
|
||||
add_library( gal STATIC ${GAL_SRCS} )
|
||||
add_dependencies( gal shader_headers )
|
||||
add_dependencies( gal lib-dependencies )
|
||||
|
||||
target_link_libraries( gal
|
||||
|
@ -252,6 +237,7 @@ set( COMMON_SRCS
|
|||
lockfile.cpp
|
||||
msgpanel.cpp
|
||||
netlist_keywords.cpp
|
||||
observable.cpp
|
||||
prependpath.cpp
|
||||
project.cpp
|
||||
properties.cpp
|
||||
|
|
|
@ -72,6 +72,8 @@ static const wxString ShowGridEntryKeyword( wxT( "ShowGrid" ) );
|
|||
static const wxString GridColorEntryKeyword( wxT( "GridColor" ) );
|
||||
/// Most recently used grid size (suffix)
|
||||
static const wxString LastGridSizeIdKeyword( wxT( "_LastGridSize" ) );
|
||||
/// GAL Display Options
|
||||
static const wxString GalDisplayOptionsKeyword( wxT( "GalDisplayOptions" ) );
|
||||
|
||||
///@}
|
||||
|
||||
|
@ -708,6 +710,8 @@ void EDA_DRAW_FRAME::LoadSettings( wxConfigBase* aCfg )
|
|||
|
||||
m_UndoRedoCountMax = aCfg->Read( baseCfgName + MaxUndoItemsEntry,
|
||||
long( DEFAULT_MAX_UNDO_ITEMS ) );
|
||||
|
||||
m_galDisplayOptions.ReadConfig( aCfg, baseCfgName + GalDisplayOptionsKeyword );
|
||||
}
|
||||
|
||||
|
||||
|
@ -724,6 +728,8 @@ void EDA_DRAW_FRAME::SaveSettings( wxConfigBase* aCfg )
|
|||
|
||||
if( GetScreen() )
|
||||
aCfg->Write( baseCfgName + MaxUndoItemsEntry, long( GetScreen()->GetMaxUndoItems() ) );
|
||||
|
||||
m_galDisplayOptions.WriteConfig( aCfg, baseCfgName + GalDisplayOptionsKeyword );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include <tool/tool_dispatcher.h>
|
||||
#include <tool/tool_manager.h>
|
||||
|
||||
#include <pcbstruct.h> // display options definition
|
||||
|
||||
#ifdef PROFILE
|
||||
#include <profile.h>
|
||||
|
@ -47,8 +48,8 @@
|
|||
|
||||
EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId,
|
||||
const wxPoint& aPosition, const wxSize& aSize,
|
||||
GAL_TYPE aGalType ) :
|
||||
wxScrolledCanvas( aParentWindow, aWindowId, aPosition, aSize )
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& aOptions, GAL_TYPE aGalType ) :
|
||||
wxScrolledCanvas( aParentWindow, aWindowId, aPosition, aSize ), m_options( aOptions )
|
||||
{
|
||||
m_parent = aParentWindow;
|
||||
m_edaFrame = dynamic_cast<EDA_DRAW_FRAME*>( aParentWindow );
|
||||
|
@ -337,7 +338,7 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
|||
switch( aGalType )
|
||||
{
|
||||
case GAL_TYPE_OPENGL:
|
||||
new_gal = new KIGFX::OPENGL_GAL( this, this, this );
|
||||
new_gal = new KIGFX::OPENGL_GAL( m_options, this, this, this );
|
||||
break;
|
||||
|
||||
case GAL_TYPE_CAIRO:
|
||||
|
|
|
@ -119,6 +119,9 @@ void CAIRO_COMPOSITOR::SetBuffer( unsigned int aBufferHandle )
|
|||
cairo_set_matrix( *m_currentContext, &m_matrix );
|
||||
}
|
||||
|
||||
void CAIRO_COMPOSITOR::Begin()
|
||||
{
|
||||
}
|
||||
|
||||
void CAIRO_COMPOSITOR::ClearBuffer()
|
||||
{
|
||||
|
@ -144,6 +147,9 @@ void CAIRO_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
|
|||
cairo_set_matrix( m_mainContext, &m_matrix );
|
||||
}
|
||||
|
||||
void CAIRO_COMPOSITOR::Present()
|
||||
{
|
||||
}
|
||||
|
||||
void CAIRO_COMPOSITOR::clean()
|
||||
{
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <gal/gal_display_options.h>
|
||||
#include <wx/config.h>
|
||||
|
||||
using namespace KIGFX;
|
||||
|
||||
static const wxString GalGLAntialiasingKeyword( wxT( "OpenGLAntialiasingMode" ) );
|
||||
|
||||
GAL_DISPLAY_OPTIONS::GAL_DISPLAY_OPTIONS()
|
||||
: gl_antialiasing_mode( OPENGL_ANTIALIASING_MODE::NONE )
|
||||
{}
|
||||
|
||||
|
||||
void GAL_DISPLAY_OPTIONS::ReadConfig( wxConfigBase* aCfg, wxString aBaseName )
|
||||
{
|
||||
aCfg->Read( aBaseName + GalGLAntialiasingKeyword,
|
||||
reinterpret_cast<long*>(&gl_antialiasing_mode),
|
||||
(long)KIGFX::OPENGL_ANTIALIASING_MODE::NONE );
|
||||
|
||||
NotifyChanged();
|
||||
}
|
||||
|
||||
|
||||
void GAL_DISPLAY_OPTIONS::WriteConfig( wxConfigBase* aCfg, wxString aBaseName )
|
||||
{
|
||||
aCfg->Write( aBaseName + GalGLAntialiasingKeyword,
|
||||
static_cast<long>(gl_antialiasing_mode) );
|
||||
}
|
||||
|
||||
|
||||
void GAL_DISPLAY_OPTIONS::NotifyChanged()
|
||||
{
|
||||
Notify( &GAL_DISPLAY_OPTIONS_OBSERVER::OnGalDisplayOptionsChanged, *this );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,132 @@
|
|||
/**
|
||||
* Copyright (C) 2013 Jorge Jimenez (jorge@iryoku.com)
|
||||
* Copyright (C) 2013 Jose I. Echevarria (joseignacioechevarria@gmail.com)
|
||||
* Copyright (C) 2013 Belen Masia (bmasia@unizar.es)
|
||||
* Copyright (C) 2013 Fernando Navarro (fernandn@microsoft.com)
|
||||
* Copyright (C) 2013 Diego Gutierrez (diegog@unizar.es)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* of the Software, and to permit persons to whom the Software is furnished to
|
||||
* do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software. As clarification, there
|
||||
* is no requirement that the copyright notice and permission be included in
|
||||
* binary distributions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SEARCHTEX_H
|
||||
#define SEARCHTEX_H
|
||||
|
||||
#define SEARCHTEX_WIDTH 64
|
||||
#define SEARCHTEX_HEIGHT 16
|
||||
#define SEARCHTEX_PITCH SEARCHTEX_WIDTH
|
||||
#define SEARCHTEX_SIZE (SEARCHTEX_HEIGHT * SEARCHTEX_PITCH)
|
||||
|
||||
/**
|
||||
* Stored in R8 format. Load it in the following format:
|
||||
* - DX9: D3DFMT_L8
|
||||
* - DX10: DXGI_FORMAT_R8_UNORM
|
||||
*/
|
||||
static const unsigned char searchTexBytes[] = {
|
||||
0xfe, 0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x7f, 0x7f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0xfe, 0x7f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xfe,
|
||||
0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xfe, 0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x7f, 0x7f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0xfe, 0x7f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xfe,
|
||||
0xfe, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f,
|
||||
0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f,
|
||||
0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f,
|
||||
0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,523 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <gal/opengl/antialiasing.h>
|
||||
#include <gal/opengl/opengl_compositor.h>
|
||||
#include <gal/opengl/utils.h>
|
||||
|
||||
#include <tuple>
|
||||
|
||||
#include "gl_builtin_shaders.h"
|
||||
#include "SmaaAreaTex.h"
|
||||
#include "SmaaSearchTex.h"
|
||||
|
||||
using namespace KIGFX;
|
||||
|
||||
// =========================
|
||||
// ANTIALIASING_NONE
|
||||
// =========================
|
||||
|
||||
ANTIALIASING_NONE::ANTIALIASING_NONE( OPENGL_COMPOSITOR* aCompositor )
|
||||
: compositor( aCompositor )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool ANTIALIASING_NONE::Init()
|
||||
{
|
||||
// Nothing to initialize
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
VECTOR2U ANTIALIASING_NONE::GetInternalBufferSize()
|
||||
{
|
||||
return compositor->GetScreenSize();
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_NONE::DrawBuffer( GLuint buffer )
|
||||
{
|
||||
compositor->DrawBuffer( buffer, OPENGL_COMPOSITOR::DIRECT_RENDERING );
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_NONE::Present()
|
||||
{
|
||||
// Nothing to present, draw_buffer already drew to the screen
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_NONE::OnLostBuffers()
|
||||
{
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_NONE::Begin()
|
||||
{
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
|
||||
unsigned int ANTIALIASING_NONE::CreateBuffer()
|
||||
{
|
||||
return compositor->CreateBuffer( compositor->GetScreenSize() );
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
void draw_fullscreen_primitive()
|
||||
{
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
|
||||
glBegin( GL_TRIANGLES );
|
||||
glTexCoord2f( 0.0f, 1.0f );
|
||||
glVertex2f( -1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 0.0f );
|
||||
glVertex2f( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 1.0f );
|
||||
glVertex2f( 1.0f, 1.0f );
|
||||
|
||||
glTexCoord2f( 1.0f, 1.0f );
|
||||
glVertex2f( 1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 0.0f );
|
||||
glVertex2f( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 0.0f );
|
||||
glVertex2f( 1.0f, -1.0f );
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// =========================
|
||||
// ANTIALIASING_SUPERSAMPLING
|
||||
// =========================
|
||||
|
||||
ANTIALIASING_SUPERSAMPLING::ANTIALIASING_SUPERSAMPLING( OPENGL_COMPOSITOR* aCompositor,
|
||||
SUPERSAMPLING_MODE aMode )
|
||||
: compositor( aCompositor ), mode( aMode ), areBuffersCreated( false ),
|
||||
areShadersCreated( false )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool ANTIALIASING_SUPERSAMPLING::Init()
|
||||
{
|
||||
if( mode == SUPERSAMPLING_MODE::X4 && !areShadersCreated )
|
||||
{
|
||||
x4_shader.reset( new SHADER() );
|
||||
x4_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_VERTEX, BUILTIN_SHADERS::ssaa_x4_vertex_shader );
|
||||
x4_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_FRAGMENT, BUILTIN_SHADERS::ssaa_x4_fragment_shader );
|
||||
x4_shader->Link();
|
||||
checkGlError( "linking supersampling x4 shader" );
|
||||
|
||||
GLint source_parameter = x4_shader->AddParameter( "source" ); checkGlError( "getting pass 1 colorTex" );
|
||||
|
||||
x4_shader->Use(); checkGlError( "using pass 1 shader" );
|
||||
x4_shader->SetParameter( source_parameter, 0 ); checkGlError( "setting colorTex uniform" );
|
||||
x4_shader->Deactivate(); checkGlError( "deactivating pass 2 shader" );
|
||||
|
||||
areShadersCreated = true;
|
||||
}
|
||||
|
||||
if( areShadersCreated && mode != SUPERSAMPLING_MODE::X4 )
|
||||
{
|
||||
x4_shader.reset();
|
||||
areShadersCreated = false;
|
||||
}
|
||||
|
||||
if( !areBuffersCreated )
|
||||
{
|
||||
ssaaMainBuffer = compositor->CreateBuffer();
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
|
||||
areBuffersCreated = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
VECTOR2U ANTIALIASING_SUPERSAMPLING::GetInternalBufferSize()
|
||||
{
|
||||
unsigned int factor = ( mode == SUPERSAMPLING_MODE::X2 ) ? 2 : 4;
|
||||
return compositor->GetScreenSize() * factor;
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SUPERSAMPLING::Begin()
|
||||
{
|
||||
compositor->SetBuffer( ssaaMainBuffer );
|
||||
compositor->ClearBuffer();
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SUPERSAMPLING::DrawBuffer( GLuint aBuffer )
|
||||
{
|
||||
compositor->DrawBuffer( aBuffer, ssaaMainBuffer );
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SUPERSAMPLING::Present()
|
||||
{
|
||||
glDisable( GL_BLEND );
|
||||
glDisable( GL_DEPTH_TEST );
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
glBindTexture( GL_TEXTURE_2D, compositor->GetBufferTexture( ssaaMainBuffer ) );
|
||||
compositor->SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
|
||||
|
||||
if( mode == SUPERSAMPLING_MODE::X4 )
|
||||
{
|
||||
x4_shader->Use();
|
||||
checkGlError( "activating supersampling x4 shader" );
|
||||
}
|
||||
|
||||
draw_fullscreen_primitive();
|
||||
|
||||
if( mode == SUPERSAMPLING_MODE::X4 )
|
||||
{
|
||||
x4_shader->Deactivate();
|
||||
checkGlError( "deactivating supersampling x4 shader" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SUPERSAMPLING::OnLostBuffers()
|
||||
{
|
||||
areBuffersCreated = false;
|
||||
}
|
||||
|
||||
|
||||
unsigned int ANTIALIASING_SUPERSAMPLING::CreateBuffer()
|
||||
{
|
||||
return compositor->CreateBuffer( GetInternalBufferSize() );
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// ANTIALIASING_SMAA
|
||||
// ===============================
|
||||
|
||||
ANTIALIASING_SMAA::ANTIALIASING_SMAA( OPENGL_COMPOSITOR* aCompositor, SMAA_QUALITY aQuality )
|
||||
: areBuffersInitialized( false ), shadersLoaded( false ),
|
||||
quality( aQuality ), compositor( aCompositor )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
VECTOR2U ANTIALIASING_SMAA::GetInternalBufferSize()
|
||||
{
|
||||
return compositor->GetScreenSize();
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::loadShaders()
|
||||
{
|
||||
// Load constant textures
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
|
||||
glGenTextures( 1, &smaaAreaTex );
|
||||
glBindTexture( GL_TEXTURE_2D, smaaAreaTex );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RG8, AREATEX_WIDTH, AREATEX_HEIGHT, 0, GL_RG, GL_UNSIGNED_BYTE, areaTexBytes );
|
||||
checkGlError( "loading smaa area tex" );
|
||||
|
||||
glGenTextures( 1, &smaaSearchTex );
|
||||
glBindTexture( GL_TEXTURE_2D, smaaSearchTex );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_R8, SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT, 0, GL_RED, GL_UNSIGNED_BYTE, searchTexBytes );
|
||||
checkGlError( "loading smaa search tex" );
|
||||
|
||||
std::string quality_string;
|
||||
|
||||
if( quality == SMAA_QUALITY::HIGH )
|
||||
{
|
||||
quality_string = "#define SMAA_PRESET_HIGH\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
quality_string = "#define SMAA_PRESET_ULTRA\n";
|
||||
}
|
||||
|
||||
|
||||
// set up shaders
|
||||
std::string vert_preamble( R"SHADER(
|
||||
#version 120
|
||||
#define SMAA_GLSL_2_1
|
||||
#define SMAA_INCLUDE_VS 1
|
||||
#define SMAA_INCLUDE_PS 0
|
||||
uniform vec4 SMAA_RT_METRICS;
|
||||
)SHADER" );
|
||||
|
||||
std::string frag_preamble( R"SHADER(
|
||||
#version 120
|
||||
#define SMAA_GLSL_2_1
|
||||
#define SMAA_INCLUDE_VS 0
|
||||
#define SMAA_INCLUDE_PS 1
|
||||
uniform vec4 SMAA_RT_METRICS;
|
||||
)SHADER" );
|
||||
|
||||
std::string smaa_source =
|
||||
std::string( BUILTIN_SHADERS::smaa_base_shader_p1 )
|
||||
+ std::string( BUILTIN_SHADERS::smaa_base_shader_p2 )
|
||||
+ std::string( BUILTIN_SHADERS::smaa_base_shader_p3 )
|
||||
+ std::string( BUILTIN_SHADERS::smaa_base_shader_p4 );
|
||||
|
||||
//
|
||||
// Set up pass 1 Shader
|
||||
//
|
||||
pass_1_shader.reset( new SHADER() );
|
||||
pass_1_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_VERTEX, vert_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_1_vertex_shader );
|
||||
pass_1_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_FRAGMENT, frag_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_1_fragment_shader );
|
||||
pass_1_shader->Link();
|
||||
checkGlError( "linking pass 1 shader" );
|
||||
|
||||
GLint smaaColorTexParameter = pass_1_shader->AddParameter( "colorTex" ); checkGlError( "pass1: getting colorTex uniform" );
|
||||
pass_1_metrics = pass_1_shader->AddParameter( "SMAA_RT_METRICS" ); checkGlError( "pass1: getting metrics uniform" );
|
||||
|
||||
pass_1_shader->Use(); checkGlError( "pass1: using shader" );
|
||||
pass_1_shader->SetParameter( smaaColorTexParameter, 0 ); checkGlError( "pass1: setting colorTex uniform" );
|
||||
pass_1_shader->Deactivate(); checkGlError( "pass1: deactivating shader" );
|
||||
|
||||
//
|
||||
// set up pass 2 shader
|
||||
//
|
||||
pass_2_shader.reset( new SHADER() );
|
||||
pass_2_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_VERTEX, vert_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_2_vertex_shader );
|
||||
pass_2_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_FRAGMENT, frag_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_2_fragment_shader );
|
||||
pass_2_shader->Link();
|
||||
checkGlError( "linking pass 2 shader" );
|
||||
|
||||
GLint smaaEdgesTexParameter = pass_2_shader->AddParameter( "edgesTex" ); checkGlError( "pass2: getting colorTex uniform" );
|
||||
GLint smaaAreaTexParameter = pass_2_shader->AddParameter( "areaTex" ); checkGlError( "pass2: getting areaTex uniform" );
|
||||
GLint smaaSearchTexParameter = pass_2_shader->AddParameter( "searchTex" ); checkGlError( "pass2: getting searchTex uniform" );
|
||||
pass_2_metrics = pass_2_shader->AddParameter( "SMAA_RT_METRICS" ); checkGlError( "pass2: getting metrics uniform" );
|
||||
|
||||
pass_2_shader->Use(); checkGlError( "pass2: using shader" );
|
||||
pass_2_shader->SetParameter( smaaEdgesTexParameter, 0 ); checkGlError( "pass2: setting colorTex uniform" );
|
||||
pass_2_shader->SetParameter( smaaAreaTexParameter, 1 ); checkGlError( "pass2: setting areaTex uniform" );
|
||||
pass_2_shader->SetParameter( smaaSearchTexParameter, 3 ); checkGlError( "pass2: setting searchTex uniform" );
|
||||
pass_2_shader->Deactivate(); checkGlError( "pass2: deactivating shader" );
|
||||
|
||||
//
|
||||
// set up pass 3 shader
|
||||
//
|
||||
pass_3_shader.reset( new SHADER() );
|
||||
pass_3_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_VERTEX, vert_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_3_vertex_shader );
|
||||
pass_3_shader->LoadShaderFromStrings( KIGFX::SHADER_TYPE_FRAGMENT, frag_preamble,
|
||||
quality_string, smaa_source, BUILTIN_SHADERS::smaa_pass_3_fragment_shader );
|
||||
pass_3_shader->Link();
|
||||
|
||||
GLint smaaP3ColorTexParameter = pass_3_shader->AddParameter( "colorTex" ); checkGlError( "pass3: getting colorTex uniform" );
|
||||
GLint smaaBlendTexParameter = pass_3_shader->AddParameter( "blendTex" ); checkGlError( "pass3: getting blendTex uniform" );
|
||||
pass_3_metrics = pass_3_shader->AddParameter( "SMAA_RT_METRICS" ); checkGlError( "pass3: getting metrics uniform" );
|
||||
|
||||
pass_3_shader->Use(); checkGlError( "pass3: using shader" );
|
||||
pass_3_shader->SetParameter( smaaP3ColorTexParameter, 0 ); checkGlError( "pass3: setting colorTex uniform" );
|
||||
pass_3_shader->SetParameter( smaaBlendTexParameter, 1 ); checkGlError( "pass3: setting blendTex uniform" );
|
||||
pass_3_shader->Deactivate(); checkGlError( "pass3: deactivating shader" );
|
||||
|
||||
shadersLoaded = true;
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::updateUniforms()
|
||||
{
|
||||
auto dims = compositor->GetScreenSize();
|
||||
|
||||
pass_1_shader->Use(); checkGlError( "pass1: using shader" );
|
||||
pass_1_shader->SetParameter( pass_1_metrics,
|
||||
1.f / float( dims.x ), 1.f / float( dims.y ), float( dims.x ), float( dims.y ) ); checkGlError( "pass1: setting metrics uniform" );
|
||||
pass_1_shader->Deactivate(); checkGlError( "pass1: deactivating shader" );
|
||||
|
||||
pass_2_shader->Use(); checkGlError( "pass2: using shader" );
|
||||
pass_2_shader->SetParameter( pass_2_metrics,
|
||||
1.f / float( dims.x ), 1.f / float( dims.y ), float( dims.x ), float( dims.y ) ); checkGlError( "pass2: setting metrics uniform" );
|
||||
pass_2_shader->Deactivate(); checkGlError( "pass2: deactivating shader" );
|
||||
|
||||
pass_3_shader->Use(); checkGlError( "pass3: using shader" );
|
||||
pass_3_shader->SetParameter( pass_3_metrics,
|
||||
1.f / float( dims.x ), 1.f / float( dims.y ), float( dims.x ), float( dims.y ) ); checkGlError( "pass3: setting metrics uniform" );
|
||||
pass_3_shader->Deactivate(); checkGlError( "pass3: deactivating shader" );
|
||||
}
|
||||
|
||||
|
||||
bool ANTIALIASING_SMAA::Init()
|
||||
{
|
||||
if( !shadersLoaded )
|
||||
loadShaders();
|
||||
|
||||
if( !areBuffersInitialized )
|
||||
{
|
||||
smaaBaseBuffer = compositor->CreateBuffer();
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
|
||||
smaaEdgesBuffer = compositor->CreateBuffer();
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
|
||||
smaaBlendBuffer = compositor->CreateBuffer();
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
|
||||
updateUniforms();
|
||||
areBuffersInitialized = true;
|
||||
}
|
||||
|
||||
// Nothing to initialize
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::OnLostBuffers()
|
||||
{
|
||||
areBuffersInitialized = false;
|
||||
}
|
||||
|
||||
|
||||
unsigned int ANTIALIASING_SMAA::CreateBuffer()
|
||||
{
|
||||
return compositor->CreateBuffer( compositor->GetScreenSize() );
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::DrawBuffer( GLuint buffer )
|
||||
{
|
||||
// draw to internal buffer
|
||||
compositor->DrawBuffer( buffer, smaaBaseBuffer );
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::Begin()
|
||||
{
|
||||
compositor->SetBuffer( smaaBaseBuffer );
|
||||
compositor->ClearBuffer();
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
void draw_fullscreen_triangle()
|
||||
{
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
glBegin( GL_TRIANGLES );
|
||||
glTexCoord2f( 0.0f, 1.0f );
|
||||
glVertex2f( -1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, -1.0f );
|
||||
glVertex2f( -1.0f, -3.0f );
|
||||
glTexCoord2f( 2.0f, 1.0f );
|
||||
glVertex2f( 3.0f, 1.0f );
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ANTIALIASING_SMAA::Present()
|
||||
{
|
||||
auto sourceTexture = compositor->GetBufferTexture( smaaBaseBuffer );
|
||||
|
||||
glDisable( GL_BLEND );
|
||||
glDisable( GL_DEPTH_TEST );
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
|
||||
//
|
||||
// pass 1: main-buffer -> smaaEdgesBuffer
|
||||
//
|
||||
compositor->SetBuffer( smaaEdgesBuffer );
|
||||
compositor->ClearBuffer();
|
||||
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
glBindTexture( GL_TEXTURE_2D, sourceTexture ); checkGlError( "binding colorTex" );
|
||||
pass_1_shader->Use(); checkGlError( "using smaa pass 1 shader" );
|
||||
draw_fullscreen_triangle();
|
||||
pass_1_shader->Deactivate();
|
||||
|
||||
//
|
||||
// pass 2: smaaEdgesBuffer -> smaaBlendBuffer
|
||||
//
|
||||
compositor->SetBuffer( smaaBlendBuffer );
|
||||
compositor->ClearBuffer();
|
||||
|
||||
auto edgesTex = compositor->GetBufferTexture( smaaEdgesBuffer );
|
||||
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
glBindTexture( GL_TEXTURE_2D, edgesTex );
|
||||
glActiveTexture( GL_TEXTURE1 );
|
||||
glBindTexture( GL_TEXTURE_2D, smaaAreaTex );
|
||||
glActiveTexture( GL_TEXTURE3 );
|
||||
glBindTexture( GL_TEXTURE_2D, smaaSearchTex );
|
||||
|
||||
pass_2_shader->Use();
|
||||
draw_fullscreen_triangle();
|
||||
pass_2_shader->Deactivate();
|
||||
|
||||
//
|
||||
// pass 3: colorTex + BlendBuffer -> output
|
||||
//
|
||||
compositor->SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
|
||||
compositor->ClearBuffer();
|
||||
auto blendTex = compositor->GetBufferTexture( smaaBlendBuffer );
|
||||
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
glBindTexture( GL_TEXTURE_2D, sourceTexture );
|
||||
glActiveTexture( GL_TEXTURE1 );
|
||||
glBindTexture( GL_TEXTURE_2D, blendTex );
|
||||
|
||||
pass_3_shader->Use();
|
||||
draw_fullscreen_triangle();
|
||||
pass_3_shader->Deactivate();
|
||||
}
|
|
@ -0,0 +1,153 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef OPENGL_ANTIALIASING_H__
|
||||
#define OPENGL_ANTIALIASING_H__
|
||||
|
||||
#include <memory>
|
||||
#include <gal/opengl/shader.h>
|
||||
#include <math/vector2d.h>
|
||||
|
||||
namespace KIGFX {
|
||||
|
||||
class OPENGL_COMPOSITOR;
|
||||
|
||||
class OPENGL_PRESENTOR
|
||||
{
|
||||
public:
|
||||
virtual bool Init() = 0;
|
||||
virtual unsigned int CreateBuffer() = 0;
|
||||
|
||||
virtual VECTOR2U GetInternalBufferSize() = 0;
|
||||
virtual void OnLostBuffers() = 0;
|
||||
|
||||
virtual void Begin() = 0;
|
||||
virtual void DrawBuffer( GLuint aBuffer ) = 0;
|
||||
virtual void Present() = 0;
|
||||
};
|
||||
|
||||
|
||||
class ANTIALIASING_NONE : public OPENGL_PRESENTOR
|
||||
{
|
||||
public:
|
||||
ANTIALIASING_NONE( OPENGL_COMPOSITOR* aCompositor );
|
||||
|
||||
bool Init() override;
|
||||
unsigned int CreateBuffer() override;
|
||||
|
||||
VECTOR2U GetInternalBufferSize() override;
|
||||
void OnLostBuffers() override;
|
||||
|
||||
void Begin() override;
|
||||
void DrawBuffer( GLuint aBuffer ) override;
|
||||
void Present() override;
|
||||
|
||||
private:
|
||||
OPENGL_COMPOSITOR* compositor;
|
||||
};
|
||||
|
||||
enum class SUPERSAMPLING_MODE {
|
||||
X2,
|
||||
X4
|
||||
};
|
||||
|
||||
|
||||
class ANTIALIASING_SUPERSAMPLING : public OPENGL_PRESENTOR
|
||||
{
|
||||
public:
|
||||
ANTIALIASING_SUPERSAMPLING( OPENGL_COMPOSITOR* aCompositor, SUPERSAMPLING_MODE aMode );
|
||||
|
||||
bool Init() override;
|
||||
unsigned int CreateBuffer() override;
|
||||
|
||||
VECTOR2U GetInternalBufferSize() override;
|
||||
void OnLostBuffers() override;
|
||||
|
||||
void Begin() override;
|
||||
void DrawBuffer( GLuint ) override;
|
||||
void Present() override;
|
||||
|
||||
private:
|
||||
OPENGL_COMPOSITOR* compositor;
|
||||
SUPERSAMPLING_MODE mode;
|
||||
|
||||
unsigned int ssaaMainBuffer;
|
||||
bool areBuffersCreated;
|
||||
|
||||
bool areShadersCreated;
|
||||
std::unique_ptr<SHADER> x4_shader;
|
||||
};
|
||||
|
||||
enum class SMAA_QUALITY {
|
||||
HIGH,
|
||||
ULTRA
|
||||
};
|
||||
|
||||
class ANTIALIASING_SMAA : public OPENGL_PRESENTOR
|
||||
{
|
||||
public:
|
||||
ANTIALIASING_SMAA( OPENGL_COMPOSITOR* aCompositor, SMAA_QUALITY aQuality );
|
||||
|
||||
bool Init() override;
|
||||
unsigned int CreateBuffer () override;
|
||||
|
||||
VECTOR2U GetInternalBufferSize() override;
|
||||
void OnLostBuffers() override;
|
||||
|
||||
void Begin() override;
|
||||
void DrawBuffer( GLuint buffer ) override;
|
||||
void Present() override;
|
||||
|
||||
private:
|
||||
void loadShaders();
|
||||
void updateUniforms();
|
||||
|
||||
bool areBuffersInitialized; //
|
||||
bool isInitialized; // shaders linked
|
||||
|
||||
unsigned int smaaBaseBuffer; // base + overlay temporary
|
||||
unsigned int smaaEdgesBuffer;
|
||||
unsigned int smaaBlendBuffer;
|
||||
|
||||
// smaa shader lookup textures
|
||||
unsigned int smaaAreaTex;
|
||||
unsigned int smaaSearchTex;
|
||||
|
||||
bool shadersLoaded;
|
||||
|
||||
std::unique_ptr<SHADER> pass_1_shader;
|
||||
GLint pass_1_metrics;
|
||||
|
||||
std::unique_ptr<SHADER> pass_2_shader;
|
||||
GLint pass_2_metrics;
|
||||
|
||||
std::unique_ptr<SHADER> pass_3_shader;
|
||||
GLint pass_3_metrics;
|
||||
|
||||
SMAA_QUALITY quality;
|
||||
OPENGL_COMPOSITOR* compositor;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,19 +1,11 @@
|
|||
// Generated by msdf-atlasgen, do not modify.
|
||||
static const struct {
|
||||
unsigned int smooth_pixels;
|
||||
float min_y;
|
||||
float max_y;
|
||||
} font_information = {
|
||||
FONT_INFO_TYPE font_information = {
|
||||
1,
|
||||
-8.16f,
|
||||
39.84f
|
||||
};
|
||||
|
||||
static const struct bitmap_span {
|
||||
unsigned int start;
|
||||
unsigned int end;
|
||||
unsigned int cumulative;
|
||||
} font_codepoint_spans[] = {
|
||||
FONT_SPAN_TYPE font_codepoint_spans[] = {
|
||||
{ 33, 127, 0 },
|
||||
{ 161, 592, 94 },
|
||||
{ 658, 659, 525 },
|
||||
|
@ -105,13 +97,7 @@ static const struct bitmap_span {
|
|||
{ 65533, 65534, 1216 }
|
||||
};
|
||||
|
||||
static const struct bitmap_glyph {
|
||||
unsigned int atlas_x, atlas_y;
|
||||
unsigned int atlas_w, atlas_h;
|
||||
float minx, maxx;
|
||||
float miny, maxy;
|
||||
float advance;
|
||||
} font_codepoint_infos[] = {
|
||||
FONT_GLYPH_TYPE font_codepoint_infos[] = {
|
||||
{ 129, 991, 9, 33, 8.6880f, 15.1200f, -0.5760f, 29.7120f, 24.0000f },
|
||||
{ 77, 440, 14, 14, 6.1920f, 17.8080f, 20.6400f, 32.5920f, 24.0000f },
|
||||
{ 763, 479, 24, 32, 1.2960f, 22.7040f, 0.0000f, 29.7120f, 24.0000f },
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef GAL_GL_BUILTIN_SHADERS_H__
|
||||
#define GAL_GL_BUILTIN_SHADERS_H__
|
||||
|
||||
namespace KIGFX {
|
||||
|
||||
namespace BUILTIN_SHADERS {
|
||||
|
||||
extern const char kicad_vertex_shader[];
|
||||
extern const char kicad_fragment_shader[];
|
||||
|
||||
extern const char ssaa_x4_vertex_shader[];
|
||||
extern const char ssaa_x4_fragment_shader[];
|
||||
|
||||
extern const char smaa_base_shader_p1[];
|
||||
extern const char smaa_base_shader_p2[];
|
||||
extern const char smaa_base_shader_p3[];
|
||||
extern const char smaa_base_shader_p4[];
|
||||
|
||||
extern const char smaa_pass_1_vertex_shader[];
|
||||
extern const char smaa_pass_1_fragment_shader[];
|
||||
extern const char smaa_pass_2_vertex_shader[];
|
||||
extern const char smaa_pass_2_fragment_shader[];
|
||||
extern const char smaa_pass_3_vertex_shader[];
|
||||
extern const char smaa_pass_3_fragment_shader[];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
// The current font is "Ubuntu Mono" available under Ubuntu Font Licence 1.0
|
||||
// (see ubuntu-font-licence-1.0.txt for details)
|
||||
#include <algorithm>
|
||||
#include "gl_resources.h"
|
||||
|
||||
#define BITMAP_FONT_USE_SPANS
|
||||
|
||||
namespace KIGFX {
|
||||
namespace BUILTIN_FONT {
|
||||
|
||||
#include "bitmap_font_img.c"
|
||||
#include "bitmap_font_desc.c"
|
||||
|
||||
const FONT_GLYPH_TYPE* LookupGlyph( unsigned int aCodepoint )
|
||||
{
|
||||
#ifdef BITMAP_FONT_USE_SPANS
|
||||
auto *end = font_codepoint_spans
|
||||
+ sizeof( font_codepoint_spans ) / sizeof(FONT_SPAN_TYPE);
|
||||
auto ptr = std::upper_bound( font_codepoint_spans, end, aCodepoint,
|
||||
[]( unsigned int codepoint, const FONT_SPAN_TYPE& span )
|
||||
{
|
||||
return codepoint < span.end;
|
||||
}
|
||||
);
|
||||
|
||||
if( ptr != end && ptr->start <= aCodepoint )
|
||||
{
|
||||
unsigned int index = aCodepoint - ptr->start + ptr->cumulative;
|
||||
return &font_codepoint_infos[ index ];
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
#else
|
||||
return &bitmap_chars[codepoint];
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef GAL_OPENGL_RESOURCES_H___
|
||||
#define GAL_OPENGL_RESOURCES_H___
|
||||
|
||||
#define BITMAP_FONT_USE_SPANS
|
||||
|
||||
namespace KIGFX {
|
||||
|
||||
namespace BUILTIN_FONT {
|
||||
|
||||
struct FONT_IMAGE_TYPE
|
||||
{
|
||||
unsigned int width, height;
|
||||
unsigned int char_border;
|
||||
unsigned int spacing;
|
||||
unsigned char pixels[1024 * 1024 * 3];
|
||||
};
|
||||
|
||||
struct FONT_INFO_TYPE
|
||||
{
|
||||
unsigned int smooth_pixels;
|
||||
float min_y;
|
||||
float max_y;
|
||||
};
|
||||
|
||||
struct FONT_SPAN_TYPE
|
||||
{
|
||||
unsigned int start;
|
||||
unsigned int end;
|
||||
unsigned int cumulative;
|
||||
};
|
||||
|
||||
struct FONT_GLYPH_TYPE
|
||||
{
|
||||
unsigned int atlas_x, atlas_y;
|
||||
unsigned int atlas_w, atlas_h;
|
||||
float minx, maxx;
|
||||
float miny, maxy;
|
||||
float advance;
|
||||
};
|
||||
|
||||
extern FONT_IMAGE_TYPE font_image;
|
||||
extern FONT_INFO_TYPE font_information;
|
||||
|
||||
const FONT_GLYPH_TYPE* LookupGlyph( unsigned int aCodePoint );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2016 CERN
|
||||
|
@ -40,6 +40,7 @@ OPENGL_COMPOSITOR::OPENGL_COMPOSITOR() :
|
|||
m_initialized( false ), m_curBuffer( 0 ),
|
||||
m_mainFbo( 0 ), m_depthBuffer( 0 ), m_curFbo( DIRECT_RENDERING )
|
||||
{
|
||||
m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,12 +50,43 @@ OPENGL_COMPOSITOR::~OPENGL_COMPOSITOR()
|
|||
clean();
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::SetAntialiasingMode( OPENGL_ANTIALIASING_MODE aMode )
|
||||
{
|
||||
m_currentAntialiasingMode = aMode;
|
||||
if(m_initialized)
|
||||
clean();
|
||||
}
|
||||
|
||||
OPENGL_ANTIALIASING_MODE OPENGL_COMPOSITOR::GetAntialiasingMode() const
|
||||
{
|
||||
return m_currentAntialiasingMode;
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::Initialize()
|
||||
{
|
||||
if( m_initialized )
|
||||
return;
|
||||
|
||||
switch(m_currentAntialiasingMode) {
|
||||
case OPENGL_ANTIALIASING_MODE::NONE:
|
||||
m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
|
||||
break;
|
||||
case OPENGL_ANTIALIASING_MODE::SUBSAMPLE_HIGH:
|
||||
m_antialiasing.reset( new ANTIALIASING_SMAA( this, SMAA_QUALITY::HIGH ) );
|
||||
break;
|
||||
case OPENGL_ANTIALIASING_MODE::SUBSAMPLE_ULTRA:
|
||||
m_antialiasing.reset( new ANTIALIASING_SMAA( this, SMAA_QUALITY::ULTRA ) );
|
||||
break;
|
||||
case OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X2:
|
||||
m_antialiasing.reset( new ANTIALIASING_SUPERSAMPLING( this, SUPERSAMPLING_MODE::X2 ) );
|
||||
break;
|
||||
case OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X4:
|
||||
m_antialiasing.reset( new ANTIALIASING_SUPERSAMPLING( this, SUPERSAMPLING_MODE::X4 ) );
|
||||
break;
|
||||
}
|
||||
|
||||
VECTOR2U dims = m_antialiasing->GetInternalBufferSize();
|
||||
|
||||
// We need framebuffer objects for drawing the screen contents
|
||||
// Generate framebuffer and a depth buffer
|
||||
glGenFramebuffersEXT( 1, &m_mainFbo );
|
||||
|
@ -68,7 +100,7 @@ void OPENGL_COMPOSITOR::Initialize()
|
|||
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_depthBuffer );
|
||||
checkGlError( "binding renderbuffer" );
|
||||
|
||||
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8, m_width, m_height );
|
||||
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8, dims.x, dims.y );
|
||||
checkGlError( "creating renderbuffer storage" );
|
||||
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT,
|
||||
GL_RENDERBUFFER_EXT, m_depthBuffer );
|
||||
|
@ -78,6 +110,8 @@ void OPENGL_COMPOSITOR::Initialize()
|
|||
bindFb( DIRECT_RENDERING );
|
||||
|
||||
m_initialized = true;
|
||||
|
||||
m_antialiasing->Init();
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,12 +120,18 @@ void OPENGL_COMPOSITOR::Resize( unsigned int aWidth, unsigned int aHeight )
|
|||
if( m_initialized )
|
||||
clean();
|
||||
|
||||
m_antialiasing->OnLostBuffers();
|
||||
|
||||
m_width = aWidth;
|
||||
m_height = aHeight;
|
||||
}
|
||||
|
||||
|
||||
unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
||||
{
|
||||
return m_antialiasing->CreateBuffer();
|
||||
}
|
||||
|
||||
unsigned int OPENGL_COMPOSITOR::CreateBuffer( VECTOR2U aDimensions )
|
||||
{
|
||||
assert( m_initialized );
|
||||
|
||||
|
@ -109,7 +149,7 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
|
||||
glGetIntegerv( GL_MAX_TEXTURE_SIZE, (GLint*) &maxTextureSize );
|
||||
|
||||
if( maxTextureSize < (int) m_width || maxTextureSize < (int) m_height )
|
||||
if( maxTextureSize < (int) aDimensions.x || maxTextureSize < (int) aDimensions.y )
|
||||
{
|
||||
throw std::runtime_error( "Requested texture size is not supported. "
|
||||
"Could not create a buffer." );
|
||||
|
@ -120,6 +160,7 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
GLuint textureTarget;
|
||||
|
||||
// Generate the texture for the pixel storage
|
||||
glActiveTexture( GL_TEXTURE0 );
|
||||
glGenTextures( 1, &textureTarget );
|
||||
checkGlError( "generating framebuffer texture target" );
|
||||
glBindTexture( GL_TEXTURE_2D, textureTarget );
|
||||
|
@ -127,7 +168,7 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
|
||||
// Set texture parameters
|
||||
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA,
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, aDimensions.x, aDimensions.y, 0, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE, NULL );
|
||||
checkGlError( "creating framebuffer texture" );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
|
||||
|
@ -146,11 +187,11 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
switch( status )
|
||||
{
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
|
||||
throw std::runtime_error( "Cannot create the framebuffer." );
|
||||
throw std::runtime_error( "The framebuffer attachment points are incomplete." );
|
||||
break;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
|
||||
throw std::runtime_error( "The framebuffer attachment points are incomplete." );
|
||||
throw std::runtime_error( "No images attached to the framebuffer." );
|
||||
break;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
|
||||
|
@ -176,8 +217,12 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
throw std::runtime_error( "Framebuffer incomplete layer targets errors." );
|
||||
break;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
|
||||
throw std::runtime_error( "Framebuffer attachments have different dimensions" );
|
||||
break;
|
||||
|
||||
default:
|
||||
throw std::runtime_error( "Cannot create the framebuffer." );
|
||||
throw std::runtime_error( "Unknown error occurred when creating the framebuffer." );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -190,12 +235,17 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
|
|||
bindFb( DIRECT_RENDERING );
|
||||
|
||||
// Store the new buffer
|
||||
OPENGL_BUFFER buffer = { textureTarget, attachmentPoint };
|
||||
OPENGL_BUFFER buffer = { aDimensions, textureTarget, attachmentPoint };
|
||||
m_buffers.push_back( buffer );
|
||||
|
||||
return usedBuffers();
|
||||
}
|
||||
|
||||
GLenum OPENGL_COMPOSITOR::GetBufferTexture( unsigned int aBufferHandle )
|
||||
{
|
||||
assert( aBufferHandle > 0 && aBufferHandle <= usedBuffers() );
|
||||
return m_buffers[aBufferHandle - 1].textureTarget;
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::SetBuffer( unsigned int aBufferHandle )
|
||||
{
|
||||
|
@ -211,9 +261,15 @@ void OPENGL_COMPOSITOR::SetBuffer( unsigned int aBufferHandle )
|
|||
m_curBuffer = aBufferHandle - 1;
|
||||
glDrawBuffer( m_buffers[m_curBuffer].attachmentPoint );
|
||||
checkGlError( "setting draw buffer" );
|
||||
}
|
||||
}
|
||||
|
||||
glViewport( 0, 0,
|
||||
m_buffers[m_curBuffer].dimensions.x, m_buffers[m_curBuffer].dimensions.y );
|
||||
} else {
|
||||
glViewport( 0, 0, GetScreenSize().x, GetScreenSize().y );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::ClearBuffer()
|
||||
{
|
||||
|
@ -223,14 +279,29 @@ void OPENGL_COMPOSITOR::ClearBuffer()
|
|||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
|
||||
}
|
||||
|
||||
VECTOR2U OPENGL_COMPOSITOR::GetScreenSize() const
|
||||
{
|
||||
return{ m_width, m_height };
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::Begin()
|
||||
{
|
||||
m_antialiasing->Begin();
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
|
||||
{
|
||||
assert( m_initialized );
|
||||
assert( aBufferHandle != 0 && aBufferHandle <= usedBuffers() );
|
||||
m_antialiasing->DrawBuffer( aBufferHandle );
|
||||
}
|
||||
|
||||
// Switch to the main framebuffer and blit the scene
|
||||
bindFb( DIRECT_RENDERING );
|
||||
void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aSourceHandle, unsigned int aDestHandle )
|
||||
{
|
||||
assert( m_initialized );
|
||||
assert( aSourceHandle != 0 && aSourceHandle <= usedBuffers() );
|
||||
assert (aDestHandle <= usedBuffers() );
|
||||
|
||||
// Switch to the destination buffer and blit the scene
|
||||
SetBuffer ( aDestHandle );
|
||||
|
||||
// Depth test has to be disabled to make transparency working
|
||||
glDisable( GL_DEPTH_TEST );
|
||||
|
@ -238,7 +309,7 @@ void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
|
|||
|
||||
// Enable texturing and bind the main texture
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glBindTexture( GL_TEXTURE_2D, m_buffers[aBufferHandle - 1].textureTarget );
|
||||
glBindTexture( GL_TEXTURE_2D, m_buffers[aSourceHandle - 1].textureTarget );
|
||||
|
||||
// Draw a full screen quad with the texture
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
|
@ -249,19 +320,19 @@ void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
|
|||
glLoadIdentity();
|
||||
|
||||
glBegin( GL_TRIANGLES );
|
||||
glTexCoord2f( 0.0f, 1.0f );
|
||||
glVertex2f( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 1.0f );
|
||||
glVertex2f( 1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 0.0f );
|
||||
glVertex2f( 1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 1.0f );
|
||||
glVertex2f ( -1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 0.0f );
|
||||
glVertex2f ( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 1.0f );
|
||||
glVertex2f ( 1.0f, 1.0f );
|
||||
|
||||
glTexCoord2f( 0.0f, 1.0f );
|
||||
glVertex2f( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 0.0f );
|
||||
glVertex2f( 1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 0.0f );
|
||||
glVertex2f( -1.0f, 1.0f );
|
||||
glTexCoord2f( 1.0f, 1.0f );
|
||||
glVertex2f ( 1.0f, 1.0f );
|
||||
glTexCoord2f( 0.0f, 0.0f );
|
||||
glVertex2f ( -1.0f, -1.0f );
|
||||
glTexCoord2f( 1.0f, 0.0f );
|
||||
glVertex2f ( 1.0f, -1.0f );
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
|
@ -269,6 +340,10 @@ void OPENGL_COMPOSITOR::DrawBuffer( unsigned int aBufferHandle )
|
|||
glPopMatrix();
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::Present()
|
||||
{
|
||||
m_antialiasing->Present();
|
||||
}
|
||||
|
||||
void OPENGL_COMPOSITOR::bindFb( unsigned int aFb ) {
|
||||
// Currently there are only 2 valid FBOs
|
||||
|
|
|
@ -45,11 +45,12 @@ using namespace std::placeholders;
|
|||
|
||||
using namespace KIGFX;
|
||||
|
||||
|
||||
// The current font is "Ubuntu Mono" available under Ubuntu Font Licence 1.0
|
||||
// (see ubuntu-font-licence-1.0.txt for details)
|
||||
#define BITMAP_FONT_USE_SPANS
|
||||
#include "bitmap_font_img.c"
|
||||
#include "bitmap_font_desc.c"
|
||||
#include "gl_resources.h"
|
||||
#include "gl_builtin_shaders.h"
|
||||
using namespace KIGFX::BUILTIN_FONT;
|
||||
|
||||
static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
|
||||
static const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 8, 0 };
|
||||
|
@ -61,12 +62,12 @@ bool OPENGL_GAL::isBitmapFontLoaded = false;
|
|||
SHADER* OPENGL_GAL::shader = NULL;
|
||||
|
||||
|
||||
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||
wxEvtHandler* aPaintListener, const wxString& aName ) :
|
||||
OPENGL_GAL::OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
|
||||
wxEvtHandler* aMouseListener, wxEvtHandler* aPaintListener,
|
||||
const wxString& aName ) :
|
||||
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
|
||||
wxEXPAND, aName ),
|
||||
mouseListener( aMouseListener ),
|
||||
paintListener( aPaintListener )
|
||||
options( aDisplayOptions ), mouseListener( aMouseListener ), paintListener( aPaintListener )
|
||||
{
|
||||
if( glMainContext == NULL )
|
||||
{
|
||||
|
@ -93,6 +94,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
|||
overlayManager->SetShader( *shader );
|
||||
|
||||
compositor = new OPENGL_COMPOSITOR;
|
||||
compositor->SetAntialiasingMode( options.gl_antialiasing_mode );
|
||||
|
||||
// Initialize the flags
|
||||
isFramebufferInitialized = false;
|
||||
|
@ -104,6 +106,8 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
|||
SetViewWantsBestResolution( true );
|
||||
#endif
|
||||
|
||||
observerLink = options.Subscribe( this );
|
||||
|
||||
// Connecting the event handlers
|
||||
Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) );
|
||||
|
||||
|
@ -186,6 +190,15 @@ OPENGL_GAL::~OPENGL_GAL()
|
|||
|
||||
}
|
||||
|
||||
void OPENGL_GAL::OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& aDisplayOptions )
|
||||
{
|
||||
if(options.gl_antialiasing_mode != compositor->GetAntialiasingMode())
|
||||
{
|
||||
compositor->SetAntialiasingMode( options.gl_antialiasing_mode );
|
||||
isFramebufferInitialized = false;
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void OPENGL_GAL::BeginDrawing()
|
||||
{
|
||||
|
@ -198,19 +211,12 @@ void OPENGL_GAL::BeginDrawing()
|
|||
|
||||
GL_CONTEXT_MANAGER::Get().LockCtx( glPrivContext, this );
|
||||
|
||||
#ifdef RETINA_OPENGL_PATCH
|
||||
const float scaleFactor = GetBackingScaleFactor();
|
||||
#else
|
||||
const float scaleFactor = 1.0f;
|
||||
#endif
|
||||
|
||||
// Set up the view port
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glLoadIdentity();
|
||||
glViewport( 0, 0, (GLsizei) screenSize.x * scaleFactor, (GLsizei) screenSize.y * scaleFactor );
|
||||
|
||||
// Create the screen transformation
|
||||
glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y, -depthRange.x, -depthRange.y );
|
||||
// Create the screen transformation (Do the RH-LH conversion here)
|
||||
glOrtho( 0, (GLint) screenSize.x, (GLsizei) screenSize.y, 0, -depthRange.x, -depthRange.y );
|
||||
|
||||
if( !isFramebufferInitialized )
|
||||
{
|
||||
|
@ -222,6 +228,8 @@ void OPENGL_GAL::BeginDrawing()
|
|||
isFramebufferInitialized = true;
|
||||
}
|
||||
|
||||
compositor->Begin();
|
||||
|
||||
// Disable 2D Textures
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
|
||||
|
@ -303,6 +311,10 @@ void OPENGL_GAL::BeginDrawing()
|
|||
isBitmapFontInitialized = true;
|
||||
}
|
||||
|
||||
// Something betreen BeginDrawing and EndDrawing seems to depend on
|
||||
// this texture unit being active, but it does not assure it itself.
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
// Unbind buffers - set compositor for direct drawing
|
||||
compositor->SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
|
||||
|
||||
|
@ -335,7 +347,8 @@ void OPENGL_GAL::EndDrawing()
|
|||
// Draw the remaining contents, blit the rendering targets to the screen, swap the buffers
|
||||
compositor->DrawBuffer( mainBuffer );
|
||||
compositor->DrawBuffer( overlayBuffer );
|
||||
blitCursor();
|
||||
compositor->Present();
|
||||
//blitCursor();
|
||||
|
||||
SwapBuffers();
|
||||
GL_CONTEXT_MANAGER::Get().UnlockCtx( glPrivContext );
|
||||
|
@ -808,7 +821,7 @@ void OPENGL_GAL::BitmapText( const wxString& aText, const VECTOR2D& aPosition,
|
|||
{
|
||||
const unsigned int c = aText[ii];
|
||||
|
||||
wxASSERT_MSG( lookupGlyph(c) != nullptr, wxT( "Missing character in bitmap font atlas." ) );
|
||||
wxASSERT_MSG( LookupGlyph(c) != nullptr, wxT( "Missing character in bitmap font atlas." ) );
|
||||
wxASSERT_MSG( c != '\n' && c != '\r', wxT( "No support for multiline bitmap text yet" ) );
|
||||
|
||||
// Handle overbar
|
||||
|
@ -1317,7 +1330,7 @@ int OPENGL_GAL::drawBitmapChar( unsigned long aChar )
|
|||
const float TEX_X = font_image.width;
|
||||
const float TEX_Y = font_image.height;
|
||||
|
||||
const bitmap_glyph* glyph = lookupGlyph(aChar);
|
||||
const FONT_GLYPH_TYPE* glyph = LookupGlyph(aChar);
|
||||
if( !glyph ) return 0;
|
||||
|
||||
const float X = glyph->atlas_x + font_information.smooth_pixels;
|
||||
|
@ -1371,7 +1384,7 @@ int OPENGL_GAL::drawBitmapChar( unsigned long aChar )
|
|||
void OPENGL_GAL::drawBitmapOverbar( double aLength, double aHeight )
|
||||
{
|
||||
// To draw an overbar, simply draw an overbar
|
||||
const bitmap_glyph* glyph = lookupGlyph( '_' );
|
||||
const FONT_GLYPH_TYPE* glyph = LookupGlyph( '_' );
|
||||
const float H = glyph->maxy - glyph->miny;
|
||||
|
||||
Save();
|
||||
|
@ -1394,31 +1407,6 @@ void OPENGL_GAL::drawBitmapOverbar( double aLength, double aHeight )
|
|||
Restore();
|
||||
}
|
||||
|
||||
const bitmap_glyph* OPENGL_GAL::lookupGlyph( unsigned int aCodepoint ) const
|
||||
{
|
||||
#ifdef BITMAP_FONT_USE_SPANS
|
||||
auto *end = font_codepoint_spans + sizeof( font_codepoint_spans ) / sizeof( bitmap_span );
|
||||
auto ptr = std::upper_bound( font_codepoint_spans, end, aCodepoint,
|
||||
[]( unsigned int codepoint, const bitmap_span& span )
|
||||
{
|
||||
return codepoint < span.end;
|
||||
}
|
||||
);
|
||||
|
||||
if( ptr != end && ptr->start <= aCodepoint )
|
||||
{
|
||||
unsigned int index = aCodepoint - ptr->start + ptr->cumulative;
|
||||
return &font_codepoint_infos[index];
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
#else
|
||||
return &bitmap_chars[codepoint];
|
||||
#endif
|
||||
}
|
||||
|
||||
std::pair<VECTOR2D, float> OPENGL_GAL::computeBitmapTextSize( const wxString& aText ) const
|
||||
{
|
||||
VECTOR2D textSize( 0, 0 );
|
||||
|
@ -1444,7 +1432,7 @@ std::pair<VECTOR2D, float> OPENGL_GAL::computeBitmapTextSize( const wxString& aT
|
|||
}
|
||||
}
|
||||
|
||||
const bitmap_glyph* glyph = lookupGlyph(aText[i]);
|
||||
const FONT_GLYPH_TYPE* glyph = LookupGlyph(aText[i]);
|
||||
if( glyph ) {
|
||||
textSize.x += glyph->advance;
|
||||
textSize.y = std::max<float>( textSize.y, font_information.max_y - glyph->miny );
|
||||
|
@ -1583,10 +1571,10 @@ void OPENGL_GAL::OPENGL_TEST::Render( wxPaintEvent& WXUNUSED( aEvent ) )
|
|||
error( "Vertex buffer objects are not supported!" );
|
||||
|
||||
// Prepare shaders
|
||||
else if( !m_gal->shader->IsLinked() && !m_gal->shader->LoadBuiltinShader( 0, SHADER_TYPE_VERTEX ) )
|
||||
else if( !m_gal->shader->IsLinked() && !m_gal->shader->LoadShaderFromStrings( SHADER_TYPE_VERTEX, BUILTIN_SHADERS::kicad_vertex_shader ) )
|
||||
error( "Cannot compile vertex shader!" );
|
||||
|
||||
else if( !m_gal->shader->IsLinked() && !m_gal->shader->LoadBuiltinShader( 1, SHADER_TYPE_FRAGMENT ) )
|
||||
else if( !m_gal->shader->IsLinked() && !m_gal->shader->LoadShaderFromStrings(SHADER_TYPE_FRAGMENT, BUILTIN_SHADERS::kicad_fragment_shader ) )
|
||||
error( "Cannot compile fragment shader!" );
|
||||
|
||||
else if( !m_gal->shader->IsLinked() && !m_gal->shader->Link() )
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
#include <cassert>
|
||||
|
||||
#include <gal/opengl/shader.h>
|
||||
#include "shader_src.h"
|
||||
|
||||
using namespace KIGFX;
|
||||
|
||||
|
@ -76,22 +75,12 @@ SHADER::~SHADER()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
bool SHADER::LoadBuiltinShader( unsigned int aShaderNumber, SHADER_TYPE aShaderType )
|
||||
{
|
||||
if( aShaderNumber >= shaders_number )
|
||||
return false;
|
||||
|
||||
return addSource( std::string( shaders_src[aShaderNumber] ), aShaderType );
|
||||
}
|
||||
|
||||
|
||||
bool SHADER::LoadShaderFromFile( const std::string& aShaderSourceName, SHADER_TYPE aShaderType )
|
||||
bool SHADER::LoadShaderFromFile( SHADER_TYPE aShaderType, const std::string& aShaderSourceName )
|
||||
{
|
||||
// Load shader sources
|
||||
const std::string shaderSource = readSource( aShaderSourceName );
|
||||
const std::string shaderSource = ReadSource( aShaderSourceName );
|
||||
|
||||
return addSource( shaderSource, aShaderType );
|
||||
return LoadShaderFromStrings( aShaderType, shaderSource );
|
||||
}
|
||||
|
||||
|
||||
|
@ -160,6 +149,12 @@ void SHADER::SetParameter( int parameterNumber, int value ) const
|
|||
glUniform1i( parameterLocation[parameterNumber], value );
|
||||
}
|
||||
|
||||
void SHADER::SetParameter( int parameterNumber, float f0, float f1, float f2, float f3 ) const
|
||||
{
|
||||
assert( (unsigned)parameterNumber < parameterLocation.size() );
|
||||
float arr[4] = { f0, f1, f2, f3 };
|
||||
glUniform4fv( parameterLocation[parameterNumber], 1, arr );
|
||||
}
|
||||
|
||||
int SHADER::GetAttribute( std::string aAttributeName ) const
|
||||
{
|
||||
|
@ -209,7 +204,7 @@ void SHADER::shaderInfo( GLuint aShader )
|
|||
}
|
||||
|
||||
|
||||
std::string SHADER::readSource( std::string aShaderSourceName )
|
||||
std::string SHADER::ReadSource( const std::string& aShaderSourceName )
|
||||
{
|
||||
// Open the shader source for reading
|
||||
std::ifstream inputFile( aShaderSourceName.c_str(), std::ifstream::in );
|
||||
|
@ -231,7 +226,8 @@ std::string SHADER::readSource( std::string aShaderSourceName )
|
|||
}
|
||||
|
||||
|
||||
bool SHADER::addSource( const std::string& aShaderSource, SHADER_TYPE aShaderType )
|
||||
bool SHADER::loadShaderFromStringArray( SHADER_TYPE aShaderType, const char* const* aArray,
|
||||
size_t aSize )
|
||||
{
|
||||
assert( !isShaderLinked );
|
||||
|
||||
|
@ -249,18 +245,10 @@ bool SHADER::addSource( const std::string& aShaderSource, SHADER_TYPE aShaderTyp
|
|||
// Get the program info
|
||||
programInfo( programNumber );
|
||||
|
||||
// Copy to char array
|
||||
char* source = new char[aShaderSource.size() + 1];
|
||||
strncpy( source, aShaderSource.c_str(), aShaderSource.size() + 1 );
|
||||
const char** source_ = (const char**) ( &source );
|
||||
|
||||
// Attach the source
|
||||
glShaderSource( shaderNumber, 1, source_, NULL );
|
||||
// Attach the sources
|
||||
glShaderSource( shaderNumber, aSize, aArray, NULL );
|
||||
programInfo( programNumber );
|
||||
|
||||
// Delete the allocated char array
|
||||
delete[] source;
|
||||
|
||||
// Compile and attach shader to the program
|
||||
glCompileShader( shaderNumber );
|
||||
GLint status;
|
||||
|
|
|
@ -1,109 +0,0 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2016 CERN
|
||||
* Copyright (C) 2016 Kicad Developers, see authors.txt for contributors.
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
* Fragment shader
|
||||
*
|
||||
* 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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#version 120
|
||||
|
||||
// Multi-channel signed distance field
|
||||
#define USE_MSDF
|
||||
|
||||
// Shader types
|
||||
const float SHADER_LINE = 1.0;
|
||||
const float SHADER_FILLED_CIRCLE = 2.0;
|
||||
const float SHADER_STROKED_CIRCLE = 3.0;
|
||||
const float SHADER_FONT = 4.0;
|
||||
|
||||
varying vec4 shaderParams;
|
||||
varying vec2 circleCoords;
|
||||
uniform sampler2D fontTexture;
|
||||
|
||||
// Needed to reconstruct the mipmap level / texel derivative
|
||||
uniform int fontTextureWidth;
|
||||
|
||||
void filledCircle( vec2 aCoord )
|
||||
{
|
||||
if( dot( aCoord, aCoord ) < 1.0 )
|
||||
gl_FragColor = gl_Color;
|
||||
else
|
||||
discard;
|
||||
}
|
||||
|
||||
|
||||
void strokedCircle( vec2 aCoord, float aRadius, float aWidth )
|
||||
{
|
||||
float outerRadius = aRadius + ( aWidth / 2 );
|
||||
float innerRadius = aRadius - ( aWidth / 2 );
|
||||
float relWidth = innerRadius / outerRadius;
|
||||
|
||||
if( ( dot( aCoord, aCoord ) < 1.0 ) &&
|
||||
( dot( aCoord, aCoord ) > relWidth * relWidth ) )
|
||||
gl_FragColor = gl_Color;
|
||||
else
|
||||
discard;
|
||||
}
|
||||
|
||||
#ifdef USE_MSDF
|
||||
float median( vec3 v )
|
||||
{
|
||||
return max( min( v.r, v.g ), min( max( v.r, v.g ), v.b ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
if( shaderParams[0] == SHADER_FILLED_CIRCLE )
|
||||
{
|
||||
filledCircle( circleCoords );
|
||||
}
|
||||
else if( shaderParams[0] == SHADER_STROKED_CIRCLE )
|
||||
{
|
||||
strokedCircle( circleCoords, shaderParams[2], shaderParams[3] );
|
||||
}
|
||||
else if( shaderParams[0] == SHADER_FONT )
|
||||
{
|
||||
vec2 tex = shaderParams.yz;
|
||||
|
||||
// Unless we're streching chars it is okay to consider
|
||||
// one derivative for filtering
|
||||
float derivative = length( dFdx( tex ) ) * fontTextureWidth / 4;
|
||||
|
||||
#ifdef USE_MSDF
|
||||
float dist = median( texture2D( fontTexture, tex ).rgb );
|
||||
#else
|
||||
float dist = texture2D( fontTexture, tex ).r;
|
||||
#endif
|
||||
|
||||
// use the derivative for zoom-adaptive filtering
|
||||
float alpha = smoothstep( 0.5 - derivative, 0.5 + derivative, dist );
|
||||
|
||||
gl_FragColor = vec4( gl_Color.rgb, alpha );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Simple pass-through
|
||||
gl_FragColor = gl_Color;
|
||||
}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2016 CERN
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
* Vertex shader
|
||||
*
|
||||
* 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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#version 120
|
||||
|
||||
// Shader types
|
||||
const float SHADER_LINE = 1.0;
|
||||
const float SHADER_FILLED_CIRCLE = 2.0;
|
||||
const float SHADER_STROKED_CIRCLE = 3.0;
|
||||
const float SHADER_FONT = 4.0;
|
||||
|
||||
// Minimum line width
|
||||
const float MIN_WIDTH = 1.0;
|
||||
|
||||
attribute vec4 attrShaderParams;
|
||||
varying vec4 shaderParams;
|
||||
varying vec2 circleCoords;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Pass attributes to the fragment shader
|
||||
shaderParams = attrShaderParams;
|
||||
|
||||
if( shaderParams[0] == SHADER_LINE )
|
||||
{
|
||||
float lineWidth = shaderParams[3];
|
||||
float worldScale = abs( gl_ModelViewMatrix[0][0] );
|
||||
|
||||
// Make lines appear to be at least 1 pixel wide
|
||||
if( worldScale * lineWidth < MIN_WIDTH )
|
||||
gl_Position = gl_ModelViewProjectionMatrix *
|
||||
( gl_Vertex + vec4( shaderParams.yz * MIN_WIDTH / ( worldScale * lineWidth ), 0.0, 0.0 ) );
|
||||
else
|
||||
gl_Position = gl_ModelViewProjectionMatrix *
|
||||
( gl_Vertex + vec4( shaderParams.yz, 0.0, 0.0 ) );
|
||||
}
|
||||
else if( ( shaderParams[0] == SHADER_STROKED_CIRCLE ) ||
|
||||
( shaderParams[0] == SHADER_FILLED_CIRCLE ) )
|
||||
{
|
||||
// Compute relative circle coordinates basing on indices
|
||||
// Circle
|
||||
if( shaderParams[1] == 1.0 )
|
||||
circleCoords = vec2( -sqrt( 3.0 ), -1.0 );
|
||||
else if( shaderParams[1] == 2.0 )
|
||||
circleCoords = vec2( sqrt( 3.0 ), -1.0 );
|
||||
else if( shaderParams[1] == 3.0 )
|
||||
circleCoords = vec2( 0.0, 2.0 );
|
||||
|
||||
// Semicircle
|
||||
else if( shaderParams[1] == 4.0 )
|
||||
circleCoords = vec2( -3.0 / sqrt( 3.0 ), 0.0 );
|
||||
else if( shaderParams[1] == 5.0 )
|
||||
circleCoords = vec2( 3.0 / sqrt( 3.0 ), 0.0 );
|
||||
else if( shaderParams[1] == 6.0 )
|
||||
circleCoords = vec2( 0.0, 2.0 );
|
||||
|
||||
// Make the line appear to be at least 1 pixel wide
|
||||
float lineWidth = shaderParams[3];
|
||||
float worldScale = abs( gl_ModelViewMatrix[0][0] );
|
||||
|
||||
if( worldScale * lineWidth < MIN_WIDTH )
|
||||
shaderParams[3] = shaderParams[3] / ( worldScale * lineWidth );
|
||||
|
||||
gl_Position = ftransform();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pass through the coordinates like in the fixed pipeline
|
||||
gl_Position = ftransform();
|
||||
}
|
||||
|
||||
gl_FrontColor = gl_Color;
|
||||
}
|
|
@ -0,0 +1,260 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "observable.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace UTIL {
|
||||
|
||||
namespace DETAIL {
|
||||
|
||||
template< typename T >
|
||||
struct equals {
|
||||
equals( const T& val ) : val_( val ) {}
|
||||
|
||||
bool operator()( const T& val )
|
||||
{
|
||||
return val == val_;
|
||||
}
|
||||
|
||||
private:
|
||||
const T& val_;
|
||||
};
|
||||
|
||||
|
||||
OBSERVABLE_BASE::IMPL::IMPL( OBSERVABLE_BASE* owned_by )
|
||||
: iteration_count_( 0 ), owned_by_( owned_by )
|
||||
{}
|
||||
|
||||
|
||||
bool OBSERVABLE_BASE::IMPL::is_shared() const
|
||||
{
|
||||
return owned_by_ == nullptr;
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::set_shared()
|
||||
{
|
||||
owned_by_ = nullptr;
|
||||
}
|
||||
|
||||
|
||||
OBSERVABLE_BASE::IMPL::~IMPL()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::enter_iteration()
|
||||
{
|
||||
++iteration_count_;
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::leave_iteration()
|
||||
{
|
||||
--iteration_count_;
|
||||
|
||||
if( iteration_count_ == 0 )
|
||||
collect();
|
||||
}
|
||||
|
||||
|
||||
bool OBSERVABLE_BASE::IMPL::is_iterating() const
|
||||
{
|
||||
return iteration_count_ != 0;
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::add_observer( void* observer )
|
||||
{
|
||||
assert( !is_iterating() );
|
||||
observers_.push_back( observer );
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::remove_observer( void* observer )
|
||||
{
|
||||
auto it = std::find( observers_.begin(), observers_.end(), observer );
|
||||
|
||||
if( is_iterating() )
|
||||
*it = nullptr;
|
||||
else
|
||||
observers_.erase( it );
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::IMPL::collect()
|
||||
{
|
||||
auto it = std::remove_if( observers_.begin(), observers_.end(), DETAIL::equals<void*>( nullptr ) );
|
||||
observers_.erase( it, observers_.end() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LINK::LINK()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LINK::LINK( std::shared_ptr<DETAIL::OBSERVABLE_BASE::IMPL> token, void* observer )
|
||||
: token_( std::move( token ) ), observer_( observer )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LINK::LINK( LINK&& other )
|
||||
: token_( std::move( other.token_ ) ), observer_( other.observer_ )
|
||||
{
|
||||
other.token_.reset();
|
||||
}
|
||||
|
||||
|
||||
LINK& LINK::operator=( LINK&& other )
|
||||
{
|
||||
token_ = std::move( other.token_ );
|
||||
other.token_.reset();
|
||||
observer_ = other.observer_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
LINK::operator bool() const
|
||||
{
|
||||
return token_ ? true : false;
|
||||
}
|
||||
|
||||
|
||||
LINK::~LINK()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
void LINK::reset()
|
||||
{
|
||||
if(token_)
|
||||
{
|
||||
token_->remove_observer( observer_ );
|
||||
token_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace DETAIL {
|
||||
|
||||
OBSERVABLE_BASE::OBSERVABLE_BASE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
OBSERVABLE_BASE::OBSERVABLE_BASE( OBSERVABLE_BASE& other )
|
||||
: impl_( other.get_shared_impl() )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
OBSERVABLE_BASE::~OBSERVABLE_BASE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::allocate_impl()
|
||||
{
|
||||
if(!impl_)
|
||||
impl_ = std::make_shared<IMPL>( this );
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::allocate_shared_impl()
|
||||
{
|
||||
if(!impl_)
|
||||
impl_ = std::make_shared<IMPL>();
|
||||
else
|
||||
impl_->set_shared();
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::deallocate_impl() {
|
||||
impl_.reset();
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<OBSERVABLE_BASE::IMPL> OBSERVABLE_BASE::get_shared_impl()
|
||||
{
|
||||
allocate_shared_impl();
|
||||
return impl_;
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::add_observer( void* observer )
|
||||
{
|
||||
allocate_impl();
|
||||
impl_->add_observer( observer );
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::remove_observer( void* observer )
|
||||
{
|
||||
assert( impl_ );
|
||||
impl_->remove_observer( observer );
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::enter_iteration()
|
||||
{
|
||||
if( impl_ )
|
||||
impl_->enter_iteration();
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::leave_iteration()
|
||||
{
|
||||
if( impl_)
|
||||
{
|
||||
impl_->leave_iteration();
|
||||
|
||||
if( !impl_->is_iterating() && !impl_->is_shared() && impl_.use_count() == 1 )
|
||||
impl_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
size_t OBSERVABLE_BASE::size() const
|
||||
{
|
||||
if( impl_ )
|
||||
return impl_->observers_.size();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void OBSERVABLE_BASE::on_observers_empty()
|
||||
{
|
||||
// called by an impl that is owned by this, ie. it is a non-shared impl
|
||||
// also it is not iterating
|
||||
deallocate_impl();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -48,6 +48,7 @@ class VIEW;
|
|||
class WX_VIEW_CONTROLS;
|
||||
class VIEW_CONTROLS;
|
||||
class PAINTER;
|
||||
class GAL_DISPLAY_OPTIONS;
|
||||
};
|
||||
|
||||
|
||||
|
@ -62,7 +63,8 @@ public:
|
|||
};
|
||||
|
||||
EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId, const wxPoint& aPosition,
|
||||
const wxSize& aSize, GAL_TYPE aGalType = GAL_TYPE_OPENGL );
|
||||
const wxSize& aSize, KIGFX::GAL_DISPLAY_OPTIONS& aOptions,
|
||||
GAL_TYPE aGalType = GAL_TYPE_OPENGL );
|
||||
~EDA_DRAW_PANEL_GAL();
|
||||
|
||||
virtual void SetFocus() override;
|
||||
|
@ -243,6 +245,7 @@ protected:
|
|||
|
||||
/// Currently used GAL
|
||||
GAL_TYPE m_backend;
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& m_options;
|
||||
|
||||
/// Processes and forwards events to tools
|
||||
TOOL_DISPATCHER* m_eventDispatcher;
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <wxstruct.h>
|
||||
#include <kiway_player.h>
|
||||
#include <climits>
|
||||
#include <gal/gal_display_options.h>
|
||||
|
||||
class wxSingleInstanceChecker;
|
||||
class EDA_HOTKEY;
|
||||
|
@ -56,6 +57,7 @@ class EDA_DRAW_FRAME : public KIWAY_PLAYER
|
|||
bool m_galCanvasActive; ///< whether to use new GAL engine
|
||||
|
||||
EDA_DRAW_PANEL_GAL* m_galCanvas;
|
||||
KIGFX::GAL_DISPLAY_OPTIONS m_galDisplayOptions;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -813,6 +815,12 @@ public:
|
|||
*/
|
||||
virtual void* GetDisplayOptions() { return NULL; }
|
||||
|
||||
/**
|
||||
* Function GetGalDisplayOptions
|
||||
* Returns a reference to the gal rendering options used by GAL for rendering.
|
||||
*/
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& GetGalDisplayOptions() { return m_galDisplayOptions; }
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
|
|
|
@ -62,12 +62,18 @@ public:
|
|||
/// @copydoc COMPOSITOR::SetBuffer()
|
||||
virtual void SetBuffer( unsigned int aBufferHandle ) override;
|
||||
|
||||
/// @copydoc COMPOSITOR::Begin()
|
||||
virtual void Begin() override;
|
||||
|
||||
/// @copydoc COMPOSITOR::ClearBuffer()
|
||||
virtual void ClearBuffer() override;
|
||||
|
||||
/// @copydoc COMPOSITOR::DrawBuffer()
|
||||
virtual void DrawBuffer( unsigned int aBufferHandle ) override;
|
||||
|
||||
/// @copydoc COMPOSITOR::Present()
|
||||
virtual void Present() override;
|
||||
|
||||
/**
|
||||
* Function SetMainContext()
|
||||
* Sets a context to be treated as the main context (ie. as a target of buffers rendering and
|
||||
|
|
|
@ -88,14 +88,26 @@ public:
|
|||
*/
|
||||
virtual void ClearBuffer() = 0;
|
||||
|
||||
/**
|
||||
* Function Begin()
|
||||
* Call this at the beginning of each frame
|
||||
*/
|
||||
virtual void Begin() = 0;
|
||||
|
||||
/**
|
||||
* Function DrawBuffer()
|
||||
* draws the selected buffer on the screen.
|
||||
* draws the selected buffer to the output buffer.
|
||||
*
|
||||
* @param aBufferHandle is the handle of the buffer to be drawn.
|
||||
*/
|
||||
virtual void DrawBuffer( unsigned int aBufferHandle ) = 0;
|
||||
|
||||
/**
|
||||
* Function Present()
|
||||
* Call this to present the output buffer to the screen.
|
||||
*/
|
||||
virtual void Present() = 0;
|
||||
|
||||
protected:
|
||||
unsigned int m_width; ///< Width of the buffer (in pixels)
|
||||
unsigned int m_height; ///< Height of the buffer (in pixels)
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef GAL_DISPLAY_OPTIONS_H__
|
||||
#define GAL_DISPLAY_OPTIONS_H__
|
||||
|
||||
#include <observable.h>
|
||||
|
||||
class wxConfigBase;
|
||||
class wxString;
|
||||
|
||||
namespace KIGFX {
|
||||
|
||||
class GAL_DISPLAY_OPTIONS;
|
||||
|
||||
enum class OPENGL_ANTIALIASING_MODE : long
|
||||
{
|
||||
NONE = 0,
|
||||
SUBSAMPLE_HIGH = 1,
|
||||
SUBSAMPLE_ULTRA = 2,
|
||||
SUPERSAMPLING_X2 = 3,
|
||||
SUPERSAMPLING_X4 = 4
|
||||
};
|
||||
|
||||
class GAL_DISPLAY_OPTIONS_OBSERVER
|
||||
{
|
||||
public:
|
||||
virtual void OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& ) = 0;
|
||||
};
|
||||
|
||||
class GAL_DISPLAY_OPTIONS : public UTIL::OBSERVABLE<GAL_DISPLAY_OPTIONS_OBSERVER>
|
||||
{
|
||||
public:
|
||||
GAL_DISPLAY_OPTIONS();
|
||||
|
||||
OPENGL_ANTIALIASING_MODE gl_antialiasing_mode;
|
||||
|
||||
void ReadConfig ( wxConfigBase* aCfg, wxString aBaseName );
|
||||
void WriteConfig( wxConfigBase* aCfg, wxString aBaseName );
|
||||
|
||||
void NotifyChanged();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -32,11 +32,14 @@
|
|||
#define OPENGL_COMPOSITOR_H_
|
||||
|
||||
#include <gal/compositor.h>
|
||||
#include <gal/opengl/antialiasing.h>
|
||||
#include <gal/gal_display_options.h>
|
||||
#include <GL/glew.h>
|
||||
#include <deque>
|
||||
|
||||
namespace KIGFX
|
||||
{
|
||||
|
||||
class OPENGL_COMPOSITOR : public COMPOSITOR
|
||||
{
|
||||
public:
|
||||
|
@ -70,13 +73,29 @@ public:
|
|||
/// @copydoc COMPOSITOR::DrawBuffer()
|
||||
virtual void DrawBuffer( unsigned int aBufferHandle ) override;
|
||||
|
||||
/// @copydoc COMPOSITOR::Begin()
|
||||
virtual void Begin() override;
|
||||
|
||||
// @copydoc COMPOSITOR::Present()
|
||||
virtual void Present() override;
|
||||
|
||||
// Constant used by glBindFramebuffer to turn off rendering to framebuffers
|
||||
static const unsigned int DIRECT_RENDERING = 0;
|
||||
|
||||
public:
|
||||
VECTOR2U GetScreenSize() const;
|
||||
GLenum GetBufferTexture( unsigned int aBufferHandle );
|
||||
void DrawBuffer( unsigned int aSourceHandle, unsigned int aDestHandle );
|
||||
unsigned int CreateBuffer( VECTOR2U aDimensions );
|
||||
|
||||
void SetAntialiasingMode( OPENGL_ANTIALIASING_MODE aMode ); // clears all buffers
|
||||
OPENGL_ANTIALIASING_MODE GetAntialiasingMode() const;
|
||||
|
||||
protected:
|
||||
// Buffers are simply textures storing a result of certain target rendering.
|
||||
typedef struct
|
||||
{
|
||||
VECTOR2U dimensions;
|
||||
GLuint textureTarget; ///< Main texture handle
|
||||
GLuint attachmentPoint; ///< Point to which an image from texture is attached
|
||||
} OPENGL_BUFFER;
|
||||
|
@ -93,6 +112,9 @@ protected:
|
|||
/// Store the used FBO name in case there was more than one compositor used
|
||||
GLuint m_curFbo;
|
||||
|
||||
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode;
|
||||
std::unique_ptr<OPENGL_PRESENTOR> m_antialiasing;
|
||||
|
||||
/// Binds a specific Framebuffer Object.
|
||||
void bindFb( unsigned int aFb );
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
// GAL imports
|
||||
#include <gal/graphics_abstraction_layer.h>
|
||||
#include <gal/gal_display_options.h>
|
||||
#include <gal/opengl/shader.h>
|
||||
#include <gal/opengl/vertex_manager.h>
|
||||
#include <gal/opengl/vertex_item.h>
|
||||
|
@ -61,7 +62,7 @@ class SHADER;
|
|||
* and quads. The purpose is to provide a fast graphics interface, that takes advantage of modern
|
||||
* graphics card GPUs. All methods here benefit thus from the hardware acceleration.
|
||||
*/
|
||||
class OPENGL_GAL : public GAL, public wxGLCanvas
|
||||
class OPENGL_GAL : public GAL, public wxGLCanvas, GAL_DISPLAY_OPTIONS_OBSERVER
|
||||
{
|
||||
public:
|
||||
/**
|
||||
|
@ -79,8 +80,9 @@ public:
|
|||
*
|
||||
* @param aName is the name of this window for use by wxWindow::FindWindowByName()
|
||||
*/
|
||||
OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener = NULL,
|
||||
wxEvtHandler* aPaintListener = NULL, const wxString& aName = wxT( "GLCanvas" ) );
|
||||
OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
|
||||
wxEvtHandler* aMouseListener = nullptr, wxEvtHandler* aPaintListener = nullptr,
|
||||
const wxString& aName = wxT( "GLCanvas" ) );
|
||||
|
||||
virtual ~OPENGL_GAL();
|
||||
|
||||
|
@ -92,6 +94,8 @@ public:
|
|||
return IsShownOnScreen();
|
||||
}
|
||||
|
||||
void OnGalDisplayOptionsChanged( const GAL_DISPLAY_OPTIONS& ) override;
|
||||
|
||||
// ---------------
|
||||
// Drawing methods
|
||||
// ---------------
|
||||
|
@ -271,6 +275,9 @@ private:
|
|||
/// Super class definition
|
||||
typedef GAL super;
|
||||
|
||||
GAL_DISPLAY_OPTIONS& options;
|
||||
UTIL::LINK observerLink;
|
||||
|
||||
static const int CIRCLE_POINTS = 64; ///< The number of points for circle approximation
|
||||
static const int CURVE_POINTS = 32; ///< The number of points for curve approximation
|
||||
|
||||
|
@ -380,8 +387,6 @@ private:
|
|||
*/
|
||||
std::pair<VECTOR2D, float> computeBitmapTextSize( const wxString& aText ) const;
|
||||
|
||||
const bitmap_glyph* lookupGlyph( unsigned int aCodepoint ) const;
|
||||
|
||||
// Event handling
|
||||
/**
|
||||
* @brief This is the OnPaint event handler.
|
||||
|
|
|
@ -46,6 +46,21 @@ enum SHADER_TYPE
|
|||
SHADER_TYPE_GEOMETRY = GL_GEOMETRY_SHADER ///< Geometry shader
|
||||
};
|
||||
|
||||
namespace DETAIL {
|
||||
|
||||
inline const char* translateStringArg( const std::string& str )
|
||||
{
|
||||
return str.c_str();
|
||||
}
|
||||
|
||||
inline const char* translateStringArg( const char* str )
|
||||
{
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Class SHADER provides the access to the OpenGL shaders.
|
||||
*
|
||||
|
@ -71,13 +86,19 @@ public:
|
|||
virtual ~SHADER();
|
||||
|
||||
/**
|
||||
* @brief Loads one of the built-in shaders and compiles it.
|
||||
*
|
||||
* @param aShaderNumber is the shader number (indexing from 0).
|
||||
* @param aShaderType is the type of the shader.
|
||||
* @return True in case of success, false otherwise.
|
||||
*/
|
||||
bool LoadBuiltinShader( unsigned int aShaderNumber, SHADER_TYPE aShaderType );
|
||||
* @brief Add a shader and compile the shader sources.
|
||||
*
|
||||
* @param aArgs is the list of strings (std::string or convertible to const char*) which
|
||||
are concatenated and compiled as a single shader source code.
|
||||
* @param aShaderType is the type of the shader.
|
||||
* @return True in case of success, false otherwise.
|
||||
*/
|
||||
template< typename... Args >
|
||||
bool LoadShaderFromStrings( SHADER_TYPE aShaderType, Args&&... aArgs )
|
||||
{
|
||||
const char* arr[] = { DETAIL::translateStringArg( aArgs )... };
|
||||
return loadShaderFromStringArray( aShaderType, arr, sizeof...(Args) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Loads one of the built-in shaders and compiles it.
|
||||
|
@ -86,7 +107,7 @@ public:
|
|||
* @param aShaderType is the type of the shader.
|
||||
* @return True in case of success, false otherwise.
|
||||
*/
|
||||
bool LoadShaderFromFile( const std::string& aShaderSourceName, SHADER_TYPE aShaderType );
|
||||
bool LoadShaderFromFile( SHADER_TYPE aShaderType, const std::string& aShaderSourceName );
|
||||
|
||||
/**
|
||||
* @brief Link the shaders.
|
||||
|
@ -161,6 +182,7 @@ public:
|
|||
*/
|
||||
void SetParameter( int aParameterNumber, float aValue ) const;
|
||||
void SetParameter( int aParameterNumber, int aValue ) const;
|
||||
void SetParameter( int aParameterNumber, float f0, float f1, float f2, float f3 ) const;
|
||||
|
||||
/**
|
||||
* @brief Gets an attribute location.
|
||||
|
@ -170,8 +192,22 @@ public:
|
|||
*/
|
||||
int GetAttribute( std::string aAttributeName ) const;
|
||||
|
||||
/**
|
||||
* @brief Read the shader source file
|
||||
*
|
||||
* @param aShaderSourceName is the shader source file name.
|
||||
* @return the source as string
|
||||
*/
|
||||
static std::string ReadSource( const std::string& aShaderSourceName );
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* @brief Compile vertex of fragment shader source code into the program.
|
||||
*/
|
||||
bool loadShaderFromStringArray( SHADER_TYPE aShaderType, const char* const* aArray,
|
||||
size_t aSize );
|
||||
|
||||
/**
|
||||
* @brief Get the shader program information.
|
||||
*
|
||||
|
@ -186,23 +222,6 @@ private:
|
|||
*/
|
||||
void shaderInfo( GLuint aShader );
|
||||
|
||||
/**
|
||||
* @brief Read the shader source file
|
||||
*
|
||||
* @param aShaderSourceName is the shader source file name.
|
||||
* @return the source as string
|
||||
*/
|
||||
std::string readSource( std::string aShaderSourceName );
|
||||
|
||||
/**
|
||||
* @brief Add a shader and compile the shader sources.
|
||||
*
|
||||
* @param aShaderSource is the shader source content.
|
||||
* @param aShaderType is the type of the shader.
|
||||
* @return True in case of success, false otherwise.
|
||||
*/
|
||||
bool addSource( const std::string& aShaderSource, SHADER_TYPE aShaderType );
|
||||
|
||||
std::deque<GLuint> shaderNumbers; ///< Shader number list
|
||||
GLuint programNumber; ///< Shader program number
|
||||
bool isProgramCreated; ///< Flag for program creation
|
||||
|
|
|
@ -576,8 +576,9 @@ std::ostream& operator<<( std::ostream& aStream, const VECTOR2<T>& aVector )
|
|||
|
||||
|
||||
/* Default specializations */
|
||||
typedef VECTOR2<double> VECTOR2D;
|
||||
typedef VECTOR2<int> VECTOR2I;
|
||||
typedef VECTOR2<double> VECTOR2D;
|
||||
typedef VECTOR2<int> VECTOR2I;
|
||||
typedef VECTOR2<unsigned int> VECTOR2U;
|
||||
|
||||
/* Compatibility typedefs */
|
||||
// FIXME should be removed to avoid multiple typedefs for the same type
|
||||
|
|
|
@ -0,0 +1,253 @@
|
|||
|
||||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Kicad Developers, see change_log.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 2
|
||||
* 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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef COMMON_OBSERVABLE_H__
|
||||
#define COMMON_OBSERVABLE_H__
|
||||
|
||||
#include <cassert>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
/*
|
||||
model subscriber implementation using links to represent connections.
|
||||
subscribers can be removed during notification.
|
||||
if no observers are registered, size is the size of a shared_ptr.
|
||||
*/
|
||||
|
||||
namespace UTIL {
|
||||
|
||||
class LINK;
|
||||
|
||||
namespace DETAIL {
|
||||
|
||||
struct OBSERVABLE_BASE {
|
||||
public:
|
||||
OBSERVABLE_BASE();
|
||||
OBSERVABLE_BASE( OBSERVABLE_BASE& other );
|
||||
|
||||
~OBSERVABLE_BASE();
|
||||
|
||||
size_t size() const;
|
||||
|
||||
private:
|
||||
friend class UTIL::LINK;
|
||||
|
||||
struct IMPL
|
||||
{
|
||||
IMPL( OBSERVABLE_BASE* owned_by = nullptr );
|
||||
bool is_shared() const;
|
||||
void set_shared();
|
||||
~IMPL();
|
||||
|
||||
void add_observer( void* observer );
|
||||
void remove_observer( void* observer );
|
||||
void collect();
|
||||
|
||||
bool is_iterating() const;
|
||||
|
||||
void enter_iteration();
|
||||
void leave_iteration();
|
||||
|
||||
std::vector<void*> observers_;
|
||||
unsigned int iteration_count_;
|
||||
OBSERVABLE_BASE* owned_by_;
|
||||
};
|
||||
|
||||
void allocate_impl();
|
||||
void allocate_shared_impl();
|
||||
|
||||
void deallocate_impl();
|
||||
|
||||
std::shared_ptr<IMPL> get_shared_impl();
|
||||
|
||||
protected:
|
||||
void on_observers_empty();
|
||||
|
||||
void enter_iteration();
|
||||
void leave_iteration();
|
||||
|
||||
void add_observer( void* observer );
|
||||
void remove_observer( void* observer );
|
||||
|
||||
std::shared_ptr<IMPL> impl_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// Simple RAII-handle to a subscription.
|
||||
//
|
||||
class LINK {
|
||||
public:
|
||||
LINK();
|
||||
LINK( std::shared_ptr<DETAIL::OBSERVABLE_BASE::IMPL> token, void* observer );
|
||||
LINK( LINK&& other );
|
||||
LINK( const LINK& ) = delete;
|
||||
|
||||
void operator=( const LINK& ) = delete;
|
||||
LINK& operator=( LINK&& other );
|
||||
|
||||
void reset();
|
||||
|
||||
explicit operator bool() const;
|
||||
|
||||
~LINK();
|
||||
|
||||
private:
|
||||
std::shared_ptr<DETAIL::OBSERVABLE_BASE::IMPL> token_;
|
||||
void* observer_;
|
||||
};
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
template<typename ObserverInterface>
|
||||
class OBSERVABLE :
|
||||
public DETAIL::OBSERVABLE_BASE
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Function Observable()
|
||||
* Constructor. Constructs an observable with empty non-shared subscription list.
|
||||
*/
|
||||
OBSERVABLE() {}
|
||||
|
||||
/**
|
||||
* Function Observable(OBSERVABLE&)
|
||||
* Constructor. Constructs an observable with a shared subscription list.
|
||||
* @param aInherit Observable to share the subscription list with.
|
||||
*/
|
||||
OBSERVABLE( OBSERVABLE& aInherit )
|
||||
: OBSERVABLE_BASE( aInherit )
|
||||
{}
|
||||
|
||||
/**
|
||||
* Function SubscribeUnmanaged
|
||||
* adds a subscription without RAII link.
|
||||
* @param aObserver Observer to subscribe
|
||||
*/
|
||||
void SubscribeUnmanaged( ObserverInterface* aObserver )
|
||||
{
|
||||
OBSERVABLE_BASE::add_observer( static_cast<void*>(aObserver) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Subscribe
|
||||
* adds a subscription returning an RAII link
|
||||
* @param aObserver observer to subscribe
|
||||
* @return RAII link controlling the lifetime of the subscription
|
||||
*/
|
||||
LINK Subscribe( ObserverInterface* aObserver ) {
|
||||
OBSERVABLE_BASE::add_observer( static_cast<void*>(aObserver) );
|
||||
return LINK( impl_, static_cast<void*>(aObserver) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Unsubscribe
|
||||
* cancels the subscription of a subscriber. Can be called during notification calls.
|
||||
* @param aObserver observer to remove from the subscription list
|
||||
*/
|
||||
void Unsubscribe( ObserverInterface* obs )
|
||||
{
|
||||
OBSERVABLE_BASE::remove_observer( static_cast<void*>(obs) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Notify
|
||||
* Notifies event to all subscribed observers.
|
||||
* @param Ptr pointer to method of the Observer-interface
|
||||
* @param Args list of arguments to each notification call, will be perfectly forwarded.
|
||||
*/
|
||||
template< typename... Args1, typename... Args2 >
|
||||
void Notify( void(ObserverInterface::*Ptr)(Args1...), Args2&&... aArgs )
|
||||
{
|
||||
static_assert(sizeof...(Args1) == sizeof...(Args2), "argument counts don't match");
|
||||
|
||||
if( impl_ )
|
||||
{
|
||||
enter_iteration();
|
||||
try {
|
||||
for( auto* void_ptr : impl_->observers_ )
|
||||
{
|
||||
if( void_ptr )
|
||||
{
|
||||
auto* typed_ptr = static_cast<ObserverInterface*>(void_ptr);
|
||||
(typed_ptr->*Ptr)(std::forward<Args2>( aArgs )...);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
leave_iteration();
|
||||
throw;
|
||||
}
|
||||
|
||||
leave_iteration();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Notify
|
||||
* Notifies event to all subscribed observers but one to be ignore.
|
||||
* @param Ptr pointer to method of the Observer-interface
|
||||
* @param aIgnore observer to ignore during this notification
|
||||
* @param Args list of arguments to each notification call, will be perfectly forwarded.
|
||||
*/
|
||||
template< typename... Args1, typename... Args2 >
|
||||
void NotifyIgnore( void(ObserverInterface::*Ptr)(Args1...), ObserverInterface* aIgnore,
|
||||
Args2&&... aArgs )
|
||||
{
|
||||
static_assert(sizeof...(Args1) == sizeof...(Args2), "argument counts don't match");
|
||||
|
||||
if( impl_ )
|
||||
{
|
||||
enter_iteration();
|
||||
|
||||
try
|
||||
{
|
||||
for(auto* void_ptr : impl_->observers_)
|
||||
{
|
||||
if( void_ptr && void_ptr != aIgnore )
|
||||
{
|
||||
auto* typed_ptr = static_cast<ObserverInterface*>(void_ptr);
|
||||
(typed_ptr->*Ptr)(std::forward<Args2>( aArgs )...);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
leave_iteration();
|
||||
throw;
|
||||
}
|
||||
|
||||
leave_iteration();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -68,6 +68,7 @@ void DIALOG_DISPLAY_OPTIONS::init()
|
|||
{
|
||||
SetFocus();
|
||||
DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)m_Parent->GetDisplayOptions();
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& gal_opts = m_Parent->GetGalDisplayOptions();
|
||||
|
||||
m_OptDisplayTracks->SetValue( displ_opts->m_DisplayPcbTrackFill == SKETCH );
|
||||
|
||||
|
@ -107,6 +108,30 @@ void DIALOG_DISPLAY_OPTIONS::init()
|
|||
m_OptDisplayPadNoConn->SetValue( m_Parent->IsElementVisible( PCB_VISIBLE( NO_CONNECTS_VISIBLE ) ) );
|
||||
m_OptDisplayDrawings->SetValue( displ_opts->m_DisplayDrawItemsFill == SKETCH );
|
||||
m_ShowNetNamesOption->SetSelection( displ_opts->m_DisplayNetNamesMode );
|
||||
|
||||
switch( gal_opts.gl_antialiasing_mode )
|
||||
{
|
||||
case KIGFX::OPENGL_ANTIALIASING_MODE::NONE:
|
||||
m_choiceAntialiasing->Select( 0 );
|
||||
break;
|
||||
|
||||
case KIGFX::OPENGL_ANTIALIASING_MODE::SUBSAMPLE_HIGH:
|
||||
m_choiceAntialiasing->Select( 1 );
|
||||
break;
|
||||
|
||||
case KIGFX::OPENGL_ANTIALIASING_MODE::SUBSAMPLE_ULTRA:
|
||||
m_choiceAntialiasing->Select( 2 );
|
||||
break;
|
||||
|
||||
case KIGFX::OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X2:
|
||||
m_choiceAntialiasing->Select( 3 );
|
||||
break;
|
||||
|
||||
case KIGFX::OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X4:
|
||||
m_choiceAntialiasing->Select( 4 );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -121,6 +146,7 @@ void DIALOG_DISPLAY_OPTIONS::OnCancelClick( wxCommandEvent& event )
|
|||
void DIALOG_DISPLAY_OPTIONS::OnOkClick(wxCommandEvent& event)
|
||||
{
|
||||
DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)m_Parent->GetDisplayOptions();
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& gal_opts = m_Parent->GetGalDisplayOptions();
|
||||
|
||||
m_Parent->SetShowPageLimits( m_Show_Page_Limits->GetValue() );
|
||||
|
||||
|
@ -165,6 +191,31 @@ void DIALOG_DISPLAY_OPTIONS::OnOkClick(wxCommandEvent& event)
|
|||
displ_opts->m_DisplayDrawItemsFill = not m_OptDisplayDrawings->GetValue();
|
||||
displ_opts->m_DisplayNetNamesMode = m_ShowNetNamesOption->GetSelection();
|
||||
|
||||
switch( m_choiceAntialiasing->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
gal_opts.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::NONE;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
gal_opts.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::SUBSAMPLE_HIGH;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
gal_opts.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::SUBSAMPLE_ULTRA;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
gal_opts.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
gal_opts.gl_antialiasing_mode = KIGFX::OPENGL_ANTIALIASING_MODE::SUPERSAMPLING_X4;
|
||||
break;
|
||||
}
|
||||
|
||||
gal_opts.NotifyChanged();
|
||||
|
||||
// Apply changes to the GAL
|
||||
KIGFX::VIEW* view = m_Parent->GetGalCanvas()->GetView();
|
||||
KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() );
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version May 10 2016)
|
||||
// C++ code generated with wxFormBuilder (version Dec 15 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -19,42 +19,60 @@ DIALOG_DISPLAY_OPTIONS_BASE::DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWi
|
|||
wxBoxSizer* bupperSizer;
|
||||
bupperSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxStaticBoxSizer* sLeftBoxSizer;
|
||||
sLeftBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Tracks and Vias:") ), wxVERTICAL );
|
||||
wxBoxSizer* sLeftSizer;
|
||||
sLeftSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_OptDisplayTracks = new wxCheckBox( sLeftBoxSizer->GetStaticBox(), wxID_ANY, _("Show tracks in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sLeftBoxSizer->Add( m_OptDisplayTracks, 0, wxALL, 5 );
|
||||
wxStaticBoxSizer* sSketchModeSizer;
|
||||
sSketchModeSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Tracks and Vias:") ), wxVERTICAL );
|
||||
|
||||
m_OptDisplayVias = new wxCheckBox( sLeftBoxSizer->GetStaticBox(), wxID_ANY, _("Show vias in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sLeftBoxSizer->Add( m_OptDisplayVias, 0, wxALL, 5 );
|
||||
m_OptDisplayTracks = new wxCheckBox( sSketchModeSizer->GetStaticBox(), wxID_ANY, _("Show tracks in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sSketchModeSizer->Add( m_OptDisplayTracks, 0, wxALL, 5 );
|
||||
|
||||
m_OptDisplayVias = new wxCheckBox( sSketchModeSizer->GetStaticBox(), wxID_ANY, _("Show vias in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sSketchModeSizer->Add( m_OptDisplayVias, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bupperSizer->Add( sLeftBoxSizer, 0, wxEXPAND|wxALL, 5 );
|
||||
sLeftSizer->Add( sSketchModeSizer, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbMiddleLeftSizer;
|
||||
sbMiddleLeftSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Routing Help:") ), wxVERTICAL );
|
||||
wxStaticBoxSizer* sOpenGLRenderingSizer;
|
||||
sOpenGLRenderingSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("OpenGL Rendering:") ), wxVERTICAL );
|
||||
|
||||
wxString m_choiceAntialiasingChoices[] = { _("No Antialiasing"), _("Subpixel Antialiasing (High Quality)"), _("Subpixel Antialiasing (Ultra Quality)"), _("Supersampling (2x)"), _("Supersampling (4x)") };
|
||||
int m_choiceAntialiasingNChoices = sizeof( m_choiceAntialiasingChoices ) / sizeof( wxString );
|
||||
m_choiceAntialiasing = new wxChoice( sOpenGLRenderingSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceAntialiasingNChoices, m_choiceAntialiasingChoices, 0 );
|
||||
m_choiceAntialiasing->SetSelection( 0 );
|
||||
sOpenGLRenderingSizer->Add( m_choiceAntialiasing, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
sLeftSizer->Add( sOpenGLRenderingSizer, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bupperSizer->Add( sLeftSizer, 1, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sMiddleSizer;
|
||||
sMiddleSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Routing Help:") ), wxVERTICAL );
|
||||
|
||||
wxString m_ShowNetNamesOptionChoices[] = { _("Do not show"), _("On pads"), _("On tracks"), _("On pads and tracks") };
|
||||
int m_ShowNetNamesOptionNChoices = sizeof( m_ShowNetNamesOptionChoices ) / sizeof( wxString );
|
||||
m_ShowNetNamesOption = new wxRadioBox( sbMiddleLeftSizer->GetStaticBox(), wxID_ANY, _("Show Net Names:"), wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_ShowNetNamesOption = new wxRadioBox( sMiddleSizer->GetStaticBox(), wxID_ANY, _("Show Net Names:"), wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_ShowNetNamesOption->SetSelection( 0 );
|
||||
m_ShowNetNamesOption->SetToolTip( _("Show or hide net names on pads and/or tracks") );
|
||||
|
||||
sbMiddleLeftSizer->Add( m_ShowNetNamesOption, 0, wxALL|wxEXPAND, 5 );
|
||||
sMiddleSizer->Add( m_ShowNetNamesOption, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxString m_OptDisplayTracksClearanceChoices[] = { _("Never"), _("New track"), _("New track with via area"), _("New and edited tracks with via area"), _("Always") };
|
||||
int m_OptDisplayTracksClearanceNChoices = sizeof( m_OptDisplayTracksClearanceChoices ) / sizeof( wxString );
|
||||
m_OptDisplayTracksClearance = new wxRadioBox( sbMiddleLeftSizer->GetStaticBox(), ID_SHOW_CLEARANCE, _("Show Track Clearance:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OptDisplayTracksClearance = new wxRadioBox( sMiddleSizer->GetStaticBox(), ID_SHOW_CLEARANCE, _("Show Track Clearance:"), wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OptDisplayTracksClearance->SetSelection( 0 );
|
||||
m_OptDisplayTracksClearance->SetToolTip( _("Show or hide the track and via clearance area.\nIf New track is selected, track clearance area is shown only when creating the track.") );
|
||||
|
||||
sbMiddleLeftSizer->Add( m_OptDisplayTracksClearance, 1, wxALL|wxEXPAND, 5 );
|
||||
sMiddleSizer->Add( m_OptDisplayTracksClearance, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bupperSizer->Add( sbMiddleLeftSizer, 0, wxALL|wxEXPAND, 5 );
|
||||
bupperSizer->Add( sMiddleSizer, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* b_rightSizer;
|
||||
b_rightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
wxBoxSizer* sRightSizer;
|
||||
sRightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* sfootprintSizer;
|
||||
sfootprintSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Footprints:") ), wxVERTICAL );
|
||||
|
@ -82,7 +100,7 @@ DIALOG_DISPLAY_OPTIONS_BASE::DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWi
|
|||
sfootprintSizer->Add( m_OptDisplayPadNoConn, 0, wxALL, 5 );
|
||||
|
||||
|
||||
b_rightSizer->Add( sfootprintSizer, 0, wxEXPAND|wxALL, 5 );
|
||||
sRightSizer->Add( sfootprintSizer, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* s_otherSizer;
|
||||
s_otherSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Other:") ), wxVERTICAL );
|
||||
|
@ -96,10 +114,10 @@ DIALOG_DISPLAY_OPTIONS_BASE::DIALOG_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWi
|
|||
s_otherSizer->Add( m_Show_Page_Limits, 0, wxALL, 5 );
|
||||
|
||||
|
||||
b_rightSizer->Add( s_otherSizer, 1, wxEXPAND|wxALL, 5 );
|
||||
sRightSizer->Add( s_otherSizer, 1, wxEXPAND|wxALL, 5 );
|
||||
|
||||
|
||||
bupperSizer->Add( b_rightSizer, 0, 0, 5 );
|
||||
bupperSizer->Add( sRightSizer, 0, 0, 5 );
|
||||
|
||||
|
||||
bMainSizer->Add( bupperSizer, 1, wxEXPAND, 5 );
|
||||
|
|
|
@ -104,191 +104,305 @@
|
|||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Tracks and Vias:</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">sLeftBoxSizer</property>
|
||||
<property name="name">sLeftSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Show tracks in sketch mode</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="label">Tracks and Vias:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OptDisplayTracks</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<property name="name">sSketchModeSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Show tracks in sketch mode</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OptDisplayTracks</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Show vias in sketch mode</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OptDisplayVias</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Show vias in sketch mode</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="label">OpenGL Rendering:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OptDisplayVias</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<property name="name">sOpenGLRenderingSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxChoice" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"No Antialiasing" "Subpixel Antialiasing (High Quality)" "Subpixel Antialiasing (Ultra Quality)" "Supersampling (2x)" "Supersampling (4x)"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_choiceAntialiasing</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">0</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnChoice"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
|
@ -301,16 +415,16 @@
|
|||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Routing Help:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">sbMiddleLeftSizer</property>
|
||||
<property name="name">sMiddleSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<object class="wxRadioBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -396,11 +510,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<object class="wxRadioBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -494,7 +608,7 @@
|
|||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">b_rightSizer</property>
|
||||
<property name="name">sRightSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
|
@ -510,11 +624,11 @@
|
|||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -598,11 +712,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -686,11 +800,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -774,11 +888,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -862,11 +976,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -950,11 +1064,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -1053,11 +1167,11 @@
|
|||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -1141,11 +1255,11 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -1235,11 +1349,11 @@
|
|||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticLine" expanded="1">
|
||||
<object class="wxStaticLine" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version May 10 2016)
|
||||
// C++ code generated with wxFormBuilder (version Dec 15 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -22,6 +22,7 @@ class DIALOG_SHIM;
|
|||
#include <wx/settings.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/button.h>
|
||||
|
@ -44,6 +45,7 @@ class DIALOG_DISPLAY_OPTIONS_BASE : public DIALOG_SHIM
|
|||
|
||||
wxCheckBox* m_OptDisplayTracks;
|
||||
wxCheckBox* m_OptDisplayVias;
|
||||
wxChoice* m_choiceAntialiasing;
|
||||
wxRadioBox* m_ShowNetNamesOption;
|
||||
wxRadioBox* m_OptDisplayTracksClearance;
|
||||
wxCheckBox* m_OptDisplayModOutlines;
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include <origin_viewitem.h>
|
||||
|
||||
#include <dialog_pad_properties_base.h>
|
||||
#include <pcb_draw_panel_gal.h>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version May 6 2016)
|
||||
// C++ code generated with wxFormBuilder (version Dec 17 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -40,6 +40,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerPadType->Add( m_PadNumText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadNumCtrl = new wxTextCtrl( m_panelGeneral, wxID_PADNUMCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadNumCtrl->SetMaxLength( 0 );
|
||||
fgSizerPadType->Add( m_PadNumCtrl, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PadNameText = new wxStaticText( m_panelGeneral, wxID_ANY, _("Net name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -47,6 +48,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerPadType->Add( m_PadNameText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PadNetNameCtrl = new wxTextCtrl( m_panelGeneral, wxID_PADNETNAMECTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadNetNameCtrl->SetMaxLength( 0 );
|
||||
fgSizerPadType->Add( m_PadNetNameCtrl, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_staticText44 = new wxStaticText( m_panelGeneral, wxID_ANY, _("Pad type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -83,6 +85,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadPosition_X_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadPosition_X_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_PadPosition_X_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadPosX_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -94,6 +97,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText41, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadPosition_Y_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadPosition_Y_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_PadPosition_Y_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadPosY_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -105,6 +109,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ShapeSize_X_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ShapeSize_X_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_ShapeSize_X_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadShapeSizeX_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -116,6 +121,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText15, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ShapeSize_Y_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ShapeSize_Y_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_ShapeSize_Y_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadShapeSizeY_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -140,6 +146,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_PadOrientCtrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadOrientCtrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_PadOrientCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_customOrientUnits = new wxStaticText( m_panelGeneral, wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -151,6 +158,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ShapeOffset_X_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ShapeOffset_X_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_ShapeOffset_X_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadShapeOffsetX_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -162,6 +170,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText19, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ShapeOffset_Y_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ShapeOffset_Y_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_ShapeOffset_Y_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadShapeOffsetY_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -175,6 +184,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText38, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_LengthPadToDieCtrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_LengthPadToDieCtrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_LengthPadToDieCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadLengthDie_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -195,6 +205,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT, 5 );
|
||||
|
||||
m_ShapeDelta_Ctrl = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ShapeDelta_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_ShapeDelta_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadShapeDelta_Unit = new wxStaticText( m_panelGeneral, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -230,6 +241,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerShapeType->Add( m_staticTextCornerSizeRatio, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcCornerSizeRatio = new wxTextCtrl( m_panelGeneral, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_tcCornerSizeRatio->SetMaxLength( 0 );
|
||||
fgSizerShapeType->Add( m_tcCornerSizeRatio, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
m_staticTextCornerSizeRatioUnit = new wxStaticText( m_panelGeneral, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -289,6 +301,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerGeometry->Add( m_textPadDrillX, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadDrill_X_Ctrl = new wxTextCtrl( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadDrill_X_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerGeometry->Add( m_PadDrill_X_Ctrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadDrill_X_Unit = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -300,6 +313,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizerGeometry->Add( m_textPadDrillY, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadDrill_Y_Ctrl = new wxTextCtrl( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PadDrill_Y_Ctrl->SetMaxLength( 0 );
|
||||
fgSizerGeometry->Add( m_PadDrill_Y_Ctrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_PadDrill_Y_Unit = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -435,6 +449,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgClearancesGridSizer->Add( m_staticTextNetClearance, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_NetClearanceValueCtrl = new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_NetClearanceValueCtrl->SetMaxLength( 0 );
|
||||
fgClearancesGridSizer->Add( m_NetClearanceValueCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_NetClearanceUnits = new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -448,6 +463,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgClearancesGridSizer->Add( m_MaskClearanceTitle, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderMaskMarginCtrl = new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderMaskMarginCtrl->SetMaxLength( 0 );
|
||||
fgClearancesGridSizer->Add( m_SolderMaskMarginCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderMaskMarginUnits = new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -461,6 +477,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgClearancesGridSizer->Add( m_staticTextSolderPaste, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderPasteMarginCtrl = new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderPasteMarginCtrl->SetMaxLength( 0 );
|
||||
fgClearancesGridSizer->Add( m_SolderPasteMarginCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderPasteMarginUnits = new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -474,6 +491,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgClearancesGridSizer->Add( m_staticTextRatio, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderPasteMarginRatioCtrl = new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderPasteMarginRatioCtrl->SetMaxLength( 0 );
|
||||
fgClearancesGridSizer->Add( m_SolderPasteMarginRatioCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_SolderPasteRatioMarginUnits = new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -514,6 +532,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizer41->Add( m_staticText49, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ThermalWidthCtrl = new wxTextCtrl( sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThermalWidthCtrl->SetMaxLength( 0 );
|
||||
fgSizer41->Add( m_ThermalWidthCtrl, 0, wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ThermalWidthUnits = new wxStaticText( sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -525,6 +544,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
fgSizer41->Add( m_staticText52, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ThermalGapCtrl = new wxTextCtrl( sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThermalGapCtrl->SetMaxLength( 0 );
|
||||
fgSizer41->Add( m_ThermalGapCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 5 );
|
||||
|
||||
m_ThermalGapUnits = new wxStaticText( sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -539,7 +559,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
|
||||
m_staticTextWarning = new wxStaticText( m_localSettingsPanel, wxID_ANY, _("Set fields to 0 to use parent or global values"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextWarning->Wrap( -1 );
|
||||
m_staticTextWarning->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextWarning->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
|
||||
bSizerClearance->Add( m_staticTextWarning, 0, wxALL, 5 );
|
||||
|
||||
|
@ -563,7 +583,8 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
|
||||
bSizerDisplayPad->Add( m_panelShowPad, 4, wxRIGHT|wxTOP|wxEXPAND, 5 );
|
||||
|
||||
m_panelShowPadGal = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), wxDefaultSize, EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO );
|
||||
PCB_BASE_FRAME* frame = static_cast<PCB_BASE_FRAME*>( parent );
|
||||
m_panelShowPadGal = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), wxDefaultSize, frame->GetGalDisplayOptions(), EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO );
|
||||
bSizerDisplayPad->Add( m_panelShowPadGal, 4, wxEXPAND|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
|
||||
|
@ -574,7 +595,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
|||
|
||||
m_staticTextWarningPadFlipped = new wxStaticText( this, wxID_ANY, _("Warning:\nThis pad is flipped on board.\nBack and front layers will be swapped."), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextWarningPadFlipped->Wrap( -1 );
|
||||
m_staticTextWarningPadFlipped->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextWarningPadFlipped->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
|
||||
m_MainSizer->Add( m_staticTextWarningPadFlipped, 0, wxALL, 5 );
|
||||
|
||||
|
|
|
@ -4690,7 +4690,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizer2</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -5491,7 +5490,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">m_LayersSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -5686,7 +5684,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizerTechlayers</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -6671,7 +6668,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizeModuleInfo</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -7133,7 +7129,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">sbClearancesSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -8194,7 +8189,6 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizerZonesSettings</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
|
@ -9184,7 +9178,7 @@
|
|||
<property name="center_pane">0</property>
|
||||
<property name="class">PCB_DRAW_PANEL_GAL</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="construction">m_panelShowPadGal = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), wxDefaultSize, EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO );</property>
|
||||
<property name="construction">PCB_BASE_FRAME* frame = static_cast<PCB_BASE_FRAME*>( parent );
m_panelShowPadGal = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), wxDefaultSize, frame->GetGalDisplayOptions(), EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO );</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="declaration">PCB_DRAW_PANEL_GAL* m_panelShowPadGal;</property>
|
||||
|
@ -9199,7 +9193,7 @@
|
|||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="include">#include <pcb_draw_panel_gal.h></property>
|
||||
<property name="include">#include <wxBasePcbFrame.h>
#include <pcb_draw_panel_gal.h></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version May 6 2016)
|
||||
// C++ code generated with wxFormBuilder (version Dec 17 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -31,6 +31,7 @@ class DIALOG_SHIM;
|
|||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wxBasePcbFrame.h>
|
||||
#include <pcb_draw_panel_gal.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
|
|
@ -229,6 +229,7 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
|||
// Create GAL canvas
|
||||
PCB_BASE_FRAME* parentFrame = static_cast<PCB_BASE_FRAME*>( Kiway().Player( FRAME_PCB, true ) );
|
||||
PCB_DRAW_PANEL_GAL* drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_FrameSize,
|
||||
GetGalDisplayOptions(),
|
||||
parentFrame->GetGalCanvas()->GetBackend() );
|
||||
SetGalCanvas( drawPanel );
|
||||
|
||||
|
|
|
@ -187,6 +187,7 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
|||
|
||||
// Create GAL canvas
|
||||
PCB_DRAW_PANEL_GAL* drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_FrameSize,
|
||||
parentFrame->GetGalDisplayOptions(),
|
||||
parentFrame->GetGalCanvas()->GetBackend() );
|
||||
SetGalCanvas( drawPanel );
|
||||
|
||||
|
|
|
@ -98,8 +98,8 @@ const LAYER_NUM GAL_LAYER_ORDER[] =
|
|||
|
||||
PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId,
|
||||
const wxPoint& aPosition, const wxSize& aSize,
|
||||
GAL_TYPE aGalType ) :
|
||||
EDA_DRAW_PANEL_GAL( aParentWindow, aWindowId, aPosition, aSize, aGalType )
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& aOptions, GAL_TYPE aGalType ) :
|
||||
EDA_DRAW_PANEL_GAL( aParentWindow, aWindowId, aPosition, aSize, aOptions, aGalType )
|
||||
{
|
||||
m_worksheet = NULL;
|
||||
m_ratsnest = NULL;
|
||||
|
|
|
@ -38,7 +38,8 @@ class PCB_DRAW_PANEL_GAL : public EDA_DRAW_PANEL_GAL
|
|||
{
|
||||
public:
|
||||
PCB_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId, const wxPoint& aPosition,
|
||||
const wxSize& aSize, GAL_TYPE aGalType = GAL_TYPE_OPENGL );
|
||||
const wxSize& aSize, KIGFX::GAL_DISPLAY_OPTIONS& aOptions,
|
||||
GAL_TYPE aGalType = GAL_TYPE_OPENGL );
|
||||
|
||||
virtual ~PCB_DRAW_PANEL_GAL();
|
||||
|
||||
|
|
|
@ -336,7 +336,9 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
|||
|
||||
// Create GAL canvas
|
||||
EDA_DRAW_PANEL_GAL* galCanvas = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ),
|
||||
m_FrameSize, EDA_DRAW_PANEL_GAL::GAL_TYPE_NONE );
|
||||
m_FrameSize,
|
||||
GetGalDisplayOptions(),
|
||||
EDA_DRAW_PANEL_GAL::GAL_TYPE_NONE );
|
||||
|
||||
SetGalCanvas( galCanvas );
|
||||
|
||||
|
|
Loading…
Reference in New Issue