From 49eeb26cc68811318887d83cf3c64692023c8ab2 Mon Sep 17 00:00:00 2001 From: codeanticode Date: Mon, 19 Mar 2012 19:28:59 +0000 Subject: [PATCH] Added check for maximum samples when calling smooth() --- .../opengl/src/processing/opengl/PGL.java | 7 +++-- .../processing/opengl/PGraphicsOpenGL.java | 27 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/java/libraries/opengl/src/processing/opengl/PGL.java b/java/libraries/opengl/src/processing/opengl/PGL.java index 058bed8fd..ee439664b 100644 --- a/java/libraries/opengl/src/processing/opengl/PGL.java +++ b/java/libraries/opengl/src/processing/opengl/PGL.java @@ -34,6 +34,7 @@ import java.util.TimerTask; import javax.media.opengl.GL; import javax.media.opengl.GL2; +import javax.media.opengl.GL3; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLContext; @@ -152,6 +153,8 @@ public class PGL { public static final int GL_ARRAY_BUFFER = GL.GL_ARRAY_BUFFER; public static final int GL_ELEMENT_ARRAY_BUFFER = GL.GL_ELEMENT_ARRAY_BUFFER; + + public static final int GL_SAMPLES = GL.GL_SAMPLES; public static final int GL_FRAMEBUFFER_COMPLETE = GL.GL_FRAMEBUFFER_COMPLETE; public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; @@ -180,10 +183,10 @@ public class PGL { public static final int GL_EXTENSIONS = GL.GL_EXTENSIONS; public static final int GL_MAX_TEXTURE_SIZE = GL.GL_MAX_TEXTURE_SIZE; + public static final int GL_MAX_SAMPLES = GL2.GL_MAX_SAMPLES; public static final int GL_ALIASED_LINE_WIDTH_RANGE = GL.GL_ALIASED_LINE_WIDTH_RANGE; public static final int GL_ALIASED_POINT_SIZE_RANGE = GL.GL_ALIASED_POINT_SIZE_RANGE; - public static final int GL_SAMPLES = GL.GL_SAMPLES; - + public static final int GLU_TESS_WINDING_NONZERO = GLU.GLU_TESS_WINDING_NONZERO; public static final int GLU_TESS_WINDING_ODD = GLU.GLU_TESS_WINDING_ODD; diff --git a/java/libraries/opengl/src/processing/opengl/PGraphicsOpenGL.java b/java/libraries/opengl/src/processing/opengl/PGraphicsOpenGL.java index c91537b01..d03585056 100644 --- a/java/libraries/opengl/src/processing/opengl/PGraphicsOpenGL.java +++ b/java/libraries/opengl/src/processing/opengl/PGraphicsOpenGL.java @@ -96,9 +96,10 @@ public class PGraphicsOpenGL extends PGraphics { /** Some hardware limits */ static public int maxTextureSize; + static public int maxSamples; static public float maxPointSize; static public float maxLineWidth; - + /** OpenGL information strings */ static public String OPENGL_VENDOR; static public String OPENGL_RENDERER; @@ -1428,12 +1429,14 @@ public class PGraphicsOpenGL extends PGraphics { flushMode = FLUSH_WHEN_FULL; } - int[] temp = { 0 }; - pgl.glGetIntegerv(PGL.GL_SAMPLES, temp, 0); - if (antialias != temp[0]) { - PGraphics.showWarning("Smooth level " + antialias + " not supported. Using " + temp[0] + " instead."); - antialias = temp[0]; - } + if (primarySurface) { + int[] temp = { 0 }; + pgl.glGetIntegerv(PGL.GL_SAMPLES, temp, 0); + if (antialias != temp[0]) { + PGraphics.showWarning("Smooth level " + antialias + " not supported. Using " + temp[0] + " instead."); + antialias = temp[0]; + } + } if (antialias < 2) { pgl.glDisable(PGL.GL_MULTISAMPLE); pgl.glEnable(PGL.GL_POINT_SMOOTH); @@ -2933,6 +2936,11 @@ public class PGraphicsOpenGL extends PGraphics { public void smooth(int level) { smooth = true; + if (maxSamples < level) { + PGraphics.showWarning("Smooth level not supported by the video card. Using " + maxSamples + " instead."); + level = maxSamples; + } + if (antialias != level) { antialias = level; if (antialias == 1) { @@ -5642,6 +5650,9 @@ public class PGraphicsOpenGL extends PGraphics { pgl.glGetIntegerv(PGL.GL_MAX_TEXTURE_SIZE, temp, 0); maxTextureSize = temp[0]; + + pgl.glGetIntegerv(PGL.GL_MAX_SAMPLES, temp, 0); + maxSamples = temp[0]; pgl.glGetIntegerv(PGL.GL_ALIASED_LINE_WIDTH_RANGE, temp, 0); maxLineWidth = temp[1]; @@ -9107,4 +9118,4 @@ public class PGraphicsOpenGL extends PGraphics { } } } -} +} \ No newline at end of file