1 2Name 3 4 SGIX_framezoom 5 6Name Strings 7 8 GL_SGIX_framezoom 9 10Version 11 12 $Date: 1996/03/08 18:16:44 $ $Revision: 1.4 $ 13 14Number 15 16 57 17 18Dependencies 19 20 none. 21 22Overview 23 24 This extension provides a additional way to rasterize geometric 25 primitives and pixel rectangles. The techique is to reduce the 26 number of pixels rasterized and (possibly) the number of depth and 27 stencil operations performed per primitive. Each pixel is zoomed 28 up and used to render an N x N block of screen pixels. The 29 implementation is free to choose the number of stencil and z pixels 30 that will correspond to each N x N block. 31 32 This extension provides an opportunity to the implementation to 33 perform expensive raster operations at a reduced resolution, 34 increasing performance. Such operations may include 35 texture-mapping, depth & stencil tests, etc. The hardware should 36 be allowed to perform operations that it accelerates at full 37 hardware speed. 38 39 The visual result will be the same as if a scene were rendered into 40 a small window, and then that buffer was copied and zoomed up into 41 a large window. 42 43 All OpenGL parameters that effect rasterization size will implicitly 44 be multipled by N (this includes point size, line width, etc). 45 46Issues 47 48 * What happens with zoomed (polygon/line) stippled pattern? 49 50 51New Procedures and Functions 52 53 void FrameZoomSGIX(GLint factor); 54 55New Tokens 56 57 Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and 58 by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 59 GetDoublev: 60 61 FRAMEZOOM_SGIX 62 63 Accepted by the <pname> parameter of GetBooleanv, GetDoublev, 64 GetIntegerv, and GetFloatv: 65 66 FRAMEZOOM_FACTOR_SGIX 67 MAX_FRAMEZOOM_FACTOR_SGIX 68 69Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 70 71 None 72 73Additions to Chapter 3 of the 1.0 Specification (Rasterization) 74 75 If FRAMEZOOM_SGIX is off, the rasterization algorithm is unchanged. 76 77 If FRAMEZOOM_SGIX is on, the rasterization of geometric primitives 78 is modified as follows: 79 80 Rasterization is performed as if the viewport has shrunk down by 81 factor of FRAMEZOOM_FACTOR_SGIX. The viewport itself will not 82 change. Then, at an undefined stage after primitive rasterization, 83 the resulting fragments will be zoomed up by the same factor. That 84 stage is underfined since some of the later rasterization stages 85 (ie. blending, dithering, z buffering, etc.) may be implemented in 86 hardware, and hence have to be performed after the zoom. This 87 flexibility is present to allow the implementation to take maximum 88 advantage of the hardware. 89 90 The zoom process will produce N x N fragments (where N is 91 FRAMEZOOM_FACTOR_SGIX) that differ in their x and y coordinates, 92 are organized in a square, and try to approximate the features of 93 the original rasterization (with subsampling disabled). The center 94 of the subsampled fragment is guaranteed to fall somewhere inside 95 the resulting rectangle of fragments. No additional guarantees are 96 made concerning the position of the resulting fragments, except 97 that the position of the subsampled fragment will be consistent 98 across pixels during the primitive rasterization. 99 100 Since rasterization is performed as if the viewport has shrunk by a 101 factor of FRAMEZOOM_FACTOR_SGIX, all parameters that alter fragment 102 generation in screen coordinates (ie. point size, line width, line 103 stippled, polygon stipple) will look like they now affect a larger 104 area (by FRAMEZOOM_FACTOR_SGIX) in the screen. Ie. points and 105 lines will render roughly as many pixels as if point size and line 106 width were multiplied by FRAMEZOOM_FACTOR_SGIX, and glDrawPixels 107 will operate as if the pixel zoom specified was multiplied by 108 FRAMEZOOM_FACTOR_SGIX. 109 110 A change in the value of FRAMEZOOM_FACTOR_SGIX, or a change in the 111 state of FRAMEZOOM_SGIX, has the same semantics to the ancillary 112 stencil and z buffers as a resize. Basically, the contents of 113 these buffers will be undefined till the next clear of that 114 ancillary buffer. 115 116 Any specified value of FRAMEZOOM_FACTOR_SGIX will be clampled to 117 the device dependent value of MAX_FRAMEZOOM_FACTOR_SGIX. The value 118 of MAX_FRAMEZOOM_FACTOR_SGIX may not be constant and may vary 119 during the execution of a GL program. For example, a certain 120 implementation may not support subsampled rendering when rendering 121 in the front color buffer. In that case, MAX_FRAMEZOOM_FACTOR_SGIX 122 will be 1 when glDrawBuffer specifies a front buffer, or when the 123 visual on the window is single buffered. In that case, the value 124 of FRAMEZOOM_FACTOR_SGIX will be clamped to 1, ie. no subsampling 125 performed. 126 127 128Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 129and the Frame Buffer) 130 131 None (?) 132 133Additions to Chapter 5 of the 1.0 Specification (Special Functions) 134 135 None 136 137Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 138 139 One more state variable, FRAMEZOOM_FACTOR_SGIX is defined by this 140 extension. 141 142Additions to the GLX Specification 143 144 None. 145 146GLX Protocol 147 148 ??? 149 150Errors 151 152 INVALID_VALUE is generated if the combination of parameters passed 153 to FrameZoomSGIX are not supported. 154 155New State 156 157 Get Value Get Command Type Initial Value Attribute 158 --------- ----------- ---- ------------- --------- 159 FRAMEZOOM_SGIX IsEnabled B FALSE ?? 160 161New Implementation Dependent State 162 163 Get Value Get Command Type Minimum Value 164 --------- ----------- ---- ------------- 165 FRAMEZOOM_FACTOR_SGIX GetIntegerv Z+ 1 166 MAX_FRAMEZOOM_FACTOR_SGIX GetIntegerv Z+ 1 167 168