mesa: move glViewport and glDepthRange functions into new viewport.c file

A bit of refactoring with an eye toward ES2 and GL 3.1
This commit is contained in:
Brian Paul 2009-03-07 12:33:11 -07:00
parent 4de5abee39
commit 2c37851595
15 changed files with 253 additions and 176 deletions

View file

@ -97,6 +97,7 @@ if env['platform'] != 'winddk':
'main/texstate.c',
'main/texstore.c',
'main/varray.c',
'main/viewport.c',
'main/vtxfmt.c',
]

View file

@ -4,11 +4,12 @@
#include "s3v_context.h"
#include "s3v_vb.h"
#include "s3v_dri.h"
#include "main/context.h"
#include "main/matrix.h"
#include "s3v_dri.h"
#include "main/framebuffer.h"
#include "main/renderbuffer.h"
#include "main/viewport.h"
#include "swrast/swrast.h"
#include "swrast_setup/swrast_setup.h"

View file

@ -41,6 +41,7 @@
#include "main/extensions.h"
#include "main/framebuffer.h"
#include "main/renderbuffer.h"
#include "main/viewport.h"
#if defined(USE_X86_ASM)
#include "x86/common_x86_asm.h"
#endif

View file

@ -116,6 +116,7 @@
#include "texstate.h"
#include "mtypes.h"
#include "varray.h"
#include "viewport.h"
#if FEATURE_NV_vertex_program
#include "shader/nvprogram.h"
#endif

View file

@ -55,6 +55,7 @@
#include "texparam.h"
#include "texstate.h"
#include "varray.h"
#include "viewport.h"
#include "mtypes.h"

View file

@ -143,6 +143,7 @@
#include "mtypes.h"
#include "varray.h"
#include "version.h"
#include "viewport.h"
#include "vtxfmt.h"
#include "glapi/glthread.h"
#include "glapi/glapioffsets.h"

View file

@ -1,8 +1,9 @@
/*
* Mesa 3-D graphics library
* Version: 6.5.3
* Version: 7.5
*
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. 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"),
@ -535,120 +536,6 @@ _mesa_MultTransposeMatrixdARB( const GLdouble *m )
}
#endif
/**
* Set the viewport.
*
* \param x, y coordinates of the lower-left corner of the viewport rectangle.
* \param width width of the viewport rectangle.
* \param height height of the viewport rectangle.
*
* \sa Called via glViewport() or display list execution.
*
* Flushes the vertices and calls _mesa_set_viewport() with the given
* parameters.
*/
void GLAPIENTRY
_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
_mesa_set_viewport(ctx, x, y, width, height);
}
/**
* Set new viewport parameters and update derived state (the _WindowMap
* matrix). Usually called from _mesa_Viewport().
*
* \param ctx GL context.
* \param x, y coordinates of the lower left corner of the viewport rectangle.
* \param width width of the viewport rectangle.
* \param height height of the viewport rectangle.
*/
void
_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height )
{
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height);
if (width < 0 || height < 0) {
_mesa_error( ctx, GL_INVALID_VALUE,
"glViewport(%d, %d, %d, %d)", x, y, width, height );
return;
}
/* clamp width and height to the implementation dependent range */
width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth);
height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight);
ctx->Viewport.X = x;
ctx->Viewport.Width = width;
ctx->Viewport.Y = y;
ctx->Viewport.Height = height;
ctx->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->Viewport._WindowMap,
ctx->Viewport.X, ctx->Viewport.Y,
ctx->Viewport.Width, ctx->Viewport.Height,
ctx->Viewport.Near, ctx->Viewport.Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
if (ctx->Driver.Viewport) {
/* Many drivers will use this call to check for window size changes
* and reallocate the z/stencil/accum/etc buffers if needed.
*/
(*ctx->Driver.Viewport)( ctx, x, y, width, height );
}
}
#if _HAVE_FULL_GL
/**
* Called by glDepthRange
*
* \param nearval specifies the Z buffer value which should correspond to
* the near clip plane
* \param farval specifies the Z buffer value which should correspond to
* the far clip plane
*/
void GLAPIENTRY
_mesa_DepthRange( GLclampd nearval, GLclampd farval )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
if (MESA_VERBOSE&VERBOSE_API)
_mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval);
ctx->Viewport.Near = (GLfloat) CLAMP( nearval, 0.0, 1.0 );
ctx->Viewport.Far = (GLfloat) CLAMP( farval, 0.0, 1.0 );
ctx->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->Viewport._WindowMap,
ctx->Viewport.X, ctx->Viewport.Y,
ctx->Viewport.Width, ctx->Viewport.Height,
ctx->Viewport.Near, ctx->Viewport.Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
if (ctx->Driver.DepthRange) {
(*ctx->Driver.DepthRange)( ctx, nearval, farval );
}
}
#endif
/**********************************************************************/
@ -892,41 +779,4 @@ void _mesa_init_transform( GLcontext *ctx )
}
/**
* Initialize the context viewport attribute group.
*
* \param ctx GL context.
*
* \todo Move this to a new file with other 'viewport' routines.
*/
void _mesa_init_viewport( GLcontext *ctx )
{
GLfloat depthMax = 65535.0F; /* sorf of arbitrary */
/* Viewport group */
ctx->Viewport.X = 0;
ctx->Viewport.Y = 0;
ctx->Viewport.Width = 0;
ctx->Viewport.Height = 0;
ctx->Viewport.Near = 0.0;
ctx->Viewport.Far = 1.0;
_math_matrix_ctr(&ctx->Viewport._WindowMap);
_math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0,
0.0F, 1.0F, depthMax);
}
/**
* Free the context viewport attribute group data.
*
* \param ctx GL context.
*
* \todo Move this to a new file with other 'viewport' routines.
*/
void _mesa_free_viewport_data( GLcontext *ctx )
{
_math_matrix_dtr(&ctx->Viewport._WindowMap);
}
/*@}*/

View file

@ -1,13 +1,9 @@
/**
* \file matrix.h
* Matrix operations.
*/
/*
* Mesa 3-D graphics library
* Version: 3.5
* Version: 7.5
*
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. 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"),
@ -99,15 +95,6 @@ _mesa_MultTransposeMatrixfARB( const GLfloat *m );
extern void GLAPIENTRY
_mesa_MultTransposeMatrixdARB( const GLdouble *m );
extern void GLAPIENTRY
_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height );
extern void
_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height );
extern void GLAPIENTRY
_mesa_DepthRange( GLclampd nearval, GLclampd farval );
extern void
_mesa_init_matrix( GLcontext * ctx );
@ -115,15 +102,9 @@ _mesa_init_matrix( GLcontext * ctx );
extern void
_mesa_init_transform( GLcontext *ctx );
extern void
_mesa_init_viewport( GLcontext *ctx );
extern void
_mesa_free_matrix_data( GLcontext *ctx );
extern void
_mesa_free_viewport_data( GLcontext *ctx );
extern void
_mesa_update_modelview_project( GLcontext *ctx, GLuint newstate );

View file

@ -49,6 +49,7 @@
#include "texenvprogram.h"
#include "texobj.h"
#include "texstate.h"
#include "viewport.h"
static void

176
src/mesa/main/viewport.c Normal file
View file

@ -0,0 +1,176 @@
/*
* Mesa 3-D graphics library
* Version: 7.5
*
* Copyright (C) 2009 VMware, Inc. 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.
*/
/**
* \file viewport.c
* glViewport and glDepthRange functions.
*/
#include "context.h"
#include "macros.h"
#include "viewport.h"
/**
* Set the viewport.
* \sa Called via glViewport() or display list execution.
*
* Flushes the vertices and calls _mesa_set_viewport() with the given
* parameters.
*/
void GLAPIENTRY
_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
_mesa_set_viewport(ctx, x, y, width, height);
}
/**
* Set new viewport parameters and update derived state (the _WindowMap
* matrix). Usually called from _mesa_Viewport().
*
* \param ctx GL context.
* \param x, y coordinates of the lower left corner of the viewport rectangle.
* \param width width of the viewport rectangle.
* \param height height of the viewport rectangle.
*/
void
_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height)
{
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height);
if (width < 0 || height < 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glViewport(%d, %d, %d, %d)", x, y, width, height);
return;
}
/* clamp width and height to the implementation dependent range */
width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth);
height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight);
ctx->Viewport.X = x;
ctx->Viewport.Width = width;
ctx->Viewport.Y = y;
ctx->Viewport.Height = height;
ctx->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->Viewport._WindowMap,
ctx->Viewport.X, ctx->Viewport.Y,
ctx->Viewport.Width, ctx->Viewport.Height,
ctx->Viewport.Near, ctx->Viewport.Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
if (ctx->Driver.Viewport) {
/* Many drivers will use this call to check for window size changes
* and reallocate the z/stencil/accum/etc buffers if needed.
*/
ctx->Driver.Viewport(ctx, x, y, width, height);
}
}
/**
* Called by glDepthRange
*
* \param nearval specifies the Z buffer value which should correspond to
* the near clip plane
* \param farval specifies the Z buffer value which should correspond to
* the far clip plane
*/
void GLAPIENTRY
_mesa_DepthRange(GLclampd nearval, GLclampd farval)
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
if (MESA_VERBOSE&VERBOSE_API)
_mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval);
ctx->Viewport.Near = (GLfloat) CLAMP(nearval, 0.0, 1.0);
ctx->Viewport.Far = (GLfloat) CLAMP(farval, 0.0, 1.0);
ctx->NewState |= _NEW_VIEWPORT;
#if 1
/* XXX remove this someday. Currently the DRI drivers rely on
* the WindowMap matrix being up to date in the driver's Viewport
* and DepthRange functions.
*/
_math_matrix_viewport(&ctx->Viewport._WindowMap,
ctx->Viewport.X, ctx->Viewport.Y,
ctx->Viewport.Width, ctx->Viewport.Height,
ctx->Viewport.Near, ctx->Viewport.Far,
ctx->DrawBuffer->_DepthMaxF);
#endif
if (ctx->Driver.DepthRange) {
ctx->Driver.DepthRange(ctx, nearval, farval);
}
}
/**
* Initialize the context viewport attribute group.
* \param ctx the GL context.
*/
void _mesa_init_viewport(GLcontext *ctx)
{
GLfloat depthMax = 65535.0F; /* sorf of arbitrary */
/* Viewport group */
ctx->Viewport.X = 0;
ctx->Viewport.Y = 0;
ctx->Viewport.Width = 0;
ctx->Viewport.Height = 0;
ctx->Viewport.Near = 0.0;
ctx->Viewport.Far = 1.0;
_math_matrix_ctr(&ctx->Viewport._WindowMap);
_math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0,
0.0F, 1.0F, depthMax);
}
/**
* Free the context viewport attribute group data.
* \param ctx the GL context.
*/
void _mesa_free_viewport_data(GLcontext *ctx)
{
_math_matrix_dtr(&ctx->Viewport._WindowMap);
}

52
src/mesa/main/viewport.h Normal file
View file

@ -0,0 +1,52 @@
/*
* Mesa 3-D graphics library
* Version: 7.5
*
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. 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.
*/
#ifndef VIEWPORT_H
#define VIEWPORT_H
extern void GLAPIENTRY
_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
extern void
_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_DepthRange(GLclampd nearval, GLclampd farval);
extern void
_mesa_init_viewport(GLcontext *ctx);
extern void
_mesa_free_viewport_data(GLcontext *ctx);
#endif

View file

@ -74,6 +74,7 @@ MAIN_SOURCES = \
main/texstate.c \
main/texstore.c \
main/varray.c \
main/viewport.c \
main/vtxfmt.c
GLAPI_SOURCES = \

View file

@ -31,6 +31,7 @@
#include "main/matrix.h"
#include "main/buffers.h"
#include "main/scissor.h"
#include "main/viewport.h"
#include "vbo/vbo.h"
#include "shader/shader_api.h"
#include "glapi/glapi.h"

View file

@ -33,6 +33,7 @@
#include "main/matrix.h"
#include "main/renderbuffer.h"
#include "main/scissor.h"
#include "main/viewport.h"
#include "st_context.h"
#include "st_cb_fbo.h"
#include "st_public.h"

View file

@ -1058,6 +1058,10 @@
RelativePath="..\..\..\..\src\mesa\main\varray.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\viewport.c"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\vbo\vbo_context.c"
>
@ -1899,6 +1903,10 @@
RelativePath="..\..\..\..\src\mesa\main\varray.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\main\viewport.h"
>
</File>
<File
RelativePath="..\..\..\..\src\mesa\vbo\vbo.h"
>