示例#1
0
bool PaintWidget::reset()
{
    emit zoomEvent(scaleVal = 1);

    setFrame(0.0, false);
    if( !painter.isEnabled() ) return false;

    setViewportColor( QColor( 100, 100, 100 ) );

    BACKGROUND( painter.background )->reset();

    setViewportType( fixedViewport );
    setViewportFixedSize( QSize( 640, 480 ) );

    for(int i=0; i<painter.layers.size(); i++)
    {
        while( painter.layers[i]->countObjects() > 0 )
                delete painter.layers[i]->remove( 0 );
        delete painter.layers[i];
    }
    painter.layers.clear();

    painter.addLayer(true, false, tr("Layer ") + "0");
    painter.selection.reset();
    painter.inKeyPressedHandler = false;
    painter.inSelectionMode = false;
    update();

    emit figureSelected( 0, -1);
    emit allLayersChanged();
    emit countFramesChanged( countFrames() );

    return true;
}
示例#2
0
bool PaintWidget::load( QDataStream &stream )
{
	if( !painter.isEnabled() ) return false;


	for(int i=0; i<painter.layers.size(); i++)
	{
		while( painter.layers[i]->countObjects() > 0 )
				delete painter.layers[i]->remove( 0 );
		delete painter.layers[i];
	}

	painter.layers.clear();
	QString signature;
	stream >> signature;

	if( signature != SIGNATURE )
		return false;

	stream >> transparent;
	stream >> viewportColor;

	if( !transparent )
		setViewportColor( viewportColor );
	else
		doViewportTransparent();

	BACKGROUND( painter.background )->load( stream );

	int type;
	stream >> type;
	setViewportType( ( ViewportType ) type );

	stream >> painter.size;
	setViewportFixedSize( painter.size );
	int countLayer;
	stream >> countLayer;

	for(int i=0; i<countLayer; i++)
	{
			QString name;
			stream >> name;
			painter.addLayer(true, false, name);
			painter.layers[i]->loadLayer( stream );
	}

	painter.selection.reset();
	painter.inKeyPressedHandler = false;
	painter.inSelectionMode = false;
	update();

	emit figureSelected( 0 , -1);
	emit allLayersChanged();
	emit countFramesChanged( countFrames() );

    setFrame(0.0, false);

	return true;
}
示例#3
0
// Add definition to library
VSLDef *VSLLib::add(const string& func_name,
    VSLNode *pattern, VSLNode *expr, 
    bool global, const string& filename, int lineno)
{
    BACKGROUND();

    // Find DefList for function name
    VSLDefList *d = deflist(func_name);
    
    if (d == 0)
    {
	// Not found?  Create a new DefList...
	unsigned hashcode = hashpjw(func_name.chars()) % hashSize;

	d = defs[hashcode];
	defs[hashcode] = new VSLDefList(this, hashcode, func_name, global);
	defs[hashcode]->next() = d;

	// ...and return it
	d = defs[hashcode];
    }

    // Append new def to DefList
    bool newFlag;
    VSLDef* newdef = d->add(newFlag, pattern, expr, filename, lineno);

    if (newFlag)
    {
	// Insert def into global list
	if (_last == 0)
	    _first = newdef;
	else
	{
	    _last->libnext() = newdef;
	    newdef->libprev() = _last;
	}
	_last = newdef;
    }

    // Setup scope: Scope is global if any def is global.
    d->global() = d->global() || global;

    return newdef;
}
示例#4
0
void PaintWidget::save( QDataStream &stream )
{
	if( !painter.isEnabled() ) return;

	stream << SIGNATURE;

	stream << transparent;
	stream << viewportColor;

	BACKGROUND( painter.background )->save( stream );
	stream << ( int ) viewportType();
	stream << painter.size;
	stream << painter.layers.size();
	//QMessageBox::warning(this ,"dsad",QString::number(painter.layers.size()));
	for(int i=0; i<painter.layers.size(); i++)
	{
		stream <<  painter.layers[i]->objectName();
		painter.layers[i]->saveLayer( stream );
	}
}
示例#5
0
void glInternalFlush(u32 target) {
	u32 i;
	u32 param_base = REGS32(0x8020) & 0x007FFFFF;
	u32 background = (REGS32(0x808C) & 0x00FFFFF8) >> 1;
	u32 address = (param_base + background) & 0x007FFFFF;

	flushPrim();
	NewStripList();

	BACKGROUND((u32*)&VRAM[address]);

	flushPrim();
	NewStripList();

	glClearColor((float)REGS[0x8042] / 255.0f,
				 (float)REGS[0x8041] / 255.0f,
				 (float)REGS[0x8040] / 255.0f,
				 (float)REGS[0x8043] / 255.0f);
	glDepthMask(GL_TRUE);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	if (cfg.ListSorting) {
		qsort((void*)objList, objCount, sizeof(OBJECT), comp_func);
//		qsort((void*)objList,objCount,sizeof(OBJECT),listtypesort_func);
//		qsort((void*)objList,objCount,sizeof(OBJECT),transsort_func);
//		qsort((void*)objList,objCount,sizeof(OBJECT),punchsort_func);
	}

	glPushMatrix();

	switch (target) {
	case RENDER_TARGET_FRAMEBUFFER:
		glViewport(0, 0, 640, 480);
		glTranslatef(0.0f, 0.0f, -(float)RENDER_VIEW_DISTANCE);
		break;
	case RENDER_TARGET_TEXTURE:
	{
		glViewport(0, 0, 640, (REGS16(0x806E) - REGS16(0x806c) + 1));
		glScalef(1.0f, -1.0f, 1.0f);
		glTranslatef(0.0f, -480.0f, -(float)RENDER_VIEW_DISTANCE);
		break;
	}
	}

//	DEMUL_printf(">render scene (objCount=%d)\n",objCount);

	for (i = 0; i < objCount; i++) {
		OBJECT *obj = &objList[i];
		vCount = obj->vCount;

		if (vCount) {
			polygon = obj->polygon;

//			DEMUL_printf(">object %3d, dist = %6f, listtype = %d, pcw = %08X, isp = %08X, tsp = %08X, tcw = %08X\n",i,obj->midZ, obj->polygon.pcw.listtype, obj->polygon.pcw.all, obj->polygon.isp.all, obj->polygon.tsp.all, obj->polygon.tcw.all);

			if (polygon.tsp.usealpha && cfg.AlphaZWriteDisable)
				polygon.isp.zwritedis = 1;

			SetupShadeMode();
			SetupCullMode();
			SetupZBuffer();
			if (cfg.Wireframe) {
				glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
			} else {
				SetupAlphaTest();
				SetupAlphaBlend();
				SetupTexture();
				glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
			}

			glDrawElements(GL_TRIANGLES, vCount, GL_UNSIGNED_INT, &pIndex[obj->vIndex]);
		}
	}
	glPopMatrix();

//	ProfileFinish(0);

	IRQ(0x0002);

	switch (target) {
	case RENDER_TARGET_FRAMEBUFFER:
		SwapBuffers(hdc);
		break;
	case RENDER_TARGET_TEXTURE:
	{
		u32 tw = REGS32(0x804C) << 2;
		u32 th = 512;
		glReadBuffer(GL_BACK);
		glBindTexture(GL_TEXTURE_2D, backbufname);
		glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, tw, th, 0);
		isFramebufferRendered = 1;
		TextureAddress = REGS32(0x8060) & 0x007FFFFF;
		break;
	}
	}

//	DEMUL_printf(">render end\n");
//	DEMUL_printf(">frame summary (maxz=%f,minz=%f)\n",maxz,minz);

	maxz = -10000000.0f;
	minz = 10000000.0f;
	objCount = 0;
	vIndex = 0;
	vCount = 0;
	vVertex = 0;
}