Mercurial > hg > Game > Cerium
view Renderer/Engine/task/AllocateSegment.cc @ 2041:363b7c401c79 draft
Make Rendefing Engine
author | Shin,ichi Uehara |
---|---|
date | Mon, 23 Mar 2015 17:47:12 +0900 |
parents | e8debff40a3d |
children | 24113f4fa9b5 |
line wrap: on
line source
#include <stdlib.h> #include <string.h> #include "AllocateSegment.h" #include "task_texture.h" #include "Func.h" #include "Tapestry.h" #include "polygon_pack.h" #include "SpanPack.h" SchedDefineTask(AllocateSegment); /** * 各種 MemorySegment の用意はここでするのか? * いづれは、MemorySegment は大きく最初にガバっと領域を確保 * MemorySegment は可変な大きさになって、要求したサイズだけ、poolから領域を与える。。 * みたいな感じか。Cell以外のアーキテクチャではどうなんだろう。Segmentを管理ってのは必須なのか */ static int run(SchedTask *smanager, void *rbuf , void *wbuf) { /* * GLOBAL_TILE_LIST 16384 TEXTURE_BLOCK_SIZE が 8*8 で 256, MAX_TILE 64 * PolygonPack size 34848 sizeof(PolygonPack) 17424, POLYGONPACK_SEGMENT_NUM 2 (でかすぎる) * SpanPack size 20704 sizeof(SpanPack) 5176, SPANPACK_SEGMENT_NUM 4 * spackList 1024 512*2 * * 明らかに Polygon Pack が食い過ぎ 256k しかメモリがないのに。 全部で32k or 64k に抑える。 * MAX_SIZE_TRIANGLE 128 を減らせば良い * Texture とは共有させる * spackList は計算可能なので配列をコピーする必要はない */ MemList *ml = smanager->createMemList(sizeof(uint32) * TEXTURE_BLOCK_SIZE, MAX_TILE); smanager->global_set(/*GLOBAL_TILE_LIST*/16384, (void *)ml); #ifdef USE_SEGMENT ml = smanager->createMemList(sizeof(PolygonPack), POLYGONPACK_SEGMENT_NUM); smanager->global_set(/*GLOBAL_POLYGONPACK_LIST*/34848, (void *)ml); ml = smanager->createMemList(sizeof(SpanPack), SPANPACK_SEGMENT_NUM); smanager->global_set(/*GLOBAL_SPANPACK_LIST*/20704, (void *)ml); #endif return 0; }