2 ##########################################################################
4 # Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
7 # Permission is hereby granted, free of charge, to any person obtaining a
8 # copy of this software and associated documentation files (the
9 # "Software"), to deal in the Software without restriction, including
10 # without limitation the rights to use, copy, modify, merge, publish,
11 # distribute, sub license, and/or sell copies of the Software, and to
12 # permit persons to whom the Software is furnished to do so, subject to
13 # the following conditions:
15 # The above copyright notice and this permission notice (including the
16 # next paragraph) shall be included in all copies or substantial portions
19 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 # IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23 # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 ##########################################################################
33 def make_image(surface
):
34 data
= surface
.get_tile_rgba8(0, 0, surface
.width
, surface
.height
)
37 outimage
= Image
.fromstring('RGBA', (surface
.width
, surface
.height
), data
, "raw", 'RGBA', 0, 1)
40 def save_image(filename
, surface
):
41 outimage
= make_image(surface
)
42 outimage
.save(filename
, "PNG")
44 def show_image(surface
):
45 outimage
= make_image(surface
)
48 from PIL
import Image
, ImageTk
51 root
.title('background image')
53 image1
= ImageTk
.PhotoImage(outimage
)
58 root
.geometry("%dx%d+%d+%d" % (w
, h
, x
, y
))
59 panel1
= tk
.Label(root
, image
=image1
)
60 panel1
.pack(side
='top', fill
='both', expand
='yes')
66 ctx
= dev
.context_create()
71 # disabled blending/masking
73 blend
.rgb_src_factor
= PIPE_BLENDFACTOR_ONE
74 blend
.alpha_src_factor
= PIPE_BLENDFACTOR_ONE
75 blend
.rgb_dst_factor
= PIPE_BLENDFACTOR_ZERO
76 blend
.alpha_dst_factor
= PIPE_BLENDFACTOR_ZERO
77 blend
.colormask
= PIPE_MASK_RGBA
80 # no-op depth/stencil/alpha
81 depth_stencil_alpha
= DepthStencilAlpha()
82 ctx
.set_depth_stencil_alpha(depth_stencil_alpha
)
85 rasterizer
= Rasterizer()
86 rasterizer
.front_winding
= PIPE_WINDING_CW
87 rasterizer
.cull_mode
= PIPE_WINDING_NONE
88 rasterizer
.bypass_clipping
= 1
89 rasterizer
.scissor
= 1
90 #rasterizer.bypass_vs = 1
91 ctx
.set_rasterizer(rasterizer
)
93 # viewport (identity, we setup vertices in wincoords)
100 viewport
.scale
= scale
101 translate
= FloatArray(4)
106 viewport
.translate
= translate
107 ctx
.set_viewport(viewport
)
111 sampler
.wrap_s
= PIPE_TEX_WRAP_CLAMP_TO_EDGE
112 sampler
.wrap_t
= PIPE_TEX_WRAP_CLAMP_TO_EDGE
113 sampler
.wrap_r
= PIPE_TEX_WRAP_CLAMP_TO_EDGE
114 sampler
.min_mip_filter
= PIPE_TEX_MIPFILTER_NONE
115 sampler
.min_img_filter
= PIPE_TEX_MIPFILTER_NEAREST
116 sampler
.mag_img_filter
= PIPE_TEX_MIPFILTER_NEAREST
117 sampler
.normalized_coords
= 1
118 ctx
.set_sampler(0, sampler
)
125 scissor
.maxy
= height
126 ctx
.set_scissor(scissor
)
133 cbuf
= dev
.texture_create(
134 PIPE_FORMAT_X8R8G8B8_UNORM
,
136 tex_usage
=PIPE_TEXTURE_USAGE_DISPLAY_TARGET
,
138 _cbuf
= cbuf
.get_surface(usage
= PIPE_BUFFER_USAGE_GPU_READ|PIPE_BUFFER_USAGE_GPU_WRITE
)
143 fb
.set_cbuf(0, _cbuf
)
144 ctx
.set_framebuffer(fb
)
145 _cbuf
.clear_value
= 0x00000000
146 ctx
.surface_clear(_cbuf
, _cbuf
.clear_value
)
152 DCL IN[0], POSITION, CONSTANT
153 DCL IN[1], COLOR, CONSTANT
154 DCL OUT[0], POSITION, CONSTANT
155 DCL OUT[1], COLOR, CONSTANT
160 ctx
.set_vertex_shader(vs
)
165 DCL IN[0], COLOR, LINEAR
166 DCL OUT[0], COLOR, CONSTANT
170 ctx
.set_fragment_shader(fs
)
174 verts
= FloatArray(nverts
* nattrs
* 4)
176 verts
[ 0] = 128.0 # x1
177 verts
[ 1] = 32.0 # y1
184 verts
[ 8] = 32.0 # x2
185 verts
[ 9] = 224.0 # y2
192 verts
[16] = 224.0 # x3
193 verts
[17] = 224.0 # y3
201 ctx
.draw_vertices(PIPE_PRIM_TRIANGLES
,
208 show_image(cbuf
.get_surface(usage
= PIPE_BUFFER_USAGE_CPU_READ|PIPE_BUFFER_USAGE_CPU_WRITE
))
209 #save_image('tri.png', cbuf.get_surface(usage = PIPE_BUFFER_USAGE_CPU_READ|PIPE_BUFFER_USAGE_CPU_WRITE))
218 if __name__
== '__main__':