~ubuntu-branches/ubuntu/gutsy/vnc4/gutsy

« back to all changes in this revision

Viewing changes to unix/xc/extras/Mesa/src/swrast/s_imaging.c

  • Committer: Bazaar Package Importer
  • Author(s): Ola Lundqvist
  • Date: 2006-05-15 20:35:17 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060515203517-l4lre1ku942mn26k
Tags: 4.1.1+X4.3.0-10
* Correction of critical security issue. Thanks to Martin Kogler
  <e9925248@student.tuwien.ac.at> that informed me about the issue,
  and provided the patch.
  This flaw was originally found by Steve Wiseman of intelliadmin.com.
* Applied patch from Javier Kohen <jkohen@users.sourceforge.net> that
  inform the user that only 8 first characters of the password will
  actually be used when typing more than 8 characters, closes:
  #355619.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/*
 
3
 * Mesa 3-D graphics library
 
4
 * Version:  4.0.3
 
5
 *
 
6
 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 
7
 *
 
8
 * Permission is hereby granted, free of charge, to any person obtaining a
 
9
 * copy of this software and associated documentation files (the "Software"),
 
10
 * to deal in the Software without restriction, including without limitation
 
11
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
12
 * and/or sell copies of the Software, and to permit persons to whom the
 
13
 * Software is furnished to do so, subject to the following conditions:
 
14
 *
 
15
 * The above copyright notice and this permission notice shall be included
 
16
 * in all copies or substantial portions of the Software.
 
17
 *
 
18
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
19
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
20
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
21
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 
22
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
23
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
24
 */
 
25
 
 
26
/* KW:  Moved these here to remove knowledge of swrast from core mesa.
 
27
 * Should probably pull the entire software implementation of these
 
28
 * extensions into either swrast or a sister module.  
 
29
 */
 
30
 
 
31
#include "s_context.h"
 
32
#include "s_span.h"
 
33
 
 
34
void
 
35
_swrast_CopyColorTable( GLcontext *ctx, 
 
36
                        GLenum target, GLenum internalformat,
 
37
                        GLint x, GLint y, GLsizei width)
 
38
{
 
39
   SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
40
   GLchan data[MAX_WIDTH][4];
 
41
 
 
42
   /* Select buffer to read from */
 
43
   (*swrast->Driver.SetReadBuffer)( ctx, ctx->ReadBuffer,
 
44
                                 ctx->Pixel.DriverReadBuffer );
 
45
 
 
46
   if (width > MAX_WIDTH)
 
47
      width = MAX_WIDTH;
 
48
 
 
49
   /* read the data from framebuffer */
 
50
   _mesa_read_rgba_span( ctx, ctx->ReadBuffer, width, x, y, data );
 
51
 
 
52
   /* Restore reading from draw buffer (the default) */
 
53
   (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer,
 
54
                                 ctx->Color.DriverDrawBuffer );
 
55
 
 
56
   glColorTable(target, internalformat, width, GL_RGBA, CHAN_TYPE, data);
 
57
}
 
58
 
 
59
void
 
60
_swrast_CopyColorSubTable( GLcontext *ctx,GLenum target, GLsizei start,
 
61
                           GLint x, GLint y, GLsizei width)
 
62
{
 
63
   SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
64
   GLchan data[MAX_WIDTH][4];
 
65
 
 
66
   /* Select buffer to read from */
 
67
   (*swrast->Driver.SetReadBuffer)( ctx, ctx->ReadBuffer,
 
68
                                 ctx->Pixel.DriverReadBuffer );
 
69
 
 
70
   if (width > MAX_WIDTH)
 
71
      width = MAX_WIDTH;
 
72
 
 
73
   /* read the data from framebuffer */
 
74
   _mesa_read_rgba_span( ctx, ctx->ReadBuffer, width, x, y, data );
 
75
 
 
76
   /* Restore reading from draw buffer (the default) */
 
77
   (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer,
 
78
                                 ctx->Color.DriverDrawBuffer );
 
79
 
 
80
   glColorSubTable(target, start, width, GL_RGBA, CHAN_TYPE, data);
 
81
}
 
82
 
 
83
 
 
84
void
 
85
_swrast_CopyConvolutionFilter1D(GLcontext *ctx, GLenum target, 
 
86
                                GLenum internalFormat, 
 
87
                                GLint x, GLint y, GLsizei width)
 
88
{
 
89
   SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
90
   GLchan rgba[MAX_CONVOLUTION_WIDTH][4];
 
91
 
 
92
   RENDER_START( swrast, ctx );
 
93
 
 
94
   /* read the data from framebuffer */
 
95
   _mesa_read_rgba_span( ctx, ctx->ReadBuffer, width, x, y,
 
96
                                (GLchan (*)[4]) rgba );
 
97
   
 
98
   RENDER_FINISH( swrast, ctx );
 
99
 
 
100
   /* store as convolution filter */
 
101
   glConvolutionFilter1D(target, internalFormat, width,
 
102
                         GL_RGBA, CHAN_TYPE, rgba);
 
103
}
 
104
 
 
105
 
 
106
void
 
107
_swrast_CopyConvolutionFilter2D(GLcontext *ctx, GLenum target, 
 
108
                                GLenum internalFormat, 
 
109
                                GLint x, GLint y, GLsizei width, GLsizei height)
 
110
{
 
111
   SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
112
   struct gl_pixelstore_attrib packSave;
 
113
   GLchan rgba[MAX_CONVOLUTION_HEIGHT][MAX_CONVOLUTION_WIDTH][4];
 
114
   GLint i;
 
115
 
 
116
   RENDER_START(swrast,ctx);
 
117
   
 
118
   /* read pixels from framebuffer */
 
119
   for (i = 0; i < height; i++) {
 
120
      _mesa_read_rgba_span( ctx, ctx->ReadBuffer, width, x, y + i,
 
121
                                (GLchan (*)[4]) rgba[i] );
 
122
   }
 
123
 
 
124
   RENDER_FINISH(swrast,ctx);
 
125
 
 
126
   /*
 
127
    * HACK: save & restore context state so we can store this as a
 
128
    * convolution filter via the GL api.  Doesn't call any callbacks
 
129
    * hanging off ctx->Unpack statechanges.
 
130
    */
 
131
 
 
132
   packSave = ctx->Unpack;  /* save pixel packing params */
 
133
 
 
134
   ctx->Unpack.Alignment = 1;
 
135
   ctx->Unpack.RowLength = MAX_CONVOLUTION_WIDTH;
 
136
   ctx->Unpack.SkipPixels = 0;
 
137
   ctx->Unpack.SkipRows = 0;
 
138
   ctx->Unpack.ImageHeight = 0;
 
139
   ctx->Unpack.SkipImages = 0;
 
140
   ctx->Unpack.SwapBytes = GL_FALSE;
 
141
   ctx->Unpack.LsbFirst = GL_FALSE;
 
142
   ctx->NewState |= _NEW_PACKUNPACK;
 
143
 
 
144
   glConvolutionFilter2D(target, internalFormat, width, height,
 
145
                         GL_RGBA, CHAN_TYPE, rgba);
 
146
 
 
147
   ctx->Unpack = packSave;  /* restore pixel packing params */
 
148
   ctx->NewState |= _NEW_PACKUNPACK; 
 
149
}