{-# LANGUAGE ForeignFunctionInterface, CPP #-}
--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.Raw.NV.TransformFeedback
-- Copyright   :  (c) Sven Panne 2009
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  sven.panne@aedion.de
-- Stability   :  stable
-- Portability :  portable
--
-- All raw functions and tokens from the NV_transform_feedback extension, see
-- <http://www.opengl.org/registry/specs/NV/transform_feedback.txt>.
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.Raw.NV.TransformFeedback (
   -- * Functions
   glBindBufferRange,
   glBindBufferOffset,
   glBindBufferBase,
   glTransformFeedbackAttribs,
   glTransformFeedbackVaryingsNV,
   glBeginTransformFeedback,
   glEndTransformFeedback,
   glGetVaryingLocation,
   glGetActiveVarying,
   glActiveVarying,
   glGetTransformFeedbackVaryingNV,
   glGetIntegerIndexedv,
   glGetBooleanIndexedv,
   -- * Tokens
   gl_TRANSFORM_FEEDBACK_BUFFER,
   gl_TRANSFORM_FEEDBACK_BUFFER_START,
   gl_TRANSFORM_FEEDBACK_BUFFER_SIZE,
   gl_TRANSFORM_FEEDBACK_RECORD,
   gl_TRANSFORM_FEEDBACK_BUFFER_BINDING,
   gl_INTERLEAVED_ATTRIBS,
   gl_SEPARATE_ATTRIBS,
   gl_PRIMITIVES_GENERATED,
   gl_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
   gl_RASTERIZER_DISCARD,
   gl_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS,
   gl_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,
   gl_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS,
   gl_TRANSFORM_FEEDBACK_ATTRIBS,
   gl_ACTIVE_VARYINGS,
   gl_ACTIVE_VARYING_MAX_LENGTH,
   gl_TRANSFORM_FEEDBACK_VARYINGS,
   gl_TRANSFORM_FEEDBACK_BUFFER_MODE,
   gl_BACK_PRIMARY_COLOR,
   gl_BACK_SECONDARY_COLOR,
   gl_TEXTURE_COORD,
   gl_CLIP_DISTANCE,
   gl_VERTEX_ID,
   gl_PRIMITIVE_ID,
   gl_GENERIC_ATTRIB,
   gl_POINT_SIZE,
   gl_FOG_COORDINATE,
   gl_SECONDARY_COLOR,
   gl_PRIMARY_COLOR,
   gl_POSITION,
   gl_LAYER,
   gl_UNSIGNED_INT_VEC2,
   gl_UNSIGNED_INT_VEC3,
   gl_UNSIGNED_INT_VEC4
) where

import Foreign.Ptr
import Foreign.C.Types
import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility
import Graphics.Rendering.OpenGL.Raw.Core32
import Graphics.Rendering.OpenGL.Raw.EXT.DirectStateAccess
import Graphics.Rendering.OpenGL.Raw.Extensions
import Graphics.Rendering.OpenGL.Raw.NV.ParameterBufferObject
import Graphics.Rendering.OpenGL.Raw.NV.RegisterCombiners
import Graphics.Rendering.OpenGL.Raw.Core31.TypesInternal

#include "HsOpenGLRaw.h"

extensionNameString :: String
extensionNameString = "GL_NV_transform_feedback"

EXTENSION_ENTRY(glTransformFeedbackAttribs,GLsizei -> Ptr GLint -> GLenum -> IO ())
EXTENSION_ENTRY(glTransformFeedbackVaryingsNV,GLuint -> GLsizei -> Ptr GLint -> GLenum -> IO ())
EXTENSION_ENTRY(glGetVaryingLocation,GLuint -> Ptr GLchar -> IO GLint)
EXTENSION_ENTRY(glGetActiveVarying,GLuint -> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> Ptr GLenum -> Ptr GLchar -> IO ())
EXTENSION_ENTRY(glActiveVarying,GLuint -> Ptr GLchar -> IO ())
EXTENSION_ENTRY(glGetTransformFeedbackVaryingNV,GLuint -> GLuint -> Ptr GLint -> IO ())

gl_TRANSFORM_FEEDBACK_RECORD :: GLenum
gl_TRANSFORM_FEEDBACK_RECORD = 0x8C86

gl_TRANSFORM_FEEDBACK_ATTRIBS :: GLenum
gl_TRANSFORM_FEEDBACK_ATTRIBS = 0x8C7E

gl_ACTIVE_VARYINGS :: GLenum
gl_ACTIVE_VARYINGS = 0x8C81

gl_ACTIVE_VARYING_MAX_LENGTH :: GLenum
gl_ACTIVE_VARYING_MAX_LENGTH = 0x8C82

gl_BACK_PRIMARY_COLOR :: GLenum
gl_BACK_PRIMARY_COLOR = 0x8C77

gl_BACK_SECONDARY_COLOR :: GLenum
gl_BACK_SECONDARY_COLOR = 0x8C78

gl_TEXTURE_COORD :: GLenum
gl_TEXTURE_COORD = 0x8C79

gl_CLIP_DISTANCE :: GLenum
gl_CLIP_DISTANCE = 0x8C7A

gl_VERTEX_ID :: GLenum
gl_VERTEX_ID = 0x8C7B

gl_PRIMITIVE_ID :: GLenum
gl_PRIMITIVE_ID = 0x8C7C

gl_GENERIC_ATTRIB :: GLenum
gl_GENERIC_ATTRIB = 0x8C7D

gl_LAYER :: GLenum
gl_LAYER = 0x8DAA