Ver código fonte

Fixed bug with SceneLabel entity saving binding extra textures, sped up mesh rendering a bit, fixed scene manager calling an extra update loop for virtual scenes

Ivan Safrin 12 anos atrás
pai
commit
88c42a25b1

+ 0 - 2
Core/Contents/Source/PolyGLRenderer.cpp

@@ -165,8 +165,6 @@ void OpenGLRenderer::Resize(int xRes, int yRes) {
 
 
 	glMatrixMode(GL_MODELVIEW);
 	glMatrixMode(GL_MODELVIEW);
 	glLineWidth(1);
 	glLineWidth(1);
-	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
-	glShadeModel(GL_SMOOTH);
 	glDepthFunc( GL_LEQUAL );
 	glDepthFunc( GL_LEQUAL );
 	
 	
 	glEnable(GL_DEPTH_TEST);
 	glEnable(GL_DEPTH_TEST);

+ 1 - 3
Core/Contents/Source/PolyScene.cpp

@@ -65,9 +65,7 @@ void Scene::initScene(int sceneType, bool virtualScene) {
     remapMouse = false;
     remapMouse = false;
 	renderer = CoreServices::getInstance()->getRenderer();
 	renderer = CoreServices::getInstance()->getRenderer();
 	rootEntity.setRenderer(renderer);
 	rootEntity.setRenderer(renderer);
-	if (!isSceneVirtual) {
-		CoreServices::getInstance()->getSceneManager()->addScene(this);
-	}
+    CoreServices::getInstance()->getSceneManager()->addScene(this);
 	
 	
     setSceneType(sceneType);
     setSceneType(sceneType);
 	
 	

+ 7 - 3
Core/Contents/Source/PolySceneEntityInstance.cpp

@@ -126,7 +126,7 @@ void SceneEntityInstance::applySceneMesh(ObjectEntry *entry, SceneMesh *sceneMes
                                 ObjectEntry *textureEntry =(*texturesEntry)[j];
                                 ObjectEntry *textureEntry =(*texturesEntry)[j];
                                 if(textureEntry) {
                                 if(textureEntry) {
                                     ObjectEntry *nameEntry = (*textureEntry)["name"];
                                     ObjectEntry *nameEntry = (*textureEntry)["name"];
-                                    if(nameEntry) {
+                                    if(nameEntry && textureEntry->stringVal != "") {
                                         
                                         
                                         if(textureEntry->name == "cubemap") {
                                         if(textureEntry->name == "cubemap") {
                                             Cubemap *cubemap = (Cubemap*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_CUBEMAP, textureEntry->stringVal);
                                             Cubemap *cubemap = (Cubemap*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_CUBEMAP, textureEntry->stringVal);
@@ -248,12 +248,16 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
             Number actualHeight = (*labelEntry)["actualHeight"]->intVal;
             Number actualHeight = (*labelEntry)["actualHeight"]->intVal;
 			int aaMode = (*labelEntry)["aaMode"]->intVal;
 			int aaMode = (*labelEntry)["aaMode"]->intVal;
             
             
-			SceneLabel *label = new SceneLabel("", size, font, aaMode, actualHeight);
+			SceneLabel *label = new SceneLabel(text, size, font, aaMode, actualHeight);
             label->setAnchorPoint(0.0, 0.0, 0.0);
             label->setAnchorPoint(0.0, 0.0, 0.0);
             label->snapToPixels = false;
             label->snapToPixels = false;
             label->positionAtBaseline = false;
             label->positionAtBaseline = false;
             applySceneMesh((*entry)["SceneMesh"], label);
             applySceneMesh((*entry)["SceneMesh"], label);
-            label->setText(text);
+            if(label->getLocalShaderOptions()) {
+                label->getLocalShaderOptions()->clearTexture("diffuse");
+                label->getLocalShaderOptions()->addTexture("diffuse", label->getTexture());
+            }
+            
 			entity = label;
 			entity = label;
         } else if(entityType->stringVal == "SceneParticleEmitter") {
         } else if(entityType->stringVal == "SceneParticleEmitter") {
             
             

+ 0 - 3
Core/Contents/Source/PolySceneManager.cpp

@@ -79,9 +79,6 @@ void SceneManager::renderVirtual() {
 		if(renderTextures[i]->enabled) {
 		if(renderTextures[i]->enabled) {
 		renderer->setViewportSize(renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight());
 		renderer->setViewportSize(renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight());
 		renderer->loadIdentity();
 		renderer->loadIdentity();
-		if(renderTextures[i]->getTargetScene()->isVirtual())
-			renderTextures[i]->getTargetScene()->Update();
-						
 			if(renderTextures[i]->getTargetCamera()->hasFilterShader()) {
 			if(renderTextures[i]->getTargetCamera()->hasFilterShader()) {
 				renderTextures[i]->getTargetCamera()->drawFilter(renderTextures[i]->getTargetTexture(), renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight(), renderTextures[i]->getFilterColorBufferTexture(), renderTextures[i]->getFilterZBufferTexture());
 				renderTextures[i]->getTargetCamera()->drawFilter(renderTextures[i]->getTargetTexture(), renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight(), renderTextures[i]->getFilterColorBufferTexture(), renderTextures[i]->getFilterZBufferTexture());
 			} else {
 			} else {

+ 3 - 4
Core/Contents/Source/PolySceneMesh.cpp

@@ -254,12 +254,11 @@ void SceneMesh::renderMeshLocally() {
             norm.Normalize();
             norm.Normalize();
             vert->setNormal(norm.x, norm.y, norm.z);
             vert->setNormal(norm.x, norm.y, norm.z);
         }
         }
+        mesh->arrayDirtyMap[RenderDataArray::VERTEX_DATA_ARRAY] = true;
+        mesh->arrayDirtyMap[RenderDataArray::NORMAL_DATA_ARRAY] = true;
+        mesh->arrayDirtyMap[RenderDataArray::TANGENT_DATA_ARRAY] = true;
     }
     }
     
     
-    mesh->arrayDirtyMap[RenderDataArray::VERTEX_DATA_ARRAY] = true;		
-    mesh->arrayDirtyMap[RenderDataArray::NORMAL_DATA_ARRAY] = true;	
-    mesh->arrayDirtyMap[RenderDataArray::TANGENT_DATA_ARRAY] = true;
-
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::VERTEX_DATA_ARRAY);
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::VERTEX_DATA_ARRAY);
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::NORMAL_DATA_ARRAY);		
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::NORMAL_DATA_ARRAY);		
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::TANGENT_DATA_ARRAY);			
 	renderer->pushDataArrayForMesh(mesh, RenderDataArray::TANGENT_DATA_ARRAY);			

+ 2 - 0
IDE/Contents/Include/PolycodeEntityEditor.h

@@ -99,6 +99,8 @@ class EntityEditorMainView : public UIElement {
             void setEditorMode(int newMode);
             void setEditorMode(int newMode);
             Entity *getSelectedEntity();
             Entity *getSelectedEntity();
     
     
+            void deleteSelected();
+    
             Entity *getObjectRoot();
             Entity *getObjectRoot();
             void setObjectRoot(Entity *entity);
             void setObjectRoot(Entity *entity);
     
     

+ 37 - 3
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -276,6 +276,7 @@ EntityEditorMainView::EntityEditorMainView() {
     editorMode = EDITOR_MODE_3D;
     editorMode = EDITOR_MODE_3D;
     
     
     input = CoreServices::getInstance()->getCore()->getInput();
     input = CoreServices::getInstance()->getCore()->getInput();
+    input->addEventListener(this, InputEvent::EVENT_KEYDOWN);
 }
 }
 
 
 void EntityEditorMainView::setEditorMode(int newMode) {
 void EntityEditorMainView::setEditorMode(int newMode) {
@@ -536,7 +537,31 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         return;
         return;
         
         
     }
     }
+}
+
+void EntityEditorMainView::deleteSelected() {
 
 
+    for(int i=0; i < selectedEntities.size(); i++) {
+        selectedEntities[i]->getParentEntity()->removeChild(selectedEntities[i]);
+    }
+    
+    for(int i=0; i < selectedEntities.size(); i++) {
+        selectedEntities[i]->setOwnsChildrenRecursive(true);
+        for(int j=0; j < icons.size(); j++) {
+            if(icons[j]->getUserData() == selectedEntities[i]) {
+                delete icons[j];
+                icons[j]->getParentEntity()->removeChild(icons[j]);
+                icons.erase(icons.begin()+j);
+                break;
+            }
+        }
+        selectedEntities[i]->removeAllHandlers();
+        delete selectedEntities[i];
+    }
+    
+    selectedEntities.clear();
+    transformGizmo->setTransformSelection(selectedEntities);
+    dispatchEvent(new Event(), Event::CHANGE_EVENT);
 }
 }
 
 
 void EntityEditorMainView::handleEvent(Event *event) {
 void EntityEditorMainView::handleEvent(Event *event) {
@@ -608,11 +633,20 @@ void EntityEditorMainView::handleEvent(Event *event) {
         addEntityMenu->addOption("Add Empty", "add_empty");
         addEntityMenu->addOption("Add Empty", "add_empty");
         addEntityMenu->fitToScreenVertical();
         addEntityMenu->fitToScreenVertical();
         addEntityMenu->addEventListener(this, UIEvent::OK_EVENT);
         addEntityMenu->addEventListener(this, UIEvent::OK_EVENT);
+    } else if(event->getDispatcher() == input) {
+        InputEvent *inputEvent = (InputEvent*) event;
+        if(event->getEventCode() == InputEvent::EVENT_KEYDOWN) {
+            switch(inputEvent->key) {
+                case KEY_BACKSPACE:
+                case KEY_DELETE:
+                    deleteSelected();
+                break;
+            }
+        }
     } else {
     } else {
         if(event->getEventCode() == InputEvent::EVENT_MOUSEDOWN ) {
         if(event->getEventCode() == InputEvent::EVENT_MOUSEDOWN ) {
             InputEvent *inputEvent = (InputEvent*) event;
             InputEvent *inputEvent = (InputEvent*) event;
 
 
-            CoreInput *input = CoreServices::getInstance()->getCore()->getInput();
             if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2) {
             if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2) {
                 Entity* targetEntity = (Entity*) event->getDispatcher();
                 Entity* targetEntity = (Entity*) event->getDispatcher();
                 
                 
@@ -892,8 +926,8 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         ObjectEntry *labelEntry = entry->addChild("SceneLabel");
         ObjectEntry *labelEntry = entry->addChild("SceneLabel");
         labelEntry->addChild("text", label->getText());
         labelEntry->addChild("text", label->getText());
         labelEntry->addChild("font", label->getLabel()->getFont()->getFontName());
         labelEntry->addChild("font", label->getLabel()->getFont()->getFontName());
-        labelEntry->addChild("size", (int)label->getLabel()->getSize());
-        labelEntry->addChild("actualHeight", (int)label->getLabelActualHeight());
+        labelEntry->addChild("size", (Number)label->getLabel()->getSize());
+        labelEntry->addChild("actualHeight", label->getLabelActualHeight());
         labelEntry->addChild("aaMode", (int)label->getLabel()->getAntialiasMode());
         labelEntry->addChild("aaMode", (int)label->getLabel()->getAntialiasMode());
     }
     }