python: Get the sample app to draw triangle like trivial/tri exanple.
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Mon, 14 Jul 2008 03:40:50 +0000 (12:40 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Mon, 14 Jul 2008 03:41:07 +0000 (12:41 +0900)
src/gallium/state_trackers/python/samples/simple.py [deleted file]
src/gallium/state_trackers/python/samples/tri.py [new file with mode: 0644]

diff --git a/src/gallium/state_trackers/python/samples/simple.py b/src/gallium/state_trackers/python/samples/simple.py
deleted file mode 100644 (file)
index 10742db..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env python
-##########################################################################
-# 
-# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
-# 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, sub license, 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 (including the
-# next paragraph) 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 NON-INFRINGEMENT.
-# IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
-# 
-##########################################################################
-
-
-from gallium import *
-
-
-def save_image(filename, surface):
-    pixels = FloatArray(surface.height*surface.width*4)
-    surface.get_tile_rgba(0, 0, surface.width, surface.height, pixels)
-
-    import Image
-    outimage = Image.new(
-        mode='RGB',
-        size=(surface.width, surface.height),
-        color=(0,0,0))
-    outpixels = outimage.load()
-    for y in range(0, surface.height):
-        for x in range(0, surface.width):
-            offset = (y*surface.width + x)*4
-            r, g, b, a = [int(pixels[offset + ch]*255) for ch in range(4)]
-            outpixels[x, y] = r, g, b
-    outimage.save(filename, "PNG")
-
-
-def test(dev):
-    ctx = dev.context_create()
-
-    width = 256
-    height = 256
-
-    # disabled blending/masking
-    blend = Blend()
-    blend.rgb_src_factor = PIPE_BLENDFACTOR_ONE
-    blend.alpha_src_factor = PIPE_BLENDFACTOR_ONE
-    blend.rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
-    blend.alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
-    blend.colormask = PIPE_MASK_RGBA
-    ctx.set_blend(blend)
-
-    # no-op depth/stencil/alpha
-    depth_stencil_alpha = DepthStencilAlpha()
-    ctx.set_depth_stencil_alpha(depth_stencil_alpha)
-
-    # rasterizer
-    rasterizer = Rasterizer()
-    rasterizer.front_winding = PIPE_WINDING_CW
-    rasterizer.cull_mode = PIPE_WINDING_NONE
-    rasterizer.bypass_clipping = 1
-    #rasterizer.bypass_vs = 1
-    ctx.set_rasterizer(rasterizer)
-
-    # viewport (identity, we setup vertices in wincoords)
-    viewport = Viewport()
-    scale = FloatArray(4)
-    scale[0] = 1.0
-    scale[1] = 1.0
-    scale[2] = 1.0
-    scale[3] = 1.0
-    viewport.scale = scale
-    translate = FloatArray(4)
-    translate[0] = 0.0
-    translate[1] = 0.0
-    translate[2] = 0.0
-    translate[3] = 0.0
-    viewport.translate = translate
-    ctx.set_viewport(viewport)
-
-    # samplers
-    sampler = Sampler()
-    sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-    sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-    sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-    sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE
-    sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-    sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-    sampler.normalized_coords = 1
-    ctx.set_sampler(0, sampler)
-
-    #  texture 
-    texture = dev.texture_create(PIPE_FORMAT_A8R8G8B8_UNORM, 
-                                 width, height, 
-                                 usage=PIPE_TEXTURE_USAGE_RENDER_TARGET)
-    ctx.set_sampler_texture(0, texture)
-
-    #  drawing dest 
-    surface = texture.get_surface(usage = PIPE_BUFFER_USAGE_GPU_WRITE)
-    fb = Framebuffer()
-    fb.width = surface.width
-    fb.height = surface.height
-    fb.num_cbufs = 1
-    fb.set_cbuf(0, surface)
-    ctx.set_framebuffer(fb)
-
-    # vertex shader
-    vs = Shader('''
-        VERT1.1
-        DCL IN[0], POSITION, CONSTANT
-        DCL IN[1], GENERIC[0], CONSTANT
-        DCL OUT[0], POSITION, CONSTANT
-        DCL OUT[1], GENERIC[0], CONSTANT
-        0:MOV OUT[0], IN[0]
-        1:MOV OUT[1], IN[1]
-        2:END
-    ''')
-    #vs.dump()
-    ctx.set_vertex_shader(vs)
-
-    # fragment shader
-    fs = Shader('''
-        FRAG1.1
-        DCL IN[0], COLOR, CONSTANT
-        DCL OUT[0], COLOR, CONSTANT
-        0:MOV OUT[0], IN[0]
-        1:END
-    ''')
-    #fs.dump()
-    ctx.set_fragment_shader(fs)
-
-    ctx.surface_clear(surface, 0x00ff0000)
-
-    if 0:
-        nverts = 4
-        nattrs = 1
-        vertices = FloatArray(n_verts * nattrs * 4)
-
-        # init vertex data that doesn't change
-        for i in range(nverts):
-            for j in range(nattrs):
-                vertices[(i*nattrs +j)*4 + 0] = 0.0
-                vertices[(i*nattrs +j)*4 + 1] = 0.0
-                vertices[(i*nattrs +j)*4 + 2] = 0.0
-                vertices[(i*nattrs +j)*4 + 3] = 0.0
-
-        ctx.draw_vertices(PIPE_PRIM_TRIANGLE_FAN,
-                          4,  #  verts 
-                          2, #  attribs/vert 
-                          vertices)
-    else:
-        ctx.draw_quad(32.0, 32.0, 224.0, 224.0)
-
-    ctx.flush()
-
-    save_image("simple.png", surface)
-
-
-
-def main():
-    dev = Device(0)
-    test(dev)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/src/gallium/state_trackers/python/samples/tri.py b/src/gallium/state_trackers/python/samples/tri.py
new file mode 100644 (file)
index 0000000..7a10905
--- /dev/null
@@ -0,0 +1,193 @@
+#!/usr/bin/env python
+##########################################################################
+# 
+# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+# 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, sub license, 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 (including the
+# next paragraph) 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 NON-INFRINGEMENT.
+# IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+# 
+##########################################################################
+
+
+from gallium import *
+
+
+def save_image(filename, surface):
+    pixels = FloatArray(surface.height*surface.width*4)
+    surface.get_tile_rgba(0, 0, surface.width, surface.height, pixels)
+
+    import Image
+    outimage = Image.new(
+        mode='RGB',
+        size=(surface.width, surface.height),
+        color=(0,0,0))
+    outpixels = outimage.load()
+    for y in range(0, surface.height):
+        for x in range(0, surface.width):
+            offset = (y*surface.width + x)*4
+            r, g, b, a = [int(pixels[offset + ch]*255) for ch in range(4)]
+            outpixels[x, y] = r, g, b
+    outimage.save(filename, "PNG")
+
+
+def test(dev):
+    ctx = dev.context_create()
+
+    width = 256
+    height = 256
+
+    # disabled blending/masking
+    blend = Blend()
+    blend.rgb_src_factor = PIPE_BLENDFACTOR_ONE
+    blend.alpha_src_factor = PIPE_BLENDFACTOR_ONE
+    blend.rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
+    blend.alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
+    blend.colormask = PIPE_MASK_RGBA
+    ctx.set_blend(blend)
+
+    # no-op depth/stencil/alpha
+    depth_stencil_alpha = DepthStencilAlpha()
+    ctx.set_depth_stencil_alpha(depth_stencil_alpha)
+
+    # rasterizer
+    rasterizer = Rasterizer()
+    rasterizer.front_winding = PIPE_WINDING_CW
+    rasterizer.cull_mode = PIPE_WINDING_NONE
+    rasterizer.bypass_clipping = 1
+    #rasterizer.bypass_vs = 1
+    ctx.set_rasterizer(rasterizer)
+
+    # viewport (identity, we setup vertices in wincoords)
+    viewport = Viewport()
+    scale = FloatArray(4)
+    scale[0] = 1.0
+    scale[1] = 1.0
+    scale[2] = 1.0
+    scale[3] = 1.0
+    viewport.scale = scale
+    translate = FloatArray(4)
+    translate[0] = 0.0
+    translate[1] = 0.0
+    translate[2] = 0.0
+    translate[3] = 0.0
+    viewport.translate = translate
+    ctx.set_viewport(viewport)
+
+    # samplers
+    sampler = Sampler()
+    sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
+    sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
+    sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
+    sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE
+    sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
+    sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
+    sampler.normalized_coords = 1
+    ctx.set_sampler(0, sampler)
+
+    #  texture 
+    texture = dev.texture_create(PIPE_FORMAT_A8R8G8B8_UNORM, 
+                                 width, height, 
+                                 usage=PIPE_TEXTURE_USAGE_RENDER_TARGET)
+    ctx.set_sampler_texture(0, texture)
+
+    #  drawing dest 
+    surface = texture.get_surface(usage = PIPE_BUFFER_USAGE_GPU_WRITE)
+    fb = Framebuffer()
+    fb.width = surface.width
+    fb.height = surface.height
+    fb.num_cbufs = 1
+    fb.set_cbuf(0, surface)
+    ctx.set_framebuffer(fb)
+
+    # vertex shader
+    vs = Shader('''
+        VERT1.1
+        DCL IN[0], POSITION, CONSTANT
+        DCL IN[1], COLOR, CONSTANT
+        DCL OUT[0], POSITION, CONSTANT
+        DCL OUT[1], COLOR, CONSTANT
+        0:MOV OUT[0], IN[0]
+        1:MOV OUT[1], IN[1]
+        2:END
+    ''')
+    #vs.dump()
+    ctx.set_vertex_shader(vs)
+
+    # fragment shader
+    fs = Shader('''
+        FRAG1.1
+        DCL IN[0], COLOR, LINEAR
+        DCL OUT[0], COLOR, CONSTANT
+        0:MOV OUT[0], IN[0]
+        1:END
+    ''')
+    #fs.dump()
+    ctx.set_fragment_shader(fs)
+
+    nverts = 3
+    nattrs = 2
+    verts = FloatArray(nverts * nattrs * 4)
+
+    verts[ 0] = 128.0 # x1
+    verts[ 1] =  32.0 # y1
+    verts[ 2] =   0.0 # z1
+    verts[ 3] =   1.0 # w1
+    verts[ 4] =   1.0 # r1
+    verts[ 5] =   0.0 # g1
+    verts[ 6] =   0.0 # b1
+    verts[ 7] =   1.0 # a1
+    verts[ 8] =  32.0 # x2
+    verts[ 9] = 224.0 # y2
+    verts[10] =   0.0 # z2
+    verts[11] =   1.0 # w2
+    verts[12] =   0.0 # r2
+    verts[13] =   1.0 # g2
+    verts[14] =   0.0 # b2
+    verts[15] =   1.0 # a2
+    verts[16] = 224.0 # x3
+    verts[17] = 224.0 # y3
+    verts[18] =   0.0 # z3
+    verts[19] =   1.0 # w3
+    verts[20] =   0.0 # r3
+    verts[21] =   0.0 # g3
+    verts[22] =   1.0 # b3
+    verts[23] =   1.0 # a3
+
+    ctx.surface_clear(surface, 0x00000000)
+    
+    ctx.draw_vertices(PIPE_PRIM_TRIANGLES,
+                      nverts, 
+                      nattrs, 
+                      verts)
+
+    ctx.flush()
+
+    save_image("tri.png", surface)
+
+
+
+def main():
+    dev = Device(hardware = False)
+    test(dev)
+
+
+if __name__ == '__main__':
+    main()