summaryrefslogtreecommitdiff
path: root/src/mesa/tnl/t_eval_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/tnl/t_eval_api.c')
-rw-r--r--src/mesa/tnl/t_eval_api.c246
1 files changed, 0 insertions, 246 deletions
diff --git a/src/mesa/tnl/t_eval_api.c b/src/mesa/tnl/t_eval_api.c
deleted file mode 100644
index 5e68d7c891..0000000000
--- a/src/mesa/tnl/t_eval_api.c
+++ /dev/null
@@ -1,246 +0,0 @@
-
-/*
- * Mesa 3-D graphics library
- * Version: 5.1
- *
- * Copyright (C) 1999-2003 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"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- * Keith Whitwell - original code
- * Brian Paul - vertex program updates
- */
-
-
-#include "glheader.h"
-#include "colormac.h"
-#include "context.h"
-#include "macros.h"
-#include "imports.h"
-#include "mtypes.h"
-#include "math/m_eval.h"
-
-#include "t_eval_api.h"
-#include "t_imm_api.h"
-#include "t_imm_alloc.h"
-#include "t_imm_exec.h"
-
-
-/* KW: If are compiling, we don't know whether eval will produce a
- * vertex when it is run in the future. If this is pure immediate
- * mode, eval is a noop if neither vertex map is enabled.
- *
- * Thus we need to have a check in the display list code or
- * elsewhere for eval(1,2) vertices in the case where
- * map(1,2)_vertex is disabled, and to purge those vertices from
- * the vb.
- */
-void GLAPIENTRY
-_tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint i;
- GLfloat u, du;
- GLenum prim;
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glEvalMesh1()");
-
- switch (mode) {
- case GL_POINT:
- prim = GL_POINTS;
- break;
- case GL_LINE:
- prim = GL_LINE_STRIP;
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh1(mode)" );
- return;
- }
-
- /* No effect if vertex maps disabled.
- */
- if (!ctx->Eval.Map1Vertex4 && !ctx->Eval.Map1Vertex3 &&
- (!ctx->VertexProgram.Enabled || !ctx->Eval.Map1Attrib[VERT_ATTRIB_POS]))
- return;
-
- du = ctx->Eval.MapGrid1du;
- u = ctx->Eval.MapGrid1u1 + i1 * du;
-
- /* Need to turn off compilation -- this is already saved, and the
- * coordinates generated and the test above depend on state that
- * may change before the list is executed.
- *
- * TODO: Anaylse display lists to determine if this state is
- * constant.
- *
- * State to watch:
- * - enabled maps
- * - map state for each enabled map, including control points
- * - grid state
- *
- * Could alternatively cache individual maps in arrays, rather than
- * building immediates.
- */
- {
- GLboolean compiling = ctx->CompileFlag;
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- struct immediate *im = TNL_CURRENT_IM(ctx);
- GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p);
-
- NotifyBegin = tnl->Driver.NotifyBegin;
- tnl->Driver.NotifyBegin = 0;
-
- if (compiling) {
- struct immediate *tmp = _tnl_alloc_immediate( ctx );
- FLUSH_VERTICES( ctx, 0 );
- SET_IMMEDIATE( ctx, tmp );
- TNL_CURRENT_IM(ctx)->ref_count++;
- ctx->CompileFlag = GL_FALSE;
- }
-
- _tnl_Begin( prim );
- for (i=i1;i<=i2;i++,u+=du) {
- _tnl_eval_coord1f( ctx, u );
- }
- _tnl_end_ctx(ctx);
-
- /* Need this for replay *and* compile:
- */
- FLUSH_VERTICES( ctx, 0 );
- tnl->Driver.NotifyBegin = NotifyBegin;
-
- if (compiling) {
- TNL_CURRENT_IM(ctx)->ref_count--;
- ASSERT( TNL_CURRENT_IM(ctx)->ref_count == 0 );
- _tnl_free_immediate( ctx, TNL_CURRENT_IM(ctx) );
- SET_IMMEDIATE( ctx, im );
- ctx->CompileFlag = GL_TRUE;
- }
- }
-}
-
-
-
-void GLAPIENTRY
-_tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint i, j;
- GLfloat u, du, v, dv, v1, u1;
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glEvalMesh2()");
-
- /* No effect if vertex maps disabled.
- */
- if (!ctx->Eval.Map2Vertex4 && !ctx->Eval.Map2Vertex3 &&
- (!ctx->VertexProgram.Enabled || !ctx->Eval.Map2Attrib[VERT_ATTRIB_POS]))
- return;
-
- du = ctx->Eval.MapGrid2du;
- dv = ctx->Eval.MapGrid2dv;
- v1 = ctx->Eval.MapGrid2v1 + j1 * dv;
- u1 = ctx->Eval.MapGrid2u1 + i1 * du;
-
- /* Need to turn off compilation -- this is already saved, and the
- * coordinates generated and the test above depend on state that
- * may change before the list is executed.
- */
- {
- GLboolean compiling = ctx->CompileFlag;
- struct immediate *im = TNL_CURRENT_IM(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p);
-
- NotifyBegin = tnl->Driver.NotifyBegin;
- tnl->Driver.NotifyBegin = 0;
-
- if (compiling) {
- struct immediate *tmp = _tnl_alloc_immediate( ctx );
- FLUSH_VERTICES( ctx, 0 );
- SET_IMMEDIATE( ctx, tmp );
- TNL_CURRENT_IM(ctx)->ref_count++;
- ctx->CompileFlag = GL_FALSE;
- }
-
- switch (mode) {
- case GL_POINT:
- _tnl_Begin( GL_POINTS );
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- _tnl_eval_coord2f( ctx, u, v );
- }
- }
- _tnl_end_ctx(ctx);
- break;
- case GL_LINE:
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- _tnl_Begin( GL_LINE_STRIP );
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- _tnl_eval_coord2f( ctx, u, v );
- }
- _tnl_end_ctx(ctx);
- }
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- _tnl_Begin( GL_LINE_STRIP );
- for (v=v1,j=j1;j<=j2;j++,v+=dv) {
- _tnl_eval_coord2f( ctx, u, v );
- }
- _tnl_end_ctx(ctx);
- }
- break;
- case GL_FILL:
- for (v=v1,j=j1;j<j2;j++,v+=dv) {
- _tnl_Begin( GL_TRIANGLE_STRIP );
- for (u=u1,i=i1;i<=i2;i++,u+=du) {
- _tnl_eval_coord2f( ctx, u, v );
- _tnl_eval_coord2f( ctx, u, v+dv );
- }
- _tnl_end_ctx(ctx);
- }
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glEvalMesh2(mode)" );
- return;
- }
-
- /* Need this for replay *and* compile:
- */
- FLUSH_VERTICES( ctx, 0 );
- tnl->Driver.NotifyBegin = NotifyBegin;
-
- if (compiling) {
- TNL_CURRENT_IM(ctx)->ref_count--;
- _tnl_free_immediate( ctx, TNL_CURRENT_IM( ctx ) );
- SET_IMMEDIATE( ctx, im );
- ctx->CompileFlag = GL_TRUE;
- }
- }
-}
-
-
-void _tnl_eval_init( GLcontext *ctx )
-{
- GLvertexformat *vfmt = &(TNL_CONTEXT(ctx)->vtxfmt);
- vfmt->EvalMesh1 = _tnl_exec_EvalMesh1;
- vfmt->EvalMesh2 = _tnl_exec_EvalMesh2;
-}