Mercurial > hg > Game > Cerium
annotate Renderer/Engine/task/Draw.cc @ 1303:0229c8ce0327 draft
minor change
author | Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Dec 2011 19:00:53 +0900 |
parents | 1cb89ec2e796 |
children |
rev | line source |
---|---|
751
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
1 //#include "RunDraw.h" |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
2 #include "SchedTask.h" |
539 | 3 |
4 SchedDefineTask(Draw); | |
5 | |
6 static int | |
751
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
7 run(SchedTask *smanager, void *rbuf, void *wbuf) |
539 | 8 { |
751
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
9 #if 0 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
10 PolygonPack *pp = (PolygonPack*)smanager->get_input(rbuf, 0); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
11 PolygonPack *next_pp = |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
12 (PolygonPack*)smanager->allocate(sizeof(PolygonPack)); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
13 PolygonPack *free_pp = next_pp; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
14 PolygonPack *tmp_pp; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
15 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
16 TrianglePackPtr triPack; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
17 VertexPackPtr vMin, vMid, vMax; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
18 VertexPackPtr vMid10 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
19 = (VertexPackPtr)smanager->allocate(sizeof(VertexPack)); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
20 NormalPackPtr normal1,normal2, normal3; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
21 SpanPackPtr *spackList = (SpanPackPtr*)smanager->get_input(rbuf, 1); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
22 spack = (SpanPackPtr)smanager->get_input(rbuf, 2); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
23 send_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack)); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
24 prev_index = (long)smanager->get_param(0); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
25 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
26 // spack と send_spack は swap しながら DMA を繰り返すので |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
27 // 自分で allocate した send_spack を覚えてないといけない |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
28 SpanPackPtr free_spack = send_spack; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
29 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
30 int charge_y_top = (long)smanager->get_param(1); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
31 int charge_y_end = (long)smanager->get_param(2); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
32 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
33 do { |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
34 if (pp->next != NULL) { |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
35 smanager->dma_load(next_pp, (memaddr)pp->next, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
36 sizeof(PolygonPack), POLYGON_PACK_LOAD); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
37 } else { |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
38 next_pp = NULL; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
39 } |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
40 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
41 for (int i = 0; i < pp->info.size; i++) { |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
42 triPack = &pp->tri[i]; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
43 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
44 TriangleTexInfoPtr tri_tex_info = &triPack->tex_info; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
45 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
46 make_vertex(triPack, &vMin, &vMid, &vMax, &normal1, &normal2, &normal3); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
47 make_vMid10(vMid10, vMin, vMid, vMax); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
48 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
49 /** |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
50 * ポリゴンを、x軸に水平に分割して二つの三角形を作り、 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
51 * それぞれから Span を求める |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
52 * |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
53 * vMax |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
54 * |\ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
55 * | \ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
56 * | \ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
57 * | \ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
58 * vMid10 ------ vMid |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
59 * | / |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
60 * | / |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
61 * | / |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
62 * |/ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
63 * vMin |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
64 * |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
65 * (vMax, vMid, vMin) という triangle を |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
66 * (vMax, vMid, vMid10) (vMin, vMid, vMid10) という |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
67 * 二つの Triangle に分けている |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
68 */ |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
69 half_triangle(smanager, spackList, charge_y_top, charge_y_end, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
70 tri_tex_info, vMin, vMid, vMid10, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
71 normal1,normal2,normal3, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
72 (int)(vMax->y - vMin->y), vMax->tex_y - vMin->tex_y); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
73 half_triangle(smanager, spackList, charge_y_top, charge_y_end, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
74 tri_tex_info, vMax, vMid, vMid10, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
75 normal1,normal2,normal3, |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
76 (int)(vMax->y - vMin->y), vMax->tex_y - vMin->tex_y); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
77 } |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
78 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
79 smanager->dma_wait(POLYGON_PACK_LOAD); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
80 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
81 tmp_pp = pp; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
82 pp = next_pp; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
83 next_pp = tmp_pp; |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
84 } while (pp); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
85 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
86 smanager->dma_wait(SPAN_PACK_STORE); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
87 smanager->dma_store(spack, (memaddr)spackList[prev_index], |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
88 sizeof(SpanPack), SPAN_PACK_STORE); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
89 smanager->dma_wait(SPAN_PACK_STORE); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
90 |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
91 free(free_pp); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
92 free(free_spack); |
1666dba6f6d9
rendering, move_coll parallel running
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents:
539
diff
changeset
|
93 free(vMid10); |
882 | 94 #endif |
539 | 95 return 0; |
96 } |