view TaskManager/Test/test_render/SpanPack.h @ 146:2284efc89f63

TileList の生成の修正
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Tue, 02 Dec 2008 14:12:01 +0900
parents fc314f28b66e
children 5cde66c926b4
line wrap: on
line source

#ifndef INCLUDED_SPAN_PACK
#define INCLUDED_SPAN_PACK

#ifndef INCLUDED_SPAN
#  include "Span.h"
#endif

#define MAX_SIZE_SPAN 70

class SpanPack {
public: /* fields */
    struct SpanInfo {
	int size; // 4
	int y_top; // 4
	int light_pos[3]; // 4*3
	int light_rgb[3]; // 4*3
    } info; // 32

    Span span[MAX_SIZE_SPAN]; // 48*MAX_SIZE_SPAN = 3360
    SpanPack *next; // 4

    int pad[3]; // 12

    void init(int ytop) {
	this->info.size = 0;
	this->info.y_top = ytop;
	this->next = NULL;
    }

    void reinit(int ytop) {
	/**
	 * かっこわるすぐる
	 */ 
	SpanPack* top = this;
	SpanPack* p;
	SpanPack* p1;

	p = top->next;
	while (p != NULL) {
	    p1 = p->next;
	    for (int i = 0; i < p->info.size; i++) {
		Span* span = &p->span[i];
		span->reinit();
	    }
	    free(p);
	    p = p1;
	}

	for (int i = 0; i < this->info.size; i++) {
	    Span* span = &this->span[i];
	    span->reinit();
	}
	
	this->info.size = 0;
	this->info.y_top = ytop;
	this->next = NULL;
    }
};

typedef SpanPack* SpanPackPtr;

#endif