aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/arbprogram.c33
-rw-r--r--src/mesa/main/arbprogram.h5
-rw-r--r--src/mesa/main/colortab.c40
-rw-r--r--src/mesa/main/colortab.h23
-rw-r--r--src/mesa/main/context.c9
-rw-r--r--src/mesa/main/occlude.c14
-rw-r--r--src/mesa/main/occlude.h3
-rw-r--r--src/mesa/main/texobj.c4
-rw-r--r--src/mesa/main/texstate.c4
9 files changed, 103 insertions, 32 deletions
diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c
index 24ab8a1035f..cd441f8e13e 100644
--- a/src/mesa/main/arbprogram.c
+++ b/src/mesa/main/arbprogram.c
@@ -60,6 +60,39 @@ _mesa_parse_arb_fragment_program(GLcontext *ctx, GLenum target,
}
+/*
+ * Init context's program state
+ */
+void
+_mesa_init_program(GLcontext *ctx)
+{
+ GLuint i;
+
+ ctx->Program.ErrorPos = -1;
+ ctx->Program.ErrorString = _mesa_strdup("");
+
+#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
+ ctx->VertexProgram.Enabled = GL_FALSE;
+ ctx->VertexProgram.PointSizeEnabled = GL_FALSE;
+ ctx->VertexProgram.TwoSideEnabled = GL_FALSE;
+ ctx->VertexProgram.Current = NULL;
+ ctx->VertexProgram.Current = (struct vertex_program *) ctx->Shared->DefaultVertexProgram;
+ assert(ctx->VertexProgram.Current);
+ ctx->VertexProgram.Current->Base.RefCount++;
+ for (i = 0; i < VP_NUM_PROG_REGS / 4; i++) {
+ ctx->VertexProgram.TrackMatrix[i] = GL_NONE;
+ ctx->VertexProgram.TrackMatrixTransform[i] = GL_IDENTITY_NV;
+ }
+#endif
+
+#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program
+ ctx->FragmentProgram.Enabled = GL_FALSE;
+ ctx->FragmentProgram.Current = (struct fragment_program *) ctx->Shared->DefaultFragmentProgram;
+ assert(ctx->FragmentProgram.Current);
+ ctx->FragmentProgram.Current->Base.RefCount++;
+#endif
+}
+
void
_mesa_EnableVertexAttribArrayARB(GLuint index)
diff --git a/src/mesa/main/arbprogram.h b/src/mesa/main/arbprogram.h
index bc5a6626ed5..07cd3a17aa1 100644
--- a/src/mesa/main/arbprogram.h
+++ b/src/mesa/main/arbprogram.h
@@ -26,6 +26,11 @@
#ifndef ARBPROGRAM_H
#define ARBPROGRAM_H
+#include "mtypes.h"
+
+extern void
+_mesa_init_program(GLcontext *ctx);
+
extern void
_mesa_EnableVertexAttribArrayARB(GLuint index);
diff --git a/src/mesa/main/colortab.c b/src/mesa/main/colortab.c
index 9a1734bf4be..cc268557268 100644
--- a/src/mesa/main/colortab.c
+++ b/src/mesa/main/colortab.c
@@ -1332,7 +1332,7 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
void
-_mesa_init_one_colortable( struct gl_color_table *p )
+_mesa_init_colortable( struct gl_color_table *p )
{
p->FloatTable = GL_FALSE;
p->Table = NULL;
@@ -1343,7 +1343,7 @@ _mesa_init_one_colortable( struct gl_color_table *p )
void
-_mesa_free_one_colortable( struct gl_color_table *p )
+_mesa_free_colortable_data( struct gl_color_table *p )
{
if (p->Table) {
FREE(p->Table);
@@ -1351,23 +1351,31 @@ _mesa_free_one_colortable( struct gl_color_table *p )
}
}
-void _mesa_init_colortable( GLcontext * ctx )
+
+/*
+ * Initialize all colortables for a context.
+ */
+void _mesa_init_colortables( GLcontext * ctx )
{
/* Color tables */
- _mesa_init_one_colortable(&ctx->ColorTable);
- _mesa_init_one_colortable(&ctx->ProxyColorTable);
- _mesa_init_one_colortable(&ctx->PostConvolutionColorTable);
- _mesa_init_one_colortable(&ctx->ProxyPostConvolutionColorTable);
- _mesa_init_one_colortable(&ctx->PostColorMatrixColorTable);
- _mesa_init_one_colortable(&ctx->ProxyPostColorMatrixColorTable);
+ _mesa_init_colortable(&ctx->ColorTable);
+ _mesa_init_colortable(&ctx->ProxyColorTable);
+ _mesa_init_colortable(&ctx->PostConvolutionColorTable);
+ _mesa_init_colortable(&ctx->ProxyPostConvolutionColorTable);
+ _mesa_init_colortable(&ctx->PostColorMatrixColorTable);
+ _mesa_init_colortable(&ctx->ProxyPostColorMatrixColorTable);
}
-void _mesa_free_colortable_data( GLcontext *ctx )
+
+/*
+ * Free all colortable data for a context
+ */
+void _mesa_free_colortables_data( GLcontext *ctx )
{
- _mesa_free_one_colortable( &ctx->ColorTable );
- _mesa_free_one_colortable( &ctx->ProxyColorTable );
- _mesa_free_one_colortable( &ctx->PostConvolutionColorTable );
- _mesa_free_one_colortable( &ctx->ProxyPostConvolutionColorTable );
- _mesa_free_one_colortable( &ctx->PostColorMatrixColorTable );
- _mesa_free_one_colortable( &ctx->ProxyPostColorMatrixColorTable );
+ _mesa_free_colortable_data(&ctx->ColorTable);
+ _mesa_free_colortable_data(&ctx->ProxyColorTable);
+ _mesa_free_colortable_data(&ctx->PostConvolutionColorTable);
+ _mesa_free_colortable_data(&ctx->ProxyPostConvolutionColorTable);
+ _mesa_free_colortable_data(&ctx->PostColorMatrixColorTable);
+ _mesa_free_colortable_data(&ctx->ProxyPostColorMatrixColorTable);
}
diff --git a/src/mesa/main/colortab.h b/src/mesa/main/colortab.h
index 959547e28bc..9ccf27693f0 100644
--- a/src/mesa/main/colortab.h
+++ b/src/mesa/main/colortab.h
@@ -77,28 +77,33 @@ _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );
extern void
_mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );
-extern void
-_mesa_init_colortable( GLcontext * ctx );
-extern void
-_mesa_free_colortable_data( GLcontext * ctx );
extern void
-_mesa_free_one_colortable( struct gl_color_table *p );
+_mesa_init_colortable( struct gl_color_table *table );
extern void
-_mesa_init_one_colortable( struct gl_color_table *p );
+_mesa_free_colortable_data( struct gl_color_table *table );
+
+extern void
+_mesa_init_colortables( GLcontext *ctx );
+
+extern void
+_mesa_free_colortables_data( GLcontext *ctx );
#else
/** No-op */
-#define _mesa_init_one_colortable( p ) ((void)0)
+#define _mesa_init_colortable( p ) ((void) 0)
+
+/** No-op */
+#define _mesa_free_colortable_data( p ) ((void) 0)
/** No-op */
-#define _mesa_init_colortable( p ) ((void)0)
+#define _mesa_init_colortables( p ) ((void)0)
/** No-op */
-#define _mesa_free_colortable_data( p ) ((void)0)
+#define _mesa_free_colortables_data( p ) ((void)0)
#endif
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index b44f74be4a1..13b4d193d1e 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -74,6 +74,7 @@
#include "glheader.h"
#include "imports.h"
#include "accum.h"
+#include "arbprogram.h"
#include "attrib.h"
#include "blend.h"
#include "buffers.h"
@@ -97,6 +98,7 @@
#include "lines.h"
#include "macros.h"
#include "matrix.h"
+#include "occlude.h"
#include "pixel.h"
#include "points.h"
#include "polygon.h"
@@ -1089,7 +1091,7 @@ init_attrib_groups( GLcontext *ctx )
_mesa_init_attrib( ctx );
_mesa_init_buffers( ctx );
_mesa_init_color( ctx );
- _mesa_init_colortable( ctx );
+ _mesa_init_colortables( ctx );
_mesa_init_current( ctx );
_mesa_init_depth( ctx );
_mesa_init_debug( ctx );
@@ -1102,10 +1104,11 @@ init_attrib_groups( GLcontext *ctx )
_mesa_init_line( ctx );
_mesa_init_lighting( ctx );
_mesa_init_matrix( ctx );
+ _mesa_init_occlude( ctx );
_mesa_init_pixel( ctx );
_mesa_init_point( ctx );
_mesa_init_polygon( ctx );
- /* XXX _mesa_init_program( ctx ); */
+ _mesa_init_program( ctx );
_mesa_init_rastpos( ctx );
_mesa_init_stencil( ctx );
_mesa_init_transform( ctx );
@@ -1473,7 +1476,7 @@ _mesa_free_context_data( GLcontext *ctx )
_mesa_free_texture_data( ctx );
_mesa_free_matrix_data( ctx );
_mesa_free_viewport_data( ctx );
- _mesa_free_colortable_data( ctx );
+ _mesa_free_colortables_data( ctx );
#if FEATURE_NV_vertex_program
if (ctx->VertexProgram.Current) {
ctx->VertexProgram.Current->Base.RefCount--;
diff --git a/src/mesa/main/occlude.c b/src/mesa/main/occlude.c
index 4a5df2127ff..f6dc7056ba1 100644
--- a/src/mesa/main/occlude.c
+++ b/src/mesa/main/occlude.c
@@ -53,6 +53,20 @@ struct occlusion_query
};
+
+void
+_mesa_init_occlude(GLcontext *ctx)
+{
+#if FEATURE_ARB_occlusion_query
+ ctx->Occlusion.QueryObjects = _mesa_NewHashTable();
+#endif
+
+ ctx->OcclusionResult = GL_FALSE;
+ ctx->OcclusionResultSaved = GL_FALSE;
+}
+
+
+
/**
* Allocate a new occlusion query object.
* \param target - must be GL_SAMPLES_PASSED_ARB at this time
diff --git a/src/mesa/main/occlude.h b/src/mesa/main/occlude.h
index cc3786772bc..e837dd72eb4 100644
--- a/src/mesa/main/occlude.h
+++ b/src/mesa/main/occlude.h
@@ -28,6 +28,9 @@
extern void
+_mesa_init_occlude(GLcontext *ctx);
+
+extern void
_mesa_GenQueriesARB(GLsizei n, GLuint *ids);
extern void
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index e131fae50e4..509523a130c 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -123,7 +123,7 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
obj->CompareFunc = GL_LEQUAL; /* ARB_shadow */
obj->DepthMode = GL_LUMINANCE; /* ARB_depth_texture */
obj->ShadowAmbient = 0.0F; /* ARB/SGIX_shadow_ambient */
- _mesa_init_one_colortable(&obj->Palette);
+ _mesa_init_colortable(&obj->Palette);
}
@@ -147,7 +147,7 @@ _mesa_delete_texture_object( GLcontext *ctx, struct gl_texture_object *texObj )
assert(texObj);
- _mesa_free_one_colortable(&texObj->Palette);
+ _mesa_free_colortable_data(&texObj->Palette);
/* free the texture images */
for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index d61b2019e57..72419922eb6 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -2966,7 +2966,7 @@ GLboolean _mesa_init_texture( GLcontext * ctx )
for (i=0; i<MAX_TEXTURE_UNITS; i++)
init_texture_unit( ctx, i );
ctx->Texture.SharedPalette = GL_FALSE;
- _mesa_init_one_colortable(&ctx->Texture.Palette);
+ _mesa_init_colortable(&ctx->Texture.Palette);
/* Allocate proxy textures */
if (!alloc_proxy_textures( ctx ))
@@ -2987,5 +2987,5 @@ void _mesa_free_texture_data( GLcontext *ctx )
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.ProxyRect );
for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
- _mesa_free_one_colortable( &ctx->Texture.Unit[i].ColorTable );
+ _mesa_free_colortable_data( &ctx->Texture.Unit[i].ColorTable );
}