/*
* Mesa 3-D graphics library
- * Version: 4.1
+ * Version: 6.5.2
*
- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */
struct gl_pixelstore_attrib;
+struct gl_display_list;
-/* Mask bits sent to the driver Clear() function */
-#define DD_FRONT_LEFT_BIT FRONT_LEFT_BIT /* 1 */
-#define DD_FRONT_RIGHT_BIT FRONT_RIGHT_BIT /* 2 */
-#define DD_BACK_LEFT_BIT BACK_LEFT_BIT /* 4 */
-#define DD_BACK_RIGHT_BIT BACK_RIGHT_BIT /* 8 */
-#define DD_AUX0 AUX0_BIT /* future use */
-#define DD_AUX1 AUX1_BIT /* future use */
-#define DD_AUX2 AUX2_BIT /* future use */
-#define DD_AUX3 AUX3_BIT /* future use */
-#define DD_DEPTH_BIT GL_DEPTH_BUFFER_BIT /* 0x00000100 */
-#define DD_ACCUM_BIT GL_ACCUM_BUFFER_BIT /* 0x00000200 */
-#define DD_STENCIL_BIT GL_STENCIL_BUFFER_BIT /* 0x00000400 */
+#if FEATURE_ARB_vertex_buffer_object
+/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return
+ * NULL) if buffer is unavailable for immediate mapping.
+ *
+ * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it
+ * would require more book-keeping in the driver than seems necessary
+ * at this point.
+ *
+ * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't
+ * want to provoke the driver to throw away the old storage, we will
+ * respect the contents of already referenced data.
+ */
+#define MESA_MAP_NOWAIT_BIT 0x0040
+#endif
/**
* Device driver function table.
+ * Core Mesa uses these function pointers to call into device drivers.
+ * Most of these functions directly correspond to OpenGL state commands.
+ * Core Mesa will call these functions after error checking has been done
+ * so that the drivers don't have to worry about error testing.
+ *
+ * Vertex transformation/clipping/lighting is patched into the T&L module.
+ * Rasterization functions are patched into the swrast module.
+ *
+ * Note: when new functions are added here, the drivers/common/driverfuncs.c
+ * file should be updated too!!!
*/
struct dd_function_table {
/**
* Return a string as needed by glGetString().
- *
- * Only the GL_RENDERER token must be implemented. Otherwise, NULL can be
+ * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be
* returned.
*/
const GLubyte * (*GetString)( GLcontext *ctx, GLenum name );
* This is in addition to any state change callbacks Mesa may already have
* made.
*/
- void (*UpdateState)( GLcontext *ctx, GLuint new_state );
-
- /**
- * Clear the color/depth/stencil/accum buffer(s).
- *
- * \param mask a bitmask of the DD_*_BIT values defined above that indicates
- * which buffers need to be cleared.
- * \param all if true then clear the whole buffer, else clear only the
- * region defined by <tt>(x, y, width, height)</tt>.
- *
- * This function must obey the glColorMask(), glIndexMask() and glStencilMask()
- * settings!
- * Software Mesa can do masked clears if the device driver can't.
- */
- void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all,
- GLint x, GLint y, GLint width, GLint height );
-
- /**
- * Specify the current buffer for writing.
- *
- * Called via glDrawBuffer(). Note the driver must organize fallbacks (e.g.
- * with swrast) if it cannot implement the requested mode.
- */
- void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
-
- /**
- * Specifies the current buffer for reading.
- *
- * Called via glReadBuffer().
- */
- void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
+ void (*UpdateState)( GLcontext *ctx, GLbitfield new_state );
/**
* Get the width and height of the named buffer/window.
*
* Mesa uses this to determine when the driver's window size has changed.
+ * XXX OBSOLETE: this function will be removed in the future.
*/
void (*GetBufferSize)( GLframebuffer *buffer,
GLuint *width, GLuint *height );
/**
- * Resize the driver's depth/stencil/accum/back buffers to match the
- * size given in the GLframebuffer struct.
- *
- * This is typically called when Mesa detects that a window size has changed.
+ * Resize the given framebuffer to the given size.
+ * XXX OBSOLETE: this function will be removed in the future.
*/
- void (*ResizeBuffers)( GLframebuffer *buffer );
+ void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb,
+ GLuint width, GLuint height);
+
+ /**
+ * Called whenever an error is generated.
+ * __GLcontextRec::ErrorValue contains the error value.
+ */
+ void (*Error)( GLcontext *ctx );
/**
* This is called whenever glFinish() is called.
void (*Flush)( GLcontext *ctx );
/**
- * Called whenever an error is generated.
- *
- * __GLcontextRec::ErrorValue contains the error value.
+ * Clear the color/depth/stencil/accum buffer(s).
+ * \param buffers a bitmask of BUFFER_BIT_* flags indicating which
+ * renderbuffers need to be cleared.
*/
- void (*Error)( GLcontext *ctx );
-
+ void (*Clear)( GLcontext *ctx, GLbitfield buffers );
/**
- * \name For hardware accumulation buffer
+ * Execute glAccum command.
*/
- /*@{*/
+ void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value );
+
+
/**
- * Execute glAccum command within the given scissor region.
+ * Execute glRasterPos, updating the ctx->Current.Raster fields
*/
- void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value,
- GLint xpos, GLint ypos, GLint width, GLint height );
- /*@}*/
-
+ void (*RasterPos)( GLcontext *ctx, const GLfloat v[4] );
/**
- * \name glDraw(), glRead(), glCopyPixels() and glBitmap() functions
+ * \name Image-related functions
*/
/*@{*/
/**
- * This is called by glDrawPixels().
- *
+ * Called by glDrawPixels().
* \p unpack describes how to unpack the source image data.
*/
void (*DrawPixels)( GLcontext *ctx,
GLvoid *dest );
/**
- * Do a glCopyPixels().
- *
- * This function must respect all rasterization state, glPixelTransfer(),
- * glPixelZoom(), etc.
+ * Called by glCopyPixels().
*/
- void (*CopyPixels)( GLcontext *ctx,
- GLint srcx, GLint srcy,
- GLsizei width, GLsizei height,
- GLint dstx, GLint dsty, GLenum type );
+ void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy,
+ GLsizei width, GLsizei height,
+ GLint dstx, GLint dsty, GLenum type );
/**
- * This is called by glBitmap().
- *
- * Works the same as dd_function_table::DrawPixels, above.
+ * Called by glBitmap().
*/
void (*Bitmap)( GLcontext *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
* functions. The driver should examine \p internalFormat and return a
* pointer to an appropriate gl_texture_format.
*/
- const struct gl_texture_format *
- (*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat,
- GLenum srcFormat, GLenum srcType );
+ const struct gl_texture_format *(*ChooseTextureFormat)( GLcontext *ctx,
+ GLint internalFormat, GLenum srcFormat, GLenum srcType );
/**
* Called by glTexImage1D().
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
+ /**
+ * Called by glGetTexImage().
+ */
+ void (*GetTexImage)( GLcontext *ctx, GLenum target, GLint level,
+ GLenum format, GLenum type, GLvoid *pixels,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage );
+
/**
* Called by glCopyTexImage1D().
*
GLint x, GLint y,
GLsizei width, GLsizei height );
+ /**
+ * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled.
+ */
+ void (*GenerateMipmap)(GLcontext *ctx, GLenum target,
+ struct gl_texture_object *texObj);
+
/**
* Called by glTexImage[123]D when user specifies a proxy texture
* target.
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
+
+
+ /**
+ * Called by glGetCompressedTexImage.
+ */
+ void (*GetCompressedTexImage)(GLcontext *ctx, GLenum target, GLint level,
+ GLvoid *img,
+ struct gl_texture_object *texObj,
+ struct gl_texture_image *texImage);
+
+ /**
+ * Called to query number of bytes of storage needed to store the
+ * specified compressed texture.
+ */
+ GLuint (*CompressedTextureSize)( GLcontext *ctx, GLsizei width,
+ GLsizei height, GLsizei depth,
+ GLenum format );
/*@}*/
/**
void (*BindTexture)( GLcontext *ctx, GLenum target,
struct gl_texture_object *tObj );
- /**
- * Called when a texture object is created.
- */
- void (*CreateTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
-
/**
* Called to allocate a new texture object.
- *
- * \note This function pointer should be initialized by drivers \e before
- * calling _mesa_initialize_context() since context initialization involves
- * allocating some texture objects!
+ * A new gl_texture_object should be returned. The driver should
+ * attach to it any device-specific info it needs.
*/
struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name,
GLenum target );
/**
* Called when a texture object is about to be deallocated.
*
- * Driver should free anything attached to the DriverData pointers.
+ * Driver should delete the gl_texture_object object and anything
+ * hanging off of it.
*/
void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
*/
struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx );
+ /**
+ * Called to free tImage->Data.
+ */
+ void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
+
+ /** Map texture image data into user space */
+ void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+ /** Unmap texture images from user space */
+ void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
+
+ /**
+ * Note: no context argument. This function doesn't initially look
+ * like it belongs here, except that the driver is the only entity
+ * that knows for sure how the texture memory is allocated - via
+ * the above callbacks. There is then an argument that the driver
+ * knows what memcpy paths might be fast. Typically this is invoked with
+ *
+ * to -- a pointer into texture memory allocated by NewTextureImage() above.
+ * from -- a pointer into client memory or a mesa temporary.
+ * sz -- nr bytes to copy.
+ */
+ void* (*TextureMemCpy)( void *to, const void *from, size_t sz );
+
/**
* Called by glAreTextureResident().
*/
/*@}*/
+ /**
+ * \name Vertex/fragment program functions
+ */
+ /*@{*/
+ /** Bind a vertex/fragment program */
+ void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog);
+ /** Allocate a new program */
+ struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id);
+ /** Delete a program */
+ void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog);
+ /** Notify driver that a program string has been specified. */
+ void (*ProgramStringNotify)(GLcontext *ctx, GLenum target,
+ struct gl_program *prog);
+
+ /** Query if program can be loaded onto hardware */
+ GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target,
+ struct gl_program *prog);
+
+ /*@}*/
+
+
/**
* \name State-changing functions.
*
/** Set the blend color */
void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
/** Set the blend equation */
- void (*BlendEquation)(GLcontext *ctx, GLenum mode);
+ void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA);
/** Specify pixel arithmetic */
- void (*BlendFunc)(GLcontext *ctx, GLenum sfactor, GLenum dfactor);
void (*BlendFuncSeparate)(GLcontext *ctx,
GLenum sfactorRGB, GLenum dfactorRGB,
GLenum sfactorA, GLenum dfactorA);
void (*DepthFunc)(GLcontext *ctx, GLenum func);
/** Enable or disable writing into the depth buffer */
void (*DepthMask)(GLcontext *ctx, GLboolean flag);
- /** Specify mapping of depth values from normalized device coordinates to window coordinates */
+ /** Specify mapping of depth values from NDC to window coordinates */
void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval);
+ /** Specify the current buffer for writing */
+ void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
+ /** Specify the buffers for writing for fragment programs*/
+ void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers );
/** Enable or disable server-side gl capabilities */
void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state);
/** Specify fog parameters */
void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode);
/** Control the writing of individual bits in the color index buffers */
void (*IndexMask)(GLcontext *ctx, GLuint mask);
- /** Set light source parameters */
+ /** Set light source parameters.
+ * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already
+ * been transformed to eye-space.
+ */
void (*Lightfv)(GLcontext *ctx, GLenum light,
GLenum pname, const GLfloat *params );
/** Set the lighting model parameters */
void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units);
/** Set the polygon stippling pattern */
void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
+ /* Specifies the current buffer for reading */
+ void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
/** Set rasterization mode */
void (*RenderMode)(GLcontext *ctx, GLenum mode );
/** Define the scissor box */
void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
/** Select flat or smooth shading */
void (*ShadeModel)(GLcontext *ctx, GLenum mode);
- /** Set function and reference value for stencil testing */
- void (*StencilFunc)(GLcontext *ctx, GLenum func, GLint ref, GLuint mask);
- /** Control the writing of individual bits in the stencil planes */
- void (*StencilMask)(GLcontext *ctx, GLuint mask);
- /** Set stencil test actions */
- void (*StencilOp)(GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass);
- void (*ActiveStencilFace)(GLcontext *ctx, GLuint face);
+ /** OpenGL 2.0 two-sided StencilFunc */
+ void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func,
+ GLint ref, GLuint mask);
+ /** OpenGL 2.0 two-sided StencilMask */
+ void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask);
+ /** OpenGL 2.0 two-sided StencilOp */
+ void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail,
+ GLenum zfail, GLenum zpass);
/** Control the generation of texture coordinates */
void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname,
const GLfloat *params);
void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr);
void (*VertexAttribPointer)(GLcontext *ctx, GLuint index, GLint size,
GLenum type, GLsizei stride, const GLvoid *ptr);
+ void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count );
+ void (*UnlockArraysEXT)( GLcontext *ctx );
/*@}*/
/*@}*/
+ /**
+ * \name Vertex/pixel buffer object functions
+ */
+#if FEATURE_ARB_vertex_buffer_object
+ /*@{*/
+ void (*BindBuffer)( GLcontext *ctx, GLenum target,
+ struct gl_buffer_object *obj );
+
+ struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer,
+ GLenum target );
+
+ void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
+
+ void (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
+ const GLvoid *data, GLenum usage,
+ struct gl_buffer_object *obj );
+
+ void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
+ GLsizeiptrARB size, const GLvoid *data,
+ struct gl_buffer_object *obj );
+
+ void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
+ GLintptrARB offset, GLsizeiptrARB size,
+ GLvoid *data, struct gl_buffer_object *obj );
+
+ void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
+ struct gl_buffer_object *obj );
+
+ /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access:
+ */
+ void * (*MapBufferRange)( GLcontext *ctx, GLenum target,
+ GLintptr offset, GLsizeiptr length, GLbitfield access,
+ struct gl_buffer_object *obj);
+
+ void (*FlushMappedBufferRange) (GLcontext *ctx, GLenum target,
+ GLintptr offset, GLsizeiptr length,
+ struct gl_buffer_object *obj);
+
+ GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
+ struct gl_buffer_object *obj );
+ /*@}*/
+#endif
+
+ /**
+ * \name Functions for GL_EXT_framebuffer_object
+ */
+#if FEATURE_EXT_framebuffer_object
+ /*@{*/
+ struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
+ struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
+ void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
+ struct gl_framebuffer *fb, struct gl_framebuffer *fbread);
+ void (*FramebufferRenderbuffer)(GLcontext *ctx,
+ struct gl_framebuffer *fb,
+ GLenum attachment,
+ struct gl_renderbuffer *rb);
+ void (*RenderTexture)(GLcontext *ctx,
+ struct gl_framebuffer *fb,
+ struct gl_renderbuffer_attachment *att);
+ void (*FinishRenderTexture)(GLcontext *ctx,
+ struct gl_renderbuffer_attachment *att);
+ void (*ValidateFramebuffer)(GLcontext *ctx,
+ struct gl_framebuffer *fb);
+ /*@}*/
+#endif
+#if FEATURE_EXT_framebuffer_blit
+ void (*BlitFramebuffer)(GLcontext *ctx,
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+ GLbitfield mask, GLenum filter);
+#endif
+
+ /**
+ * \name Query objects
+ */
+ /*@{*/
+ struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id);
+ void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q);
+ void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q);
+ void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q);
+ void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q);
+ void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q);
+ /*@}*/
+
+
+ /**
+ * \name Vertex Array objects
+ */
+ /*@{*/
+ struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id);
+ void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
+ void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj);
+ /*@}*/
+
+ /**
+ * \name GLSL-related functions (ARB extensions and OpenGL 2.x)
+ */
+ /*@{*/
+ void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader);
+ void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index,
+ const GLcharARB *name);
+ void (*CompileShader)(GLcontext *ctx, GLuint shader);
+ GLuint (*CreateShader)(GLcontext *ctx, GLenum type);
+ GLuint (*CreateProgram)(GLcontext *ctx);
+ void (*DeleteProgram2)(GLcontext *ctx, GLuint program);
+ void (*DeleteShader)(GLcontext *ctx, GLuint shader);
+ void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader);
+ void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index,
+ GLsizei maxLength, GLsizei * length, GLint * size,
+ GLenum * type, GLcharARB * name);
+ void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index,
+ GLsizei maxLength, GLsizei *length, GLint *size,
+ GLenum *type, GLcharARB *name);
+ void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount,
+ GLsizei *count, GLuint *obj);
+ GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program,
+ const GLcharARB *name);
+ GLuint (*GetHandle)(GLcontext *ctx, GLenum pname);
+ void (*GetProgramiv)(GLcontext *ctx, GLuint program,
+ GLenum pname, GLint *params);
+ void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize,
+ GLsizei *length, GLchar *infoLog);
+ void (*GetShaderiv)(GLcontext *ctx, GLuint shader,
+ GLenum pname, GLint *params);
+ void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize,
+ GLsizei *length, GLchar *infoLog);
+ void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength,
+ GLsizei *length, GLcharARB *sourceOut);
+ void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
+ GLfloat *params);
+ void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
+ GLint *params);
+ GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
+ const GLcharARB *name);
+ GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
+ GLboolean (*IsShader)(GLcontext *ctx, GLuint name);
+ void (*LinkProgram)(GLcontext *ctx, GLuint program);
+ void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source);
+ void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count,
+ const GLvoid *values, GLenum type);
+ void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows,
+ GLint location, GLsizei count,
+ GLboolean transpose, const GLfloat *values);
+ void (*UseProgram)(GLcontext *ctx, GLuint program);
+ void (*ValidateProgram)(GLcontext *ctx, GLuint program);
+ /* XXX many more to come */
+ /*@}*/
+
+
/**
* \name Support for multiple T&L engines
*/
void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
-#define PRIM_OUTSIDE_BEGIN_END GL_POLYGON+1
-#define PRIM_INSIDE_UNKNOWN_PRIM GL_POLYGON+2
-#define PRIM_UNKNOWN GL_POLYGON+3
+#define PRIM_OUTSIDE_BEGIN_END (GL_POLYGON+1)
+#define PRIM_INSIDE_UNKNOWN_PRIM (GL_POLYGON+2)
+#define PRIM_UNKNOWN (GL_POLYGON+3)
/**
* Set by the driver-supplied T&L engine.
* these conditions.
*/
GLuint NeedFlush;
+ GLuint SaveNeedFlush;
+
+
+ /* Called prior to any of the GLvertexformat functions being
+ * called. Paired with Driver.FlushVertices().
+ */
+ void (*BeginVertices)( GLcontext *ctx );
/**
* If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if
* FLUSH_UPDATE_CURRENT bit, even after performing the update.
*/
void (*FlushVertices)( GLcontext *ctx, GLuint flags );
+ void (*SaveFlushVertices)( GLcontext *ctx );
+
+ /**
+ * Give the driver the opportunity to hook in its own vtxfmt for
+ * compiling optimized display lists. This is called on each valid
+ * glBegin() during list compilation.
+ */
+ GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode );
/**
* Notify driver that the special derived value _NeedEyeCoords has
void (*EndList)( GLcontext *ctx );
/**
- * Called by glCallList(s), but not recursively.
+ * Called by glCallList(s).
*
* Notify the T&L component before and after calling a display list.
- * Called by glCallList(s), but not recursively.
*/
- void (*BeginCallList)( GLcontext *ctx, GLuint list );
+ void (*BeginCallList)( GLcontext *ctx,
+ struct gl_display_list *dlist );
/**
* Called by glEndCallList().
*
*/
void (*EndCallList)( GLcontext *ctx );
- /**
- * Let the T&L component know when the context becomes current.
- */
- void (*MakeCurrent)( GLcontext *ctx, GLframebuffer *drawBuffer,
- GLframebuffer *readBuffer );
-
- /**
- * Called by glLockArraysEXT().
- */
- void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count );
- /**
- * Called by UnlockArraysEXT().
- */
- void (*UnlockArraysEXT)( GLcontext *ctx );
- /*@}*/
-
-
- /**
- * \name Vertex buffer object functions
- */
- /*@{*/
-
- void (*BindBuffer)( GLcontext *ctx, GLenum target,
- struct gl_buffer_object *obj );
-
- struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, int buffer,
- GLenum target );
-
- void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj );
-
- void (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size,
- const GLvoid *data, GLenum usage,
- struct gl_buffer_object *obj );
-
- void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset,
- GLsizeiptrARB size, const GLvoid *data,
- struct gl_buffer_object *obj );
-
- void (*GetBufferSubData)( GLcontext *ctx, GLenum target,
- GLintptrARB offset, GLsizeiptrARB size,
- GLvoid *data, struct gl_buffer_object *obj );
-
- void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access,
- struct gl_buffer_object *obj );
-
- GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target,
- struct gl_buffer_object *obj );
- /*@}*/
};
* \name Vertex
*/
/*@{*/
- void (*ArrayElement)( GLint ); /* NOTE */
- void (*Color3f)( GLfloat, GLfloat, GLfloat );
- void (*Color3fv)( const GLfloat * );
- void (*Color3ub)( GLubyte, GLubyte, GLubyte );
- void (*Color3ubv)( const GLubyte * );
- void (*Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
- void (*Color4fv)( const GLfloat * );
- void (*Color4ub)( GLubyte, GLubyte, GLubyte, GLubyte );
- void (*Color4ubv)( const GLubyte * );
- void (*EdgeFlag)( GLboolean );
- void (*EdgeFlagv)( const GLboolean * );
- void (*EvalCoord1f)( GLfloat ); /* NOTE */
- void (*EvalCoord1fv)( const GLfloat * ); /* NOTE */
- void (*EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
- void (*EvalCoord2fv)( const GLfloat * ); /* NOTE */
- void (*EvalPoint1)( GLint ); /* NOTE */
- void (*EvalPoint2)( GLint, GLint ); /* NOTE */
- void (*FogCoordfEXT)( GLfloat );
- void (*FogCoordfvEXT)( const GLfloat * );
- void (*Indexi)( GLint );
- void (*Indexiv)( const GLint * );
- void (*Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
- void (*MultiTexCoord1fARB)( GLenum, GLfloat );
- void (*MultiTexCoord1fvARB)( GLenum, const GLfloat * );
- void (*MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
- void (*MultiTexCoord2fvARB)( GLenum, const GLfloat * );
- void (*MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
- void (*MultiTexCoord3fvARB)( GLenum, const GLfloat * );
- void (*MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
- void (*MultiTexCoord4fvARB)( GLenum, const GLfloat * );
- void (*Normal3f)( GLfloat, GLfloat, GLfloat );
- void (*Normal3fv)( const GLfloat * );
- void (*SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
- void (*SecondaryColor3fvEXT)( const GLfloat * );
- void (*SecondaryColor3ubEXT)( GLubyte, GLubyte, GLubyte );
- void (*SecondaryColor3ubvEXT)( const GLubyte * );
- void (*TexCoord1f)( GLfloat );
- void (*TexCoord1fv)( const GLfloat * );
- void (*TexCoord2f)( GLfloat, GLfloat );
- void (*TexCoord2fv)( const GLfloat * );
- void (*TexCoord3f)( GLfloat, GLfloat, GLfloat );
- void (*TexCoord3fv)( const GLfloat * );
- void (*TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
- void (*TexCoord4fv)( const GLfloat * );
- void (*Vertex2f)( GLfloat, GLfloat );
- void (*Vertex2fv)( const GLfloat * );
- void (*Vertex3f)( GLfloat, GLfloat, GLfloat );
- void (*Vertex3fv)( const GLfloat * );
- void (*Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
- void (*Vertex4fv)( const GLfloat * );
- void (*CallList)( GLuint ); /* NOTE */
- void (*Begin)( GLenum );
- void (*End)( void );
- void (*VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
- void (*VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */
+ void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Color3fv)( const GLfloat * );
+ void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Color4fv)( const GLfloat * );
+ void (GLAPIENTRYP EdgeFlag)( GLboolean );
+ void (GLAPIENTRYP EvalCoord1f)( GLfloat ); /* NOTE */
+ void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
+ void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
+ void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */
+ void (GLAPIENTRYP EvalPoint1)( GLint ); /* NOTE */
+ void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); /* NOTE */
+ void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
+ void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
+ void (GLAPIENTRYP Indexf)( GLfloat );
+ void (GLAPIENTRYP Indexfv)( const GLfloat * );
+ void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
+ void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
+ void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
+ void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
+ void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
+ void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
+ void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
+ void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Normal3fv)( const GLfloat * );
+ void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
+ void (GLAPIENTRYP TexCoord1f)( GLfloat );
+ void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
+ void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
+ void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
+ void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
+ void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
+ void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
+ void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
+ void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
+ void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
+ void (GLAPIENTRYP CallList)( GLuint ); /* NOTE */
+ void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); /* NOTE */
+ void (GLAPIENTRYP Begin)( GLenum );
+ void (GLAPIENTRYP End)( void );
+ /* GL_NV_vertex_program */
+ void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x );
+ void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y );
+ void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
+ void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+ void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
+#if FEATURE_ARB_vertex_program
+ void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x );
+ void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y );
+ void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z );
+ void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v );
+ void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+ void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v );
+#endif
/*@}*/
/*
*/
- void (*Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
+ void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
/**
* \name Array
- *
- * These may or may not belong here. Heuristic: if an array is
- * enabled, the installed vertex format should support that array and
- * its current size natively.
*/
/*@{*/
- void (*DrawArrays)( GLenum mode, GLint start, GLsizei count );
- void (*DrawElements)( GLenum mode, GLsizei count, GLenum type,
+ void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
+ void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
const GLvoid *indices );
- void (*DrawRangeElements)( GLenum mode, GLuint start,
+ void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
GLuint end, GLsizei count,
GLenum type, const GLvoid *indices );
/*@}*/
* accelerated vertex formats, eventually...
*/
/*@{*/
- void (*EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
- void (*EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
+ void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
+ void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
/*@}*/
- /**
- * Should core try to send colors to glColor4f or glColor4chan,
- * where it has a choice?
- */
- GLboolean prefer_float_colors;
} GLvertexformat;