Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2cca44f12eb8ef579d4d0baff7068f29 > files > 339

ghc-OpenGL-devel-2.2.3.0-7.fc15.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>Graphics/Rendering/OpenGL/GL/BeginEnd.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module      :  Graphics.Rendering.OpenGL.GL.BeginEnd</span>
<a name="line-4"></a><span class='hs-comment'>-- Copyright   :  (c) Sven Panne 2002-2009</span>
<a name="line-5"></a><span class='hs-comment'>-- License     :  BSD-style (see the file libraries/OpenGL/LICENSE)</span>
<a name="line-6"></a><span class='hs-comment'>-- </span>
<a name="line-7"></a><span class='hs-comment'>-- Maintainer  :  sven.panne@aedion.de</span>
<a name="line-8"></a><span class='hs-comment'>-- Stability   :  stable</span>
<a name="line-9"></a><span class='hs-comment'>-- Portability :  portable</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- This module corresponds to section 2.6 (Begin\/End Paradigm) of the</span>
<a name="line-12"></a><span class='hs-comment'>-- OpenGL 2.1 specs.</span>
<a name="line-13"></a><span class='hs-comment'>--</span>
<a name="line-14"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-15"></a>
<a name="line-16"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>BeginEnd</span> <span class='hs-layout'>(</span>
<a name="line-17"></a>   <span class='hs-comment'>-- * Begin and End Objects</span>
<a name="line-18"></a>   <span class='hs-conid'>PrimitiveMode</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-19"></a>   <span class='hs-varid'>renderPrimitive</span><span class='hs-layout'>,</span> <span class='hs-varid'>unsafeRenderPrimitive</span><span class='hs-layout'>,</span> <span class='hs-varid'>primitiveRestart</span><span class='hs-layout'>,</span>
<a name="line-20"></a>
<a name="line-21"></a>   <span class='hs-comment'>-- * Polygon Edges</span>
<a name="line-22"></a>   <span class='hs-conid'>EdgeFlag</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-23"></a>   <span class='hs-varid'>edgeFlag</span>
<a name="line-24"></a><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>BasicTypes</span> <span class='hs-layout'>(</span> <span class='hs-conid'>GLenum</span><span class='hs-layout'>,</span> <span class='hs-conid'>GLboolean</span> <span class='hs-layout'>)</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>EdgeFlag</span> <span class='hs-layout'>(</span>
<a name="line-28"></a>   <span class='hs-conid'>EdgeFlag</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>marshalEdgeFlag</span><span class='hs-layout'>,</span> <span class='hs-varid'>unmarshalEdgeFlag</span> <span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span> <span class='hs-varid'>bracket_</span><span class='hs-layout'>,</span> <span class='hs-varid'>unsafeBracket_</span> <span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>Extensions</span> <span class='hs-layout'>(</span>
<a name="line-31"></a>   <span class='hs-conid'>FunPtr</span><span class='hs-layout'>,</span> <span class='hs-varid'>unsafePerformIO</span><span class='hs-layout'>,</span> <span class='hs-conid'>Invoker</span><span class='hs-layout'>,</span> <span class='hs-varid'>getProcAddress</span> <span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>PrimitiveMode</span> <span class='hs-layout'>(</span>
<a name="line-33"></a>   <span class='hs-conid'>PrimitiveMode</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>marshalPrimitiveMode</span> <span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>QueryUtils</span> <span class='hs-layout'>(</span>
<a name="line-35"></a>   <span class='hs-varid'>getBoolean1</span><span class='hs-layout'>,</span> <span class='hs-conid'>GetPName</span><span class='hs-layout'>(</span><span class='hs-conid'>GetEdgeFlag</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>StateVar</span> <span class='hs-layout'>(</span> <span class='hs-conid'>StateVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>makeStateVar</span> <span class='hs-layout'>)</span>
<a name="line-37"></a>
<a name="line-38"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-39"></a>
<a name="line-40"></a><span class='hs-cpp'>#include "HsOpenGLExt.h"</span>
<a name="line-41"></a>
<a name="line-42"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-comment'>-- | Delimit the vertices that define a primitive or a group of like primitives.</span>
<a name="line-45"></a><span class='hs-comment'>--</span>
<a name="line-46"></a><span class='hs-comment'>-- Only a subset of GL commands can be used in the delimited action:</span>
<a name="line-47"></a><span class='hs-comment'>-- Those for specifying vertex coordinates</span>
<a name="line-48"></a><span class='hs-comment'>-- ('Graphics.Rendering.OpenGL.GL.VertexSpec.vertex',</span>
<a name="line-49"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.vertexv'),</span>
<a name="line-50"></a><span class='hs-comment'>-- vertex colors</span>
<a name="line-51"></a><span class='hs-comment'>-- ('Graphics.Rendering.OpenGL.GL.VertexSpec.color',</span>
<a name="line-52"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.colorv',</span>
<a name="line-53"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.secondaryColor',</span>
<a name="line-54"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.secondaryColorv',</span>
<a name="line-55"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.index',</span>
<a name="line-56"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.indexv'),</span>
<a name="line-57"></a><span class='hs-comment'>-- normal</span>
<a name="line-58"></a><span class='hs-comment'>-- ('Graphics.Rendering.OpenGL.GL.VertexSpec.normal',</span>
<a name="line-59"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.normalv'),</span>
<a name="line-60"></a><span class='hs-comment'>-- texture coordinates</span>
<a name="line-61"></a><span class='hs-comment'>-- ('Graphics.Rendering.OpenGL.GL.VertexSpec.texCoord',</span>
<a name="line-62"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.texCoordv',</span>
<a name="line-63"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.multiTexCoord',</span>
<a name="line-64"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.multiTexCoordv'),</span>
<a name="line-65"></a><span class='hs-comment'>-- and fog coordinates</span>
<a name="line-66"></a><span class='hs-comment'>-- ('Graphics.Rendering.OpenGL.GL.VertexSpec.fogCoord',</span>
<a name="line-67"></a><span class='hs-comment'>--  'Graphics.Rendering.OpenGL.GL.VertexSpec.fogCoordv').</span>
<a name="line-68"></a><span class='hs-comment'>-- Additionally,</span>
<a name="line-69"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalPoint1',</span>
<a name="line-70"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalPoint2',</span>
<a name="line-71"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalCoord1',</span>
<a name="line-72"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalCoord1v',</span>
<a name="line-73"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalCoord2',</span>
<a name="line-74"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Evaluators.evalCoord2v',</span>
<a name="line-75"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialAmbient',</span>
<a name="line-76"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialDiffuse',</span>
<a name="line-77"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialAmbientAndDiffuse',</span>
<a name="line-78"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialSpecular',</span>
<a name="line-79"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialEmission',</span>
<a name="line-80"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Colors.materialShininess',</span>
<a name="line-81"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.DisplayLists.callList',</span>
<a name="line-82"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.DisplayLists.callLists',</span>
<a name="line-83"></a><span class='hs-comment'>-- and setting 'edgeFlag' are allowed. Writing the respective state variables</span>
<a name="line-84"></a><span class='hs-comment'>-- is allowed in the delimited action, too.</span>
<a name="line-85"></a><span class='hs-comment'>--</span>
<a name="line-86"></a><span class='hs-comment'>-- Regardless of the chosen 'PrimitiveMode', there is no limit to the number of</span>
<a name="line-87"></a><span class='hs-comment'>-- vertices that can be defined during a single 'renderPrimitive'. Lines,</span>
<a name="line-88"></a><span class='hs-comment'>-- triangles, quadrilaterals, and polygons that are incompletely specified are</span>
<a name="line-89"></a><span class='hs-comment'>-- not drawn. Incomplete specification results when either too few vertices are</span>
<a name="line-90"></a><span class='hs-comment'>-- provided to specify even a single primitive or when an incorrect multiple of</span>
<a name="line-91"></a><span class='hs-comment'>-- vertices is specified. The incomplete primitive is ignored; the rest are</span>
<a name="line-92"></a><span class='hs-comment'>-- drawn.</span>
<a name="line-93"></a><span class='hs-comment'>--</span>
<a name="line-94"></a><span class='hs-comment'>-- The minimum specification of vertices for each primitive is as follows: 1</span>
<a name="line-95"></a><span class='hs-comment'>-- for a point, 2 for a line, 3 for a triangle, 4 for a quadrilateral, and 3 for</span>
<a name="line-96"></a><span class='hs-comment'>-- a polygon. Modes that require a certain multiple of vertices are 'Lines' (2),</span>
<a name="line-97"></a><span class='hs-comment'>-- 'Triangles' (3), 'Quads' (4), and 'QuadStrip' (2).</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="renderPrimitive"></a><span class='hs-definition'>renderPrimitive</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PrimitiveMode</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-100"></a><span class='hs-definition'>renderPrimitive</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderPrim</span> <span class='hs-varid'>bracket_</span>
<a name="line-101"></a>
<a name="line-102"></a><span class='hs-comment'>-- | A more efficient, but potentially dangerous version of 'renderPrimitive':</span>
<a name="line-103"></a><span class='hs-comment'>-- The given action is not allowed to throw an exception.</span>
<a name="line-104"></a>
<a name="line-105"></a><a name="unsafeRenderPrimitive"></a><span class='hs-definition'>unsafeRenderPrimitive</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PrimitiveMode</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-106"></a><span class='hs-definition'>unsafeRenderPrimitive</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderPrim</span> <span class='hs-varid'>unsafeBracket_</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="renderPrim"></a><span class='hs-comment'>{-# INLINE renderPrim #-}</span>
<a name="line-109"></a><span class='hs-definition'>renderPrim</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>PrimitiveMode</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-110"></a><span class='hs-definition'>renderPrim</span> <span class='hs-varid'>brack_</span> <span class='hs-varid'>beginMode</span> <span class='hs-keyglyph'>=</span>
<a name="line-111"></a>   <span class='hs-varid'>brack_</span> <span class='hs-layout'>(</span><span class='hs-varid'>glBegin</span> <span class='hs-layout'>(</span><span class='hs-varid'>marshalPrimitiveMode</span> <span class='hs-varid'>beginMode</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>glEnd</span>
<a name="line-112"></a>
<a name="line-113"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-conid'>CALLCONV</span> <span class='hs-keyword'>unsafe</span> <span class='hs-str'>"glBegin"</span> <span class='hs-varid'>glBegin</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GLenum</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-114"></a>
<a name="line-115"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-conid'>CALLCONV</span> <span class='hs-keyword'>unsafe</span> <span class='hs-str'>"glEnd"</span> <span class='hs-varid'>glEnd</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-116"></a>
<a name="line-117"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-118"></a>
<a name="line-119"></a><a name="primitiveRestart"></a><span class='hs-definition'>primitiveRestart</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-120"></a><span class='hs-definition'>primitiveRestart</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>glPrimitiveRestartNV</span>
<a name="line-121"></a>
<a name="line-122"></a><span class='hs-conid'>EXTENSION_ENTRY</span><span class='hs-layout'>(</span><span class='hs-str'>"GL_NV_primitive_restart"</span><span class='hs-layout'>,</span><span class='hs-varid'>glPrimitiveRestartNV</span><span class='hs-layout'>,</span><span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-123"></a>
<a name="line-124"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-125"></a>
<a name="line-126"></a><span class='hs-comment'>-- | Each vertex of a polygon, separate triangle, or separate quadrilateral</span>
<a name="line-127"></a><span class='hs-comment'>-- specified during 'renderPrimitive' is marked as the start of either a boundary</span>
<a name="line-128"></a><span class='hs-comment'>-- or nonboundary (interior) edge.</span>
<a name="line-129"></a><span class='hs-comment'>--</span>
<a name="line-130"></a><span class='hs-comment'>-- The vertices of connected triangles and connected quadrilaterals are always</span>
<a name="line-131"></a><span class='hs-comment'>-- marked as boundary, regardless of the value of the edge flag.</span>
<a name="line-132"></a><span class='hs-comment'>--</span>
<a name="line-133"></a><span class='hs-comment'>-- Boundary and nonboundary edge flags on vertices are significant only if</span>
<a name="line-134"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Polygons.polygonMode' is set to</span>
<a name="line-135"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Polygons.Point' or</span>
<a name="line-136"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Polygons.Line'.</span>
<a name="line-137"></a><span class='hs-comment'>--</span>
<a name="line-138"></a><span class='hs-comment'>-- Note that the current edge flag can be updated at any time, in particular</span>
<a name="line-139"></a><span class='hs-comment'>-- during 'renderPrimitive'.</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="edgeFlag"></a><span class='hs-definition'>edgeFlag</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>StateVar</span> <span class='hs-conid'>EdgeFlag</span>
<a name="line-142"></a><span class='hs-definition'>edgeFlag</span> <span class='hs-keyglyph'>=</span>
<a name="line-143"></a>   <span class='hs-varid'>makeStateVar</span> <span class='hs-layout'>(</span><span class='hs-varid'>getBoolean1</span> <span class='hs-varid'>unmarshalEdgeFlag</span> <span class='hs-conid'>GetEdgeFlag</span><span class='hs-layout'>)</span>
<a name="line-144"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>glEdgeFlag</span> <span class='hs-varop'>.</span> <span class='hs-varid'>marshalEdgeFlag</span><span class='hs-layout'>)</span>
<a name="line-145"></a>
<a name="line-146"></a><span class='hs-keyword'>foreign</span> <span class='hs-keyword'>import</span> <span class='hs-conid'>CALLCONV</span> <span class='hs-keyword'>unsafe</span> <span class='hs-str'>"glEdgeFlag"</span> <span class='hs-varid'>glEdgeFlag</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GLboolean</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
</pre></body>
</html>