Skip to content

Commit 862a86e

Browse files
committed
Merge pull request #74 from hesiod/master
Add tessellation functionality
2 parents ceefa7f + 98707e1 commit 862a86e

File tree

11 files changed

+103
-38
lines changed

11 files changed

+103
-38
lines changed

OpenGL.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ library
6464
Graphics.Rendering.OpenGL.GL.PixellikeObject
6565
Graphics.Rendering.OpenGL.GL.Points
6666
Graphics.Rendering.OpenGL.GL.Polygons
67+
Graphics.Rendering.OpenGL.GL.PrimitiveMode
6768
Graphics.Rendering.OpenGL.GL.QueryObjects
6869
Graphics.Rendering.OpenGL.GL.RasterPos
6970
Graphics.Rendering.OpenGL.GL.ReadCopyPixels
@@ -126,7 +127,7 @@ library
126127
Graphics.Rendering.OpenGL.GL.PixelRectangles.Sink
127128
Graphics.Rendering.OpenGL.GL.PointParameter
128129
Graphics.Rendering.OpenGL.GL.PolygonMode
129-
Graphics.Rendering.OpenGL.GL.PrimitiveMode
130+
Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
130131
Graphics.Rendering.OpenGL.GL.QueryObject
131132
Graphics.Rendering.OpenGL.GL.QueryUtils
132133
Graphics.Rendering.OpenGL.GL.QueryUtils.PName

src/Graphics/Rendering/OpenGL/GL.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module Graphics.Rendering.OpenGL.GL (
2424
module Graphics.Rendering.OpenGL.GL.QueryObjects,
2525

2626
-- * Vertex Specification and Drawing Commands
27+
module Graphics.Rendering.OpenGL.GL.PrimitiveMode,
2728
module Graphics.Rendering.OpenGL.GL.BeginEnd,
2829
module Graphics.Rendering.OpenGL.GL.Rectangles,
2930
module Graphics.Rendering.OpenGL.GL.ConditionalRendering,
@@ -79,6 +80,7 @@ import Graphics.Rendering.OpenGL.GL.ObjectName
7980
import Graphics.Rendering.OpenGL.GL.SyncObjects
8081
import Graphics.Rendering.OpenGL.GL.QueryObjects
8182

83+
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
8284
import Graphics.Rendering.OpenGL.GL.BeginEnd
8385
import Graphics.Rendering.OpenGL.GL.Rectangles
8486
import Graphics.Rendering.OpenGL.GL.ConditionalRendering

src/Graphics/Rendering/OpenGL/GL/BeginEnd.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
-- Module : Graphics.Rendering.OpenGL.GL.BeginEnd
44
-- Copyright : (c) Sven Panne 2002-2013
55
-- License : BSD3
6-
--
6+
--
77
-- Maintainer : Sven Panne <svenpanne@gmail.com>
88
-- Stability : stable
99
-- Portability : portable
@@ -15,7 +15,6 @@
1515

1616
module Graphics.Rendering.OpenGL.GL.BeginEnd (
1717
-- * Begin and End Objects
18-
PrimitiveMode(..),
1918
renderPrimitive, unsafeRenderPrimitive, primitiveRestart,
2019

2120
-- * Polygon Edges
@@ -27,6 +26,7 @@ import Graphics.Rendering.OpenGL.GL.StateVar
2726
import Graphics.Rendering.OpenGL.GL.EdgeFlag
2827
import Graphics.Rendering.OpenGL.GL.Exception
2928
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
29+
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
3030
import Graphics.Rendering.OpenGL.GL.QueryUtils
3131
import Graphics.Rendering.OpenGL.Raw
3232

src/Graphics/Rendering/OpenGL/GL/PrimitiveMode.hs

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
1-
{-# OPTIONS_HADDOCK hide #-}
21
--------------------------------------------------------------------------------
32
-- |
43
-- Module : Graphics.Rendering.OpenGL.GL.PrimitiveMode
5-
-- Copyright : (c) Sven Panne 2002-2013
4+
-- Copyright : (c) Sven Panne 2002-2013, Tobias Markus 2015
65
-- License : BSD3
7-
--
6+
--
87
-- Maintainer : Sven Panne <svenpanne@gmail.com>
98
-- Stability : stable
109
-- Portability : portable
1110
--
12-
-- This is a purely internal module for (un-)marshaling PrimitiveMode.
11+
-- This module corresponds to section 10.1 (Primitive Types) of the OpenGL 4.4
12+
-- specs.
1313
--
1414
--------------------------------------------------------------------------------
1515

1616
module Graphics.Rendering.OpenGL.GL.PrimitiveMode (
17-
PrimitiveMode(..), marshalPrimitiveMode, unmarshalPrimitiveMode
17+
-- * Primitive Modes
18+
PrimitiveMode(..),
19+
-- * Patches (Tessellation)
20+
patchVertices, maxPatchVertices
1821
) where
1922

23+
import Graphics.Rendering.OpenGL.GL.StateVar
24+
import Graphics.Rendering.OpenGL.GL.QueryUtils.PName
2025
import Graphics.Rendering.OpenGL.Raw
2126

2227
--------------------------------------------------------------------------------
@@ -66,31 +71,21 @@ data PrimitiveMode =
6671
| Polygon
6772
-- ^ Draws a single, convex polygon. Vertices 1 through /N/ define this
6873
-- polygon.
74+
| Patches
75+
-- ^ Only used in conjunction with tessellation. The number of vertices per
76+
-- patch can be set with 'patchVertices'.
6977
deriving ( Eq, Ord, Show )
7078

71-
marshalPrimitiveMode :: PrimitiveMode -> GLenum
72-
marshalPrimitiveMode x = case x of
73-
Points -> gl_POINTS
74-
Lines -> gl_LINES
75-
LineLoop -> gl_LINE_LOOP
76-
LineStrip -> gl_LINE_STRIP
77-
Triangles -> gl_TRIANGLES
78-
TriangleStrip -> gl_TRIANGLE_STRIP
79-
TriangleFan -> gl_TRIANGLE_FAN
80-
Quads -> gl_QUADS
81-
QuadStrip -> gl_QUAD_STRIP
82-
Polygon -> gl_POLYGON
79+
-- | 'patchVertices' is the number of vertices per patch primitive.
80+
--
81+
-- An 'Graphics.Rendering.OpenGL.GLU.Errors.InvalidValue' is generated if
82+
-- 'patchVertices' is set to a value less than or equal to zero or greater
83+
-- than the implementation-dependent maximum value 'maxPatchVertices'.
84+
85+
patchVertices :: SettableStateVar GLint
86+
patchVertices = makeSettableStateVar $ glPatchParameteri gl_PATCH_VERTICES
87+
88+
-- | Contains the maximumum number of vertices in a single patch.
8389

84-
unmarshalPrimitiveMode :: GLenum -> PrimitiveMode
85-
unmarshalPrimitiveMode x
86-
| x == gl_POINTS = Points
87-
| x == gl_LINES = Lines
88-
| x == gl_LINE_LOOP = LineLoop
89-
| x == gl_LINE_STRIP = LineStrip
90-
| x == gl_TRIANGLES = Triangles
91-
| x == gl_TRIANGLE_STRIP = TriangleStrip
92-
| x == gl_TRIANGLE_FAN = TriangleFan
93-
| x == gl_QUADS = Quads
94-
| x == gl_QUAD_STRIP = QuadStrip
95-
| x == gl_POLYGON = Polygon
96-
| otherwise = error ("unmarshalPrimitiveMode: illegal value " ++ show x)
90+
maxPatchVertices :: GettableStateVar GLint
91+
maxPatchVertices = makeGettableStateVar $ getInteger1 id GetMaxPatchVertices
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{-# OPTIONS_HADDOCK hide #-}
2+
--------------------------------------------------------------------------------
3+
-- |
4+
-- Module : Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
5+
-- Copyright : (c) Sven Panne 2002-2013
6+
-- License : BSD3
7+
--
8+
-- Maintainer : Sven Panne <svenpanne@gmail.com>
9+
-- Stability : stable
10+
-- Portability : portable
11+
--
12+
-- This is a purely internal module for (un-)marshaling PrimitiveMode.
13+
--
14+
--------------------------------------------------------------------------------
15+
16+
module Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal (
17+
marshalPrimitiveMode, unmarshalPrimitiveMode
18+
) where
19+
20+
import Graphics.Rendering.OpenGL.Raw
21+
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
22+
23+
--------------------------------------------------------------------------------
24+
25+
marshalPrimitiveMode :: PrimitiveMode -> GLenum
26+
marshalPrimitiveMode x = case x of
27+
Points -> gl_POINTS
28+
Lines -> gl_LINES
29+
LineLoop -> gl_LINE_LOOP
30+
LineStrip -> gl_LINE_STRIP
31+
Triangles -> gl_TRIANGLES
32+
TriangleStrip -> gl_TRIANGLE_STRIP
33+
TriangleFan -> gl_TRIANGLE_FAN
34+
Quads -> gl_QUADS
35+
QuadStrip -> gl_QUAD_STRIP
36+
Polygon -> gl_POLYGON
37+
Patches -> gl_PATCHES
38+
39+
unmarshalPrimitiveMode :: GLenum -> PrimitiveMode
40+
unmarshalPrimitiveMode x
41+
| x == gl_POINTS = Points
42+
| x == gl_LINES = Lines
43+
| x == gl_LINE_LOOP = LineLoop
44+
| x == gl_LINE_STRIP = LineStrip
45+
| x == gl_TRIANGLES = Triangles
46+
| x == gl_TRIANGLE_STRIP = TriangleStrip
47+
| x == gl_TRIANGLE_FAN = TriangleFan
48+
| x == gl_QUADS = Quads
49+
| x == gl_QUAD_STRIP = QuadStrip
50+
| x == gl_POLYGON = Polygon
51+
| x == gl_PATCHES = Patches
52+
| otherwise = error ("unmarshalPrimitiveMode: illegal value " ++ show x)

src/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,9 @@ data PName1I
366366
| GetMaxFragmentUniformComponents -- ^ sizei
367367
| GetMaxVertexAttribs -- ^ sizei
368368
| GetMaxVaryingFloats -- ^ sizei
369+
-- tessellation
370+
| GetMaxPatchVertices -- ^ int
371+
| GetMaxTessellationLevel -- ^ int
369372
-- coordtrans
370373
| GetMatrixMode -- ^ enum
371374
| GetModelviewStackDepth -- ^ sizei
@@ -625,6 +628,9 @@ instance GetPName PName1I where
625628
GetMaxFragmentUniformComponents -> Just gl_MAX_FRAGMENT_UNIFORM_COMPONENTS
626629
GetMaxVaryingFloats -> Just gl_MAX_VARYING_COMPONENTS
627630
GetMaxVertexAttribs -> Just gl_MAX_VERTEX_ATTRIBS
631+
-- tessellation
632+
GetMaxPatchVertices -> Just gl_MAX_PATCH_VERTICES
633+
GetMaxTessellationLevel -> Just gl_MAX_TESS_GEN_LEVEL
628634
-- coordtrans
629635
GetMatrixMode -> Just gl_MATRIX_MODE
630636
GetModelviewStackDepth -> Just gl_MODELVIEW_STACK_DEPTH

src/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
module Graphics.Rendering.OpenGL.GL.Shaders.Limits (
1616
maxVertexTextureImageUnits, maxTextureImageUnits,
1717
maxCombinedTextureImageUnits, maxTextureCoords, maxVertexUniformComponents,
18-
maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats
18+
maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats,
19+
maxTessellationLevel
1920
) where
2021

2122
import Graphics.Rendering.OpenGL.GL.StateVar
@@ -76,5 +77,10 @@ maxVertexAttribs = getLimit GetMaxVertexAttribs
7677
maxVaryingFloats :: GettableStateVar GLsizei
7778
maxVaryingFloats = getLimit GetMaxVaryingFloats
7879

80+
-- | Contains the maximum allowed tessellation level.
81+
82+
maxTessellationLevel :: GettableStateVar GLint
83+
maxTessellationLevel = makeGettableStateVar $ getInteger1 id GetMaxTessellationLevel
84+
7985
getLimit :: PName1I -> GettableStateVar GLsizei
8086
getLimit = makeGettableStateVar . getSizei1 id

src/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import Foreign.Marshal.Array
3333
import Graphics.Rendering.OpenGL.GL.ByteString
3434
import Graphics.Rendering.OpenGL.GL.DataType
3535
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
36+
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
3637
import Graphics.Rendering.OpenGL.GL.QueryUtils
3738
import Graphics.Rendering.OpenGL.GL.Shaders.Program
3839
import Graphics.Rendering.OpenGL.GL.Shaders.Variables

src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import Graphics.Rendering.OpenGL.GL.Capability
4242
import Graphics.Rendering.OpenGL.GL.DataType
4343
import Graphics.Rendering.OpenGL.GL.GLboolean
4444
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
45+
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
4546
import Graphics.Rendering.OpenGL.GL.QueryUtils
4647
import Graphics.Rendering.OpenGL.GL.StateVar
4748
import Graphics.Rendering.OpenGL.GL.Texturing.TextureUnit

src/Graphics/Rendering/OpenGL/GLU/NURBS.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import Graphics.Rendering.OpenGL.GL.CoordTrans
4444
import Graphics.Rendering.OpenGL.GL.Exception
4545
import Graphics.Rendering.OpenGL.GL.GLboolean
4646
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
47+
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
4748
import Graphics.Rendering.OpenGL.GL.VertexSpec
4849
import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
4950
import Graphics.Rendering.OpenGL.Raw

src/Graphics/Rendering/OpenGL/GLU/Tessellation.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
-- Module : Graphics.Rendering.OpenGL.GLU.Tessellation
44
-- Copyright : (c) Sven Panne 2002-2013
55
-- License : BSD3
6-
--
6+
--
77
-- Maintainer : Sven Panne <svenpanne@gmail.com>
88
-- Stability : stable
99
-- Portability : portable
@@ -48,9 +48,9 @@ import Graphics.Rendering.OpenGL.GL.Tensor
4848
import Graphics.Rendering.OpenGL.GL.EdgeFlag ( unmarshalEdgeFlag )
4949
import Graphics.Rendering.OpenGL.GL.Exception ( bracket )
5050
import Graphics.Rendering.OpenGL.GL.GLboolean ( marshalGLboolean )
51-
import Graphics.Rendering.OpenGL.GL.PrimitiveMode ( unmarshalPrimitiveMode )
52-
import Graphics.Rendering.OpenGL.GL.BeginEnd (
53-
PrimitiveMode, EdgeFlag(BeginsInteriorEdge) )
51+
import Graphics.Rendering.OpenGL.GL.PrimitiveMode ( PrimitiveMode )
52+
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal ( unmarshalPrimitiveMode )
53+
import Graphics.Rendering.OpenGL.GL.BeginEnd ( EdgeFlag(BeginsInteriorEdge) )
5454
import Graphics.Rendering.OpenGL.GL.VertexSpec
5555
import Graphics.Rendering.OpenGL.GL.QueryUtils
5656
import Graphics.Rendering.OpenGL.GLU.ErrorsInternal

0 commit comments

Comments
 (0)