Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Test/test_render/task/create_sgp.cpp @ 128:776eca0daa02
texture load use hash table
author | gongo@charles.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 25 Nov 2008 15:52:28 +0900 |
parents | f515436feb71 |
children | 6cf991f28c6c |
rev | line source |
---|---|
109 | 1 #include <iostream> |
2 #include "scene_graph_pack.h" | |
3 #include "polygon.h" | |
4 #include "create_sgp.hpp" | |
5 #include "TaskManager.h" | |
6 using namespace std; | |
7 | |
8 SchedDefineTask(Create_SGP); | |
9 | |
10 /** | |
11 * TODO | |
12 * 入りきらない分は SceneGraphPack を next で繋げてるので | |
13 * node->pn をつかって sgp->node[node->pn] とかやって | |
14 * 親?の要素を探す事は出来ないかもしれません。 | |
15 * next を辿って node->pn == とかやるのは確実だけどさ。。。 | |
16 */ | |
17 int | |
18 //create_sgp(Polygon *sg, SceneGraphPack *sgp) | |
19 Create_SGP::run(void *rbuf, void *wbuf) | |
20 { | |
21 Polygon *sg = (Polygon*)get_input(rbuf, 0); | |
22 //SceneGraphPack *sgp = (SceneGraphPack*)get_output(wbuf, 0); | |
23 SceneGraphPack *sgp = (SceneGraphPack*)get_param(0); | |
24 sgp->init(); | |
25 | |
26 int curNumber = 0; | |
27 int nnpn = -1; | |
28 SceneGraphNodePtr node; | |
29 | |
30 Polygon *t = sg; | |
31 | |
32 while(t) { | |
33 // blocking はこれでいいのかな? | |
34 if (curNumber >= MAX_NODE ){ | |
35 SceneGraphPack *sgp_new = | |
36 //(SceneGraphPack*)manager->malloc(sizeof(SceneGraphPack)); | |
37 (SceneGraphPack*)smanager->allocate(sizeof(SceneGraphPack)); | |
38 sgp_new->init(); | |
39 sgp->info.size = curNumber-1; | |
40 curNumber = 0; | |
41 sgp->next = sgp_new; | |
42 sgp = sgp_new; | |
43 } | |
44 | |
45 node = &sgp->node[curNumber]; | |
46 node->init(); | |
47 | |
48 for (int i = 0,d = 0,tex = 0; i < t->size; i++, d += 3, tex += 2) { | |
49 if (node->size >= MAX_POLYGON) { | |
50 SceneGraphNodePtr node_new = (SceneGraphNodePtr)smanager->allocate(sizeof(SceneGraphNode)); | |
51 node_new->init(); | |
52 node->next = node_new; | |
53 node = node_new; | |
54 d = 0; | |
55 tex = 0; | |
56 } | |
57 | |
113
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
58 /** |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
59 * struct texture { |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
60 * int texture_id; |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
61 * float vertex[3]; |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
62 * float texture[2]; |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
63 * } |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
64 */ |
6ba88fa28df6
Define New Texture Data Structure
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
65 |
109 | 66 node->vertex[d] = t->data[i*3]; |
67 node->vertex[d+1] = t->data[i*3+1]; | |
68 node->vertex[d+2] = t->data[i*3+2]; | |
69 node->texture[tex] = t->data[i*3+t->size*6]; | |
70 node->texture[tex+1] = t->data[i*3+t->size*6+1]; | |
71 node->size++; | |
72 } | |
73 | |
74 node = &sgp->node[curNumber]; | |
75 | |
76 SceneGraphNode *p = node; | |
77 do { | |
78 p->obj_pos[0] = 0; | |
79 p->obj_pos[1] = 0; | |
80 p->obj_pos[2] = 0; | |
81 p->obj_pos[3] = 1; | |
82 p->angle[0] = 0; | |
83 p->angle[1] = 0; | |
84 p->angle[2] = 0; | |
85 p->angle[3] = 1; | |
86 | |
87 for (int tm = 0; tm < 16; tm++) { | |
88 p->translation[tm] = 0; | |
89 } | |
90 | |
91 p->id = 0; | |
92 p->move = 0; | |
93 p->interaction = 0; | |
94 | |
95 p->pn = nnpn; | |
96 //node->tex_addr = t->texture_image->pixels; | |
97 p->tex_width = t->texture_image->w; | |
98 p->tex_height = t->texture_image->h; | |
99 p = p->next; | |
100 } while (p); | |
101 | |
123
f515436feb71
delete scene_graph->child (instead use "children")
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents:
113
diff
changeset
|
102 if (t->children != NULL) { |
109 | 103 nnpn = curNumber; |
104 t = t->children; | |
105 } else if (t->brother != NULL) { | |
106 nnpn = node->pn; | |
107 t = t->brother; | |
108 } else { | |
109 while (t) { | |
110 if (t->brother != NULL) { | |
111 t = t->brother; | |
112 break; | |
113 } else { | |
114 if (t->parent == NULL) { | |
115 t = NULL; | |
116 break; | |
117 } | |
118 nnpn = sgp->node[nnpn].pn; | |
119 t = t->parent; | |
120 } | |
121 } | |
122 } | |
123 curNumber++; | |
124 } | |
125 sgp->info.size = curNumber; | |
126 | |
123
f515436feb71
delete scene_graph->child (instead use "children")
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents:
113
diff
changeset
|
127 |
f515436feb71
delete scene_graph->child (instead use "children")
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents:
113
diff
changeset
|
128 |
109 | 129 return 0; |
130 } |