[kicad/f14/master] Fix 3D view crash with some graphics cards (BZ #664143).

Alain Portal dionysos at fedoraproject.org
Sat Jan 29 16:01:03 UTC 2011


commit fe0fc26ee781ef1569073f53f42e56d90960a82b
Author: Alain Portal <alain.portal at free.fr>
Date:   Sat Jan 29 17:00:35 2011 +0100

    Fix 3D view crash with some graphics cards (BZ #664143).

 kicad-2010.05.27.3DViewer-crash.patch |   89 +++++++++++++++++++++++++++++++++
 kicad.spec                            |    7 ++-
 2 files changed, 95 insertions(+), 1 deletions(-)
---
diff --git a/kicad-2010.05.27.3DViewer-crash.patch b/kicad-2010.05.27.3DViewer-crash.patch
new file mode 100644
index 0000000..854ea56
--- /dev/null
+++ b/kicad-2010.05.27.3DViewer-crash.patch
@@ -0,0 +1,89 @@
+diff -ru kicad-2010.05.27-6.rev2363/3d-viewer/3d_canvas.cpp kicad-2010.05.27-7.rev2363/3d-viewer/3d_canvas.cpp
+--- kicad-2010.05.27-6.rev2363/3d-viewer/3d_canvas.cpp	2010-05-28 21:47:32.000000000 +0200
++++ kicad-2010.05.27-7.rev2363/3d-viewer/3d_canvas.cpp	2011-01-29 15:17:40.000000000 +0100
+@@ -45,9 +45,9 @@
+                 Pcb3D_GLCanvas::OnPopUpMenu )
+ END_EVENT_TABLE()
+ 
+-Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ) :
+-#if wxCHECK_VERSION( 2, 9, 0 )
+-    wxGLCanvas( parent, -1, NULL, wxDefaultPosition, wxDefaultSize,
++Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :
++#if wxCHECK_VERSION( 2, 7, 0 )
++    wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
+                 wxFULL_REPAINT_ON_RESIZE )
+ #else
+     wxGLCanvas( parent, -1, wxDefaultPosition, wxDefaultSize,
+@@ -58,7 +58,7 @@
+     m_gllist = 0;
+     m_Parent = parent;
+ 
+-#if wxCHECK_VERSION( 2, 9, 0 )
++#if wxCHECK_VERSION( 2, 7, 0 )
+ 
+     // Explicitly create a new rendering context instance for this canvas.
+     m_glRC = new wxGLContext( this );
+@@ -72,7 +72,7 @@
+ {
+     ClearLists();
+     m_init = FALSE;
+-#if wxCHECK_VERSION( 2, 9, 0 )
++#if wxCHECK_VERSION( 2, 7, 0 )
+     delete m_glRC;
+ #endif
+ }
+diff -ru kicad-2010.05.27-6.rev2363/3d-viewer/3d_draw.cpp kicad-2010.05.27-7.rev2363/3d-viewer/3d_draw.cpp
+--- kicad-2010.05.27-6.rev2363/3d-viewer/3d_draw.cpp	2010-06-15 22:51:47.000000000 +0200
++++ kicad-2010.05.27-7.rev2363/3d-viewer/3d_draw.cpp	2011-01-29 15:08:42.000000000 +0100
+@@ -52,7 +52,11 @@
+ 
+ void Pcb3D_GLCanvas::Redraw( bool finish )
+ {
+-#if wxCHECK_VERSION( 2, 9, 0 )
++    /* SwapBuffer requires the window to be shown before calling */
++    if( !IsShown() )
++        return;
++
++#if wxCHECK_VERSION( 2, 7, 0 )
+     SetCurrent( *m_glRC );
+ #else
+     SetCurrent();
+@@ -93,7 +97,7 @@
+     }
+ 
+     glFlush();
+-    if( finish )
++    if( finish );
+         glFinish();
+     SwapBuffers();
+ }
+diff -ru kicad-2010.05.27-6.rev2363/3d-viewer/3d_frame.cpp kicad-2010.05.27-7.rev2363/3d-viewer/3d_frame.cpp
+--- kicad-2010.05.27-6.rev2363/3d-viewer/3d_frame.cpp	2010-05-28 21:47:32.000000000 +0200
++++ kicad-2010.05.27-7.rev2363/3d-viewer/3d_frame.cpp	2011-01-29 15:10:05.000000000 +0100
+@@ -78,7 +78,8 @@
+     ReCreateVToolbar();
+ 
+     // Make a Pcb3D_GLCanvas
+-    m_Canvas = new Pcb3D_GLCanvas( this );
++    int attrs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0 };
++    m_Canvas = new Pcb3D_GLCanvas( this, attrs );
+ 
+     m_auimgr.SetManagedWindow( this );
+ 
+diff -ru kicad-2010.05.27-6.rev2363/3d-viewer/3d_viewer.h kicad-2010.05.27-7.rev2363/3d-viewer/3d_viewer.h
+--- kicad-2010.05.27-6.rev2363/3d-viewer/3d_viewer.h	2010-05-28 21:47:32.000000000 +0200
++++ kicad-2010.05.27-7.rev2363/3d-viewer/3d_viewer.h	2011-01-29 15:10:51.000000000 +0100
+@@ -137,11 +137,11 @@
+ private:
+     bool         m_init;
+     GLuint       m_gllist;
+-#if wxCHECK_VERSION( 2, 9, 0 )
++#if wxCHECK_VERSION( 2, 7, 0 )
+     wxGLContext* m_glRC;
+ #endif
+ public:
+-    Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent );
++    Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList = 0 );
+     ~Pcb3D_GLCanvas();
+ 
+     void   ClearLists();
diff --git a/kicad.spec b/kicad.spec
index 05a531c..b6ed897 100644
--- a/kicad.spec
+++ b/kicad.spec
@@ -1,6 +1,6 @@
 Name:           kicad
 Version:        2010.05.27
-Release:        7.rev2363%{?dist}
+Release:        8.rev2363%{?dist}
 Summary:        Electronic schematic diagrams and printed circuit board artwork
 Summary(fr):    Saisie de schéma électronique et routage de circuit imprimé
 
@@ -30,6 +30,7 @@ Patch15:        %{name}-%{version}.fix-unwanted-mouse-cursor-move.patch
 Patch16:        %{name}-%{version}.3Dviewer-arcs-draw-issue.patch
 Patch17:        %{name}-%{version}.search-current-sheet-only.patch
 Patch18:        %{name}-%{version}.module-edition-issues.patch
+Patch19:        %{name}-%{version}.3DViewer-crash.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -191,6 +192,7 @@ Documentation and tutorials for Kicad in Chinese
 %patch16 -p0 -b .3Dviewer-arcs-draw-issue
 %patch17 -p1 -b .search-current-sheet-only
 %patch18 -p1 -b .module-edition-issues
+%patch19 -p1 -b .3DViewer-crash
 
 #kicad-doc.noarch: W: file-not-utf8 /usr/share/doc/kicad/AUTHORS.txt
 iconv -f iso8859-1 -t utf-8 AUTHORS.txt > AUTHORS.conv && mv -f AUTHORS.conv AUTHORS.txt
@@ -411,6 +413,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 
 
 %changelog
+* Sat Jan 29 2011 Alain Portal <alain.portal[AT]univ-montp2[DOT]fr> 2010.05.27-8
+- Fix 3D view crash with some graphics cards (BZ #664143).
+
 * Wed Jul 14 2010 Dan Horák <dan at danny.cz> - 2010.05.27-7.rev2363
 - rebuilt against wxGTK-2.8.11-2
 


More information about the scm-commits mailing list