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; }
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; }
// 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; }
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 ); } }
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; }