changeset 419:a3ef5c15edac draft

merge
author Hiroki NAKASONE <hiroki@cr.ie.u-ryukyu.ac.jp>
date Wed, 23 Sep 2009 21:24:38 +0900
parents 0e62e80fc039 (diff) a10f5322d262 (current diff)
children cd9baead0c39
files TaskManager/Test/test_render/Makefile TaskManager/Test/test_render/task/task_init.cc TaskManager/Test/test_render/viewer.cc
diffstat 11 files changed, 154 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Test/test_render/Func.h	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/Func.h	Wed Sep 23 21:24:38 2009 +0900
@@ -29,7 +29,8 @@
 
      TASK_SWITCH,
      SHOW_TIME,
-     SEND_KEY,
+     UPDATE_KEY,
+     INIT_KEY_TASK,
 
      CHAIN_MOVE,
 };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/KeyStat.h	Wed Sep 23 21:24:38 2009 +0900
@@ -0,0 +1,18 @@
+#ifndef INCLUDED_KEY_STATUS
+#define INCLUDED_KEY_STATUS
+
+enum {
+    NONE,
+    HOLD,
+    PUSH,
+};
+
+typedef struct key_stat {
+    int right;
+    int left;
+    int up;
+    int down;
+    int circle;
+};
+
+#endif
--- a/TaskManager/Test/test_render/Makefile	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/Makefile	Wed Sep 23 21:24:38 2009 +0900
@@ -34,7 +34,7 @@
 
 run-ps3:
 	/usr/sbin/ps3-video-mode -v 133
-	./test_nogl -video fb -width 1920 -height 1080 -sg 17
+	./test_nogl -video fb -width 1920 -height 1080
 
 run-ps3tv:
 	./test_nogl -video fb -width 576 -height 384 -bpp 32
--- a/TaskManager/Test/test_render/global_alloc.h	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/global_alloc.h	Wed Sep 23 21:24:38 2009 +0900
@@ -11,7 +11,7 @@
   TEXTURE_ID,
   GLOBAL_TEXTURE_HASH,
   GLOBAL_TILE_LIST,
-
+  KEY_STATUS,
 };
 
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/task/InitKey.cc	Wed Sep 23 21:24:38 2009 +0900
@@ -0,0 +1,16 @@
+#include <stdlib.h>
+#include <string.h>
+#include "InitKey.h"
+#include "Func.h"
+#include "global_alloc.h"
+#include "KeyStat.h"
+
+SchedDefineTask(InitKey);
+
+int
+InitKey::run(SchedTask *smanager, void *rbuf , void *wbuf)
+{
+    void *key = smanager->global_alloc(KEY_STATUS, sizeof(key_stat));
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/task/InitKey.h	Wed Sep 23 21:24:38 2009 +0900
@@ -0,0 +1,13 @@
+#ifndef INCLUDED_TASK_INIT_KEY
+#define INCLUDED_TASK_INIT_KEY
+
+#include "SchedTask.h"
+
+class InitKey : public SchedTask {
+public:
+    SchedConstructor(InitKey);
+
+    int run(SchedTask *smanager, void *rbuf, void *wbuf);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/task/UpdateKey.cc	Wed Sep 23 21:24:38 2009 +0900
@@ -0,0 +1,16 @@
+#include "TaskManager.h"
+#include "KeyStat.h"
+#include "UpdateKey.h"
+#include "global_alloc.h"
+
+SchedDefineTask(UpdateKey);
+
+int 
+UpdateKey::run(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    key_stat *key = (key_stat*)smanager->get_input(0);
+    key_stat *gdata = (key_stat*)smanager->global_get(KEY_STATUS); 
+    memcpy(gdata, key, sizeof(key_stat));
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Test/test_render/task/UpdateKey.h	Wed Sep 23 21:24:38 2009 +0900
@@ -0,0 +1,15 @@
+#ifndef INCLUDED_TASK_UPDATE_KEY
+#define INCLUDED_TASK_UPDATE_KEY
+
+#include "SchedTask.h"
+#include "SceneGraphRoot.h"
+
+class UpdateKey : public SchedTask {
+public:
+    SchedConstructor(UpdateKey);
+
+    int run(SchedTask *smanager, void *rbuf, void *wbuf);
+    void setKeyStat();
+};
+
+#endif
--- a/TaskManager/Test/test_render/task/task_init.cc	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/task/task_init.cc	Wed Sep 23 21:24:38 2009 +0900
@@ -20,7 +20,12 @@
 SchedExternTask(Dummy);
 
 SchedExternTask(ShowTime);
+SchedExternTask(ChainMove);
 SchedExternTask(SendKey);
+
+SchedExternTask(UpdateKey);
+SchedExternTask(InitKey);
+
 SchedExternTask(ChainMove);
 SchedExternTask(Switch);
 
@@ -49,7 +54,9 @@
 
     SchedRegisterTask(TASK_DUMMY, Dummy);
 
-    SchedRegisterTask(SEND_KEY, SendKey);
+    SchedRegisterTask(UPDATE_KEY, UpdateKey);
+    SchedRegisterTask(INIT_KEY_TASK, InitKey);
+
     SchedRegisterTask(SHOW_TIME, ShowTime);
     SchedRegisterTask(TASK_SWITCH, Switch);
 
--- a/TaskManager/Test/test_render/viewer.cc	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/viewer.cc	Wed Sep 23 21:24:38 2009 +0900
@@ -168,8 +168,6 @@
         break;
     case 17:
         chain_old_init(manager, this->width, this-> height);
-	speLoop();
-	return;
 	break;
     default:
         node_init(manager);
@@ -231,10 +229,18 @@
     return task_next;
 }
 
+/* Loop って言っても1回しか実行されない */
 void
 Viewer::speLoop()
 {
     HTaskPtr task_next = initLoop();
+    // key の情報を格納する領域を確保する (global_alloc(KEY_STATUS))
+    HTaskPtr init_key_task = manager->create_task(INIT_KEY_TASK);
+    init_key_task->spawn();
+    
+    // SPE に送信する KEY_STATUS の領域確保
+    key_stat *key = (key_stat*)manager->allocate(sizeof(key_stat));    
+    this->keyPtr = key;
 
     // post2runLoop は旧バージョン用なので post2speRunLoop の様なものを別につくるべき
     task_next->set_post(post2speRunLoop, (void*)this); // set_post(function(this->run_loop()), NULL)
@@ -249,13 +255,64 @@
     task_switch->spawn();
 }
 
+void
+Viewer::getKey()
+{
+    Pad *pad = sgroot->getController();
+    if (pad->right.isHold()) {
+	keyPtr->right = HOLD;
+    } else if (pad->right.isPush()) {
+	keyPtr->right = PUSH;
+    } else {
+	keyPtr->right = NONE;
+    }
+    
+    if (pad->left.isHold()) {
+	keyPtr->left = HOLD;
+    } else if (pad->left.isPush()) {
+	keyPtr->left = PUSH;
+    } else {
+	keyPtr->left = NONE;
+    }
+
+    if (pad->up.isHold()) {
+	keyPtr->up = HOLD;
+    } else if (pad->up.isPush()) {
+	keyPtr->up = PUSH;
+    } else {
+	keyPtr->up = NONE;
+    }
+
+    if (pad->down.isHold()) {
+	keyPtr->down = HOLD;
+    } else if (pad->down.isPush()) {
+	keyPtr->down = PUSH;
+    } else {
+	keyPtr->down = NONE;
+    }
+
+    if (pad->circle.isHold()) {
+	keyPtr->circle = HOLD;
+    } else if (pad->circle.isPush()) {
+	keyPtr->circle = PUSH;
+    } else {
+	keyPtr->circle = NONE;
+    }
+}
 
 static void
 post2runMoveDrawLoop(void *viewer_)
 {
     Viewer *viewer = (Viewer*)viewer_;
-
-    HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY);
+    
+    // 同じ PPE 上なので sgroot(ポインタ) を add_param で送る。 
+    //HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY);
+    //send_key_task->add_param((int)sgroot);
+    // set input data -> viewer keyPtr
+    viewer->getKey();
+    HTaskPtr update_key = viewer->manager->create_task(UPDATE_KEY);
+    update_key->add_inData(viewer->keyPtr, sizeof(key_stat));
+    update_key->spawn();
 
     HTaskPtr move_task = viewer->manager->create_task(TASK_MOVE);    
     //move_task->add_param(sgroot);
@@ -265,7 +322,6 @@
     HTaskPtr switch_task = viewer->manager->create_task(TASK_SWITCH);
     switch_task->wait_for(move_task);
     switch_task->wait_for(draw_task);
-    send_key_task->spawn();
     move_task->spawn();
     draw_task->spawn();
 
--- a/TaskManager/Test/test_render/viewer.h	Wed Sep 23 20:59:32 2009 +0900
+++ b/TaskManager/Test/test_render/viewer.h	Wed Sep 23 21:24:38 2009 +0900
@@ -5,6 +5,7 @@
 
 #include "viewer_types.h"
 #include "TaskManager.h"
+#include "KeyStat.h"
 
 class Viewer {
 public:
@@ -14,6 +15,7 @@
     virtual ~Viewer(void) {}
 
     TaskManager *manager;
+    key_stat *keyPtr;
 
     /* screen info */
     int width;
@@ -45,6 +47,7 @@
     virtual void rendering(HTaskPtr task_next);
     //virtual void exchange_sgroot(TaskManager *manager);
 
+    void getKey();
     void get_send_controll();
 private:
     HTaskPtr initLoop();