Пример #1
0
    def test_call(self):
        code = """
tmp = p1 + p2 + p3
p4.x = 55.99
return tmp
        """
        p1 = FloatArg('p1', 2.0)
        p2 = IntArg('p2', 0)
        p3 = FloatArg('p3', 0.0)
        p4 = StructArgPtr('p4', TestPoint(4.4, 5.5))
        shader = Shader(code=code, args=[], name='adding',
                        func_args=[p1, p2, p3, p4], is_func=True)
        shader.compile()
        shader.prepare(self.runtimes)

        code2 = """
p1 = 44
p2 = 7
point = TestPoint()
rez = adding(55.4, p1, p2, point)
rez2 = point.x
        """
        rez = FloatArg('rez', 11.33)
        rez2 = FloatArg('rez2', 1.0)
        shader2 = Shader(code=code2, args=[rez, rez2])
        shader2.compile([shader])
        shader2.prepare(self.runtimes)
        shader2.execute()

        rez = shader2.get_value('rez')
        rez2 = shader2.get_value('rez2')
        self.assertAlmostEqual(rez, 55.4 + 44 + 7, places=5)
        self.assertAlmostEqual(rez2, 55.99, places=5)
Пример #2
0
    def test_float(self):
        code = """
temp = 5
p1 = float(temp)
p2 = float(88)
p3 = float()
p4 = float(6.6)
        """
        p1 = FloatArg('p1', 333.3)
        p2 = FloatArg('p2', 333.3)
        p3 = FloatArg('p3', 333.3)
        p4 = FloatArg('p4', 333.3)

        shader = Shader(code=code, args=[p1, p2, p3, p4])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()

        p = shader.get_value('p1')
        self.assertAlmostEqual(p, 5.0)
        p = shader.get_value('p2')
        self.assertAlmostEqual(p, 88.0)
        p = shader.get_value('p3')
        self.assertAlmostEqual(p, 0.0)
        p = shader.get_value('p4')
        self.assertAlmostEqual(p, 6.6, places=6)
Пример #3
0
    def test_arithmetic(self):
        code = """
a1 = 33
a2 = 22
p1 = a1 + a2
a1 = 22.3
a2 = 11.1
p2 = a1 + a2
a1 = 44
a2 = -2.36
p3 = a1 * a2
a1 = (2.3, 4)
a2 = 5
p4 = a1 * a2

a1 = (3, 4, 6.6)
a2 = (7, 4.3, 2.6)
p5 = a1 - a2

a1 = (1, 4.1, 5.5, 9.9)
a2 = (0.22, 3.3, 2.6, 6.6)
p6 = a1 / a2
        """
        p1 = IntArg('p1', 33)
        p2 = FloatArg('p2', 55.5)
        p3 = FloatArg('p3', 55.5)
        p4 = Vec2Arg('p4', Vector2(0.0, 0.0))
        p5 = Vec3Arg('p5', Vector3(0.0, 0.0, 0.0))
        p6 = Vec4Arg('p6', Vector4(0.0, 0.0, 0.0, 0.0))

        shader = Shader(code=code, args=[p1, p2, p3, p4, p5, p6])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()

        rez = shader.get_value('p1')
        self.assertEqual(rez, 33 + 22)
        rez = shader.get_value('p2')
        self.assertAlmostEqual(rez, 22.3 + 11.1, places=5)
        rez = shader.get_value('p3')
        self.assertAlmostEqual(rez, 44 * -2.36, places=5)
        rez = shader.get_value('p4')
        self.assertAlmostEqual(rez.x, 5 * 2.3, places=5)
        self.assertAlmostEqual(rez.y, 5 * 4, places=5)
        rez = shader.get_value('p5')
        self.assertAlmostEqual(rez.x, 3 - 7.0, places=5)
        self.assertAlmostEqual(rez.y, 4 - 4.3, places=5)
        self.assertAlmostEqual(rez.z, 6.6 - 2.6, places=5)
        rez = shader.get_value('p6')
        self.assertAlmostEqual(rez.x, 1 / 0.22, places=5)
        self.assertAlmostEqual(rez.y, 4.1 / 3.3, places=5)
        self.assertAlmostEqual(rez.z, 5.5 / 2.6, places=5)
        self.assertAlmostEqual(rez.w, 9.9 / 6.6, places=5)
Пример #4
0
    def test_array(self):

        p = SuperPoint(3.0, 4.0)
        arr = Array(p)
        arr.append(p)
        arr.append(p)
        p = SuperPoint(7.0, 9.0)
        arr.append(p)

        code = """
index = 2
temp = arr[index]
p1 = temp.x
temp.y = 12.34
        """
        arg = ArrayArg('arr', arr)
        arg1 = FloatArg('p1', 4.4)
        shader = Shader(code=code, args=[arg, arg1])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()
        val = shader.get_value('p1')
        self.assertAlmostEqual(val, 7.0)
        obj = arr[2]
        self.assertAlmostEqual(obj.y, 12.34, 6)
Пример #5
0
    def test_sampled_lum(self):

        mgr = SampledManager()
        shader = lum_sampled_shader(mgr)
        shader.compile()
        runtime = Runtime()
        shader.prepare([runtime])
        code = """
rez = lumminance(r1)
        """

        vals = [(450, 0.13), (480, 0.45), (620, 0.58)]
        samples = create_samples(vals, 32, 400, 700)
        sam_spec = SampledSpectrum(samples)
        s = SampledArg('r1', sam_spec)

        rez = FloatArg('rez', 0.0)
        shader2 = Shader(code=code, args=[rez, s])
        shader2.compile([shader])
        shader2.prepare([runtime])
        shader2.execute()

        val = shader2.get_value('rez')
        lum = mgr.lumminance(sam_spec)
        self.assertAlmostEqual(lum, val)
Пример #6
0
def sampled_to_vec_shader(col_mgr):
    code = """
x = cie_x * spec
y = cie_y * spec
z = cie_z * spec

X = sum_samples(x) * scale
Y = sum_samples(y) * scale
Z = sum_samples(z) * scale

r = 3.240479 * X - 1.537150 * Y - 0.498535 * Z
g = -0.969256 * X + 1.875991 * Y + 0.041556 * Z
b = 0.055648 * X - 0.204043 * Y + 1.057311 * Z

return float3(r, g, b)
    """

    spec = col_mgr.zero()
    spec_arg = SampledArgPtr('spec', 0, spec)

    scale = float(col_mgr.end - col_mgr.start) / (col_mgr.yint *
                                                  col_mgr.nsamples)
    p1 = FloatArg('scale', scale)
    cie_x = SampledArg('cie_x', col_mgr._cie_x)
    cie_y = SampledArg('cie_y', col_mgr._cie_y)
    cie_z = SampledArg('cie_z', col_mgr._cie_z)

    shader = Shader(code=code,
                    args=[p1, cie_x, cie_y, cie_z],
                    name='spectrum_to_vec',
                    func_args=[spec_arg],
                    is_func=True)
    return shader
Пример #7
0
    def test_con(self):
        code = """
a = 33
if a:
    p1 = 22

b = 22
if b > 15:
    p2 = 1.1

tmp = 4.4
tmp2 = 1.2
if tmp > tmp2:
    p3 = 2.2

tmp = 5.5
if tmp2 < tmp:
    p4 = 1.5

        """

        p1 = IntArg('p1', 55)
        p2 = FloatArg('p2', 4.4)
        p3 = FloatArg('p3', 9.4)
        p4 = FloatArg('p4', 2.4)

        shader = Shader(code=code, args=[p1, p2, p3, p4])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()

        p = shader.get_value('p1')
        self.assertEqual(p, 22)
        p = shader.get_value('p2')
        self.assertAlmostEqual(p, 1.1)
        p = shader.get_value('p3')
        self.assertAlmostEqual(p, 2.2)
        p = shader.get_value('p4')
        self.assertAlmostEqual(p, 1.5)
Пример #8
0
    def test_struct(self):
        code = """
a1 = MyPoint()
tmp = 66
a1.x = tmp
p1 = a1.x

tmp = 4.4
a1.y = tmp
p2 = a1.y

tmp = (6, 7)
a1.k = tmp
p3 = a1.k

tmp = (3, 4, 6)
a1.m = tmp
p4 = a1.m

tmp = (2, 4, 6, 7)
a1.p = tmp
p5 = a1.p

        """
        #p1 = IntArg('p1', 44) #TODO implicit conversion int to float
        p1 = IntArg('p1', 44)
        p2 = FloatArg('p2', 2.2)
        p3 = Vec2Arg('p3', Vector2(5.5, 7.7))
        p4 = Vec3Arg('p4', Vector3(2.2, 2.2, 4.4))
        p5 = Vec4Arg('p5', Vector4(8.8, 5.5, 3.3, 1.1))
        shader = Shader(code=code, args=[p1, p2, p3, p4, p5])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()

        v = shader.get_value('p1')
        self.assertEqual(v, 66)
        v = shader.get_value('p2')
        self.assertAlmostEqual(v, 4.4, places=6)
        v = shader.get_value('p3')
        self.assertAlmostEqual(v.x, 6.0, places=6)
        self.assertAlmostEqual(v.y, 7.0, places=6)
        v = shader.get_value('p4')
        self.assertAlmostEqual(v.x, 3.0, places=6)
        self.assertAlmostEqual(v.y, 4.0, places=6)
        self.assertAlmostEqual(v.z, 6.0, places=6)
        v = shader.get_value('p5')
        self.assertAlmostEqual(v.x, 2.0, places=6)
        self.assertAlmostEqual(v.y, 4.0, places=6)
        self.assertAlmostEqual(v.z, 6.0, places=6)
        self.assertAlmostEqual(v.w, 7.0, places=6)
Пример #9
0
    def test_dot_fun(self):
        code = """
p3 = dot(p1, p2)
        """
        v1 = Vector3(2.5, 1.8, 2.9)
        v2 = Vector3(2.2, 1.1, 5.22)
        p1 = Vec3Arg('p1', v1)
        p2 = Vec3Arg('p2', v2)
        p3 = FloatArg('p3', 2.2)

        shader = Shader(code=code, args=[p1, p2, p3])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()

        rez = v1.dot(v2)
        p = shader.get_value('p3')
        self.assertAlmostEqual(rez, p)
Пример #10
0
    def test_rgb_lum(self):

        shader = lum_rgb_shader()
        shader.compile()
        runtime = Runtime()
        shader.prepare([runtime])

        code = """
rez = lumminance(r1)
        """
        s = RGBArg('r1', RGBSpectrum(0.2, 0.3, 0.4))
        rez = FloatArg('rez', 0.0)
        shader2 = Shader(code=code, args=[rez, s])
        shader2.compile([shader])
        shader2.prepare([runtime])
        shader2.execute()

        lum = 0.2 * 0.212671 + 0.3 * 0.715160 + 0.4 * 0.072169
        val = shader2.get_value('rez')
        self.assertAlmostEqual(lum, val)
Пример #11
0
def lum_sampled_shader(col_mgr):
    code = """
y =  cie_y * spec
y_sum = sum_samples(y)
return y_sum * scale
    """

    spec = col_mgr.zero()
    spec_arg = SampledArgPtr('spec', 0, spec)

    scale = (col_mgr.end - col_mgr.start) / (col_mgr.yint * col_mgr.nsamples)
    p1 = FloatArg('scale', scale)
    cie_y = SampledArg('cie_y', col_mgr._cie_y)

    shader = Shader(code=code,
                    args=[p1, cie_y],
                    name='lumminance',
                    func_args=[spec_arg],
                    is_func=True)
    return shader
Пример #12
0
    def test_assign(self):
        code = """
k = 55
p1 = k
m = (4, 7)
p2 = m
h = (3.13, 8, 9)
p3 = h
t = (6.6, 2.2, 9, 1)
p4 = t
r = 3.3
p5 = r
        """
        p1 = IntArg('p1', 33)
        p2 = Vec2Arg('p2', Vector2(9, 22))
        p3 = Vec3Arg('p3', Vector3(1, 4.4, 29))
        p4 = Vec4Arg('p4', Vector4(2, 3, 1.1, 2))
        p5 = FloatArg('p5', 87.33)
        shader = Shader(code=code, args=[p1, p2, p3, p4, p5])
        shader.compile()
        shader.prepare([Runtime()])
        shader.execute()
        self.assertEqual(shader.get_value('p1'), 55)
        v = shader.get_value('p2')
        self.assertAlmostEqual(v.x, 4.0)
        self.assertAlmostEqual(v.y, 7.0)
        v = shader.get_value('p3')
        self.assertAlmostEqual(v.x, 3.13, places=6)
        self.assertAlmostEqual(v.y, 8.0)
        self.assertAlmostEqual(v.z, 9.0)
        v = shader.get_value('p4')
        self.assertAlmostEqual(v.x, 6.6, places=6)
        self.assertAlmostEqual(v.y, 2.2)
        self.assertAlmostEqual(v.z, 9.0)
        self.assertAlmostEqual(v.w, 1.0)
        v = shader.get_value('p5')
        self.assertAlmostEqual(v, 3.3)