Просмотр исходного кода

Removed old setRenderMode setting from Renderer in favor of setWireframePolygonMode, added abiliy to add meshes and primitives to 3d entity editor, added mesh icon to asset browser

Ivan Safrin 12 лет назад
Родитель
Сommit
ca05ac1572

+ 3 - 1
Core/Contents/Include/PolyGLRenderer.h

@@ -176,7 +176,9 @@ namespace Polycode {
 		Matrix4 getProjectionMatrix();
 		Matrix4 getProjectionMatrix();
 		Matrix4 getModelviewMatrix();		
 		Matrix4 getModelviewMatrix();		
 		void setModelviewMatrix(Matrix4 m);	
 		void setModelviewMatrix(Matrix4 m);	
-		void multModelviewMatrix(Matrix4 m);		
+		void multModelviewMatrix(Matrix4 m);
+		
+        void setWireframePolygonMode(bool val);
 		
 		
 		void enableDepthTest(bool val);
 		void enableDepthTest(bool val);
 		void enableDepthWrite(bool val);
 		void enableDepthWrite(bool val);

+ 1 - 7
Core/Contents/Include/PolyRenderer.h

@@ -179,11 +179,9 @@ namespace Polycode {
 		virtual void createVertexBufferForMesh(Mesh *mesh) = 0;
 		virtual void createVertexBufferForMesh(Mesh *mesh) = 0;
 		virtual void drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) = 0;
 		virtual void drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) = 0;
 		
 		
-		void setRenderMode(int newRenderMode);
-		int getRenderMode();
-		
 		virtual void enableDepthTest(bool val) = 0;
 		virtual void enableDepthTest(bool val) = 0;
 		virtual void enableDepthWrite(bool val) = 0;
 		virtual void enableDepthWrite(bool val) = 0;
+        virtual void setWireframePolygonMode(bool val) = 0;
 		
 		
 		void billboardMatrix();
 		void billboardMatrix();
 		void billboardMatrixWithScale(Vector3 scale);
 		void billboardMatrixWithScale(Vector3 scale);
@@ -262,9 +260,6 @@ namespace Polycode {
 				
 				
 		virtual Matrix4 getProjectionMatrix() = 0;
 		virtual Matrix4 getProjectionMatrix() = 0;
 		virtual Matrix4 getModelviewMatrix() = 0;
 		virtual Matrix4 getModelviewMatrix() = 0;
-		
-		static const int RENDER_MODE_NORMAL = 0;
-		static const int RENDER_MODE_WIREFRAME = 1;
 
 
         static const int BLEND_MODE_NONE = 0;
         static const int BLEND_MODE_NONE = 0;
 		static const int BLEND_MODE_NORMAL = 1;
 		static const int BLEND_MODE_NORMAL = 1;
@@ -342,7 +337,6 @@ namespace Polycode {
 		Material *currentMaterial;
 		Material *currentMaterial;
 		
 		
 		int textureFilteringMode;
 		int textureFilteringMode;
-		int renderMode;
 		
 		
 		Matrix4 cameraMatrix;
 		Matrix4 cameraMatrix;
 	
 	

+ 6 - 8
Core/Contents/Source/PolyEntity.cpp

@@ -534,12 +534,12 @@ void Entity::transformAndRender() {
 	renderer->setBlendingMode(blendingMode);
 	renderer->setBlendingMode(blendingMode);
 	renderer->enableBackfaceCulling(backfaceCulled);
 	renderer->enableBackfaceCulling(backfaceCulled);
 	
 	
-	int mode = renderer->getRenderMode();
-	if(renderWireframe)
-		renderer->setRenderMode(Renderer::RENDER_MODE_WIREFRAME);
-	else
-		renderer->setRenderMode(Renderer::RENDER_MODE_NORMAL);	
-				
+	if(renderWireframe) {
+		renderer->setWireframePolygonMode(true);
+	} else {
+		renderer->setWireframePolygonMode(false);
+    }
+    
 	if(visible) {
 	if(visible) {
 		renderer->pushMatrix();		
 		renderer->pushMatrix();		
 		renderer->translate3D(-anchorPoint.x * bBox.x * 0.5, -anchorPoint.y * bBox.y * 0.5 * yAdjust, -anchorPoint.z * bBox.z * 0.5);
 		renderer->translate3D(-anchorPoint.x * bBox.x * 0.5, -anchorPoint.y * bBox.y * 0.5 * yAdjust, -anchorPoint.z * bBox.z * 0.5);
@@ -550,9 +550,7 @@ void Entity::transformAndRender() {
 	if(visible || (!visible && !visibilityAffectsChildren)) {
 	if(visible || (!visible && !visibilityAffectsChildren)) {
 		renderChildren();	
 		renderChildren();	
 	}
 	}
-		
 				
 				
-	renderer->setRenderMode(mode);	
 	renderer->popMatrix();
 	renderer->popMatrix();
     renderer->popVertexColor();
     renderer->popVertexColor();
 	
 	

+ 21 - 61
Core/Contents/Source/PolyGLRenderer.cpp

@@ -383,40 +383,17 @@ void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuff
 	glEnableVertexAttribArrayARB(6);	
 	glEnableVertexAttribArrayARB(6);	
 	glVertexAttribPointer(6, 3, GL_FLOAT, 0, 0,  (char *)NULL);
 	glVertexAttribPointer(6, 3, GL_FLOAT, 0, 0,  (char *)NULL);
 	
 	
-	
-	
 	GLenum mode = GL_TRIANGLES;
 	GLenum mode = GL_TRIANGLES;
 	
 	
 	switch(buffer->meshType) {
 	switch(buffer->meshType) {
 		case Mesh::TRI_MESH:
 		case Mesh::TRI_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_TRIANGLES;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_TRIANGLES;
 			break;
 			break;
 		case Mesh::TRIFAN_MESH:
 		case Mesh::TRIFAN_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_TRIANGLE_FAN;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_TRIANGLE_FAN;
 			break;
 			break;
 		case Mesh::QUAD_MESH:
 		case Mesh::QUAD_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_QUADS;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_QUADS;
 			break;
 			break;
 		case Mesh::LINE_STRIP_MESH:
 		case Mesh::LINE_STRIP_MESH:
 			mode = GL_LINE_STRIP;
 			mode = GL_LINE_STRIP;
@@ -829,17 +806,13 @@ void OpenGLRenderer::setTexture(Texture *texture) {
 		return;
 		return;
 	}
 	}
 	
 	
-	if(renderMode == RENDER_MODE_NORMAL) {
-		glActiveTexture(GL_TEXTURE0);	
-		glEnable (GL_TEXTURE_2D);
-				
-		if(currentTexture != texture) {			
-			OpenGLTexture *glTexture = (OpenGLTexture*)texture;
-			glBindTexture (GL_TEXTURE_2D, glTexture->getTextureID());
-		}
-	} else {
-		glDisable(GL_TEXTURE_2D);
-	}
+    glActiveTexture(GL_TEXTURE0);
+    glEnable (GL_TEXTURE_2D);
+            
+    if(currentTexture != texture) {			
+        OpenGLTexture *glTexture = (OpenGLTexture*)texture;
+        glBindTexture (GL_TEXTURE_2D, glTexture->getTextureID());
+    }
 	
 	
 	currentTexture = texture;
 	currentTexture = texture;
 }
 }
@@ -1025,40 +998,27 @@ void OpenGLRenderer::setRenderArrayData(RenderDataArray *array, Number *arrayDat
 	
 	
 }
 }
 
 
+void OpenGLRenderer::setWireframePolygonMode(bool val) {
+    if(val) {
+        glPolygonMode( GL_FRONT_AND_BACK, GL_LINE);
+    } else {
+        glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
+    }
+}
+
 void OpenGLRenderer::drawArrays(int drawType) {
 void OpenGLRenderer::drawArrays(int drawType) {
 	
 	
 	GLenum mode = GL_TRIANGLES;
 	GLenum mode = GL_TRIANGLES;
 	
 	
 	switch(drawType) {
 	switch(drawType) {
 		case Mesh::TRI_MESH:
 		case Mesh::TRI_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_TRIANGLES;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_TRIANGLES;
 			break;
 			break;
 		case Mesh::TRIFAN_MESH:
 		case Mesh::TRIFAN_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_TRIANGLE_FAN;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_TRIANGLE_FAN;
 			break;
 			break;
 		case Mesh::QUAD_MESH:
 		case Mesh::QUAD_MESH:
-			switch(renderMode) {
-				case RENDER_MODE_NORMAL:
-					mode = GL_QUADS;
-					break;
-				case RENDER_MODE_WIREFRAME:
-					mode = GL_LINE_LOOP;
-					break;
-			}
+            mode = GL_QUADS;
 			break;
 			break;
 		case Mesh::LINE_STRIP_MESH:
 		case Mesh::LINE_STRIP_MESH:
 			mode = GL_LINE_STRIP;
 			mode = GL_LINE_STRIP;

+ 1 - 9
Core/Contents/Source/PolyRenderer.cpp

@@ -25,7 +25,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-Renderer::Renderer() : clearColor(0.2f, 0.2f, 0.2f, 0.0), currentTexture(NULL), renderMode(0), lightingEnabled(false), orthoMode(false), xRes(0), yRes(0) {
+Renderer::Renderer() : clearColor(0.2f, 0.2f, 0.2f, 0.0), currentTexture(NULL), lightingEnabled(false), orthoMode(false), xRes(0), yRes(0) {
 	anisotropy = 0;
 	anisotropy = 0;
 	textureFilteringMode = TEX_FILTERING_LINEAR;
 	textureFilteringMode = TEX_FILTERING_LINEAR;
 	currentMaterial = NULL;
 	currentMaterial = NULL;
@@ -271,18 +271,10 @@ void Renderer::setClearColor(Color color) {
 	setClearColor(color.r, color.g, color.b, color.a);
 	setClearColor(color.r, color.g, color.b, color.a);
 }
 }
 
 
-void Renderer::setRenderMode(int newRenderMode) {
-	renderMode = newRenderMode;
-}
-
 void Renderer::setTextureFilteringMode(int mode) {
 void Renderer::setTextureFilteringMode(int mode) {
 	textureFilteringMode = mode;
 	textureFilteringMode = mode;
 }
 }
 
 
-int Renderer::getRenderMode() {
-	return renderMode;
-}
-
 void Renderer::setFOV(Number fov) {
 void Renderer::setFOV(Number fov) {
 	this->fov = fov;
 	this->fov = fov;
 	resetViewport();
 	resetViewport();

+ 2 - 2
Core/Contents/Source/PolySceneMesh.cpp

@@ -326,7 +326,7 @@ void SceneMesh::Render() {
 	if(overlayWireframe) {
 	if(overlayWireframe) {
 		bool depthTestVal = depthTest;
 		bool depthTestVal = depthTest;
 		renderer->enableDepthTest(false);
 		renderer->enableDepthTest(false);
-		renderer->setRenderMode(Renderer::RENDER_MODE_WIREFRAME);
+		renderer->setWireframePolygonMode(true);
 		renderer->setVertexColor(wireFrameColor.r, wireFrameColor.g, wireFrameColor.b, wireFrameColor.a);
 		renderer->setVertexColor(wireFrameColor.r, wireFrameColor.g, wireFrameColor.b, wireFrameColor.a);
 		
 		
 		if(useVertexBuffer) {
 		if(useVertexBuffer) {
@@ -335,7 +335,7 @@ void SceneMesh::Render() {
 			renderMeshLocally();
 			renderMeshLocally();
 		}
 		}
 		renderer->enableDepthTest(depthTestVal);		
 		renderer->enableDepthTest(depthTestVal);		
-		renderer->setRenderMode(Renderer::RENDER_MODE_NORMAL);		
+		renderer->setWireframePolygonMode(false);
 	}	
 	}	
 	
 	
 	if(material) 
 	if(material) 

Разница между файлами не показана из-за своего большого размера
+ 3 - 3
IDE/Assets/ide_icons.ai


+ 19 - 5
IDE/Contents/Include/PolycodeEntityEditor.h

@@ -39,25 +39,39 @@ class EntityEditorMainView : public UIElement {
 			EntityEditorMainView();
 			EntityEditorMainView();
 			~EntityEditorMainView();
 			~EntityEditorMainView();
 			
 			
-			void handleEvent(Event *event);			
+            void setEditorProps(Entity *entity);
+    
+			void handleEvent(Event *event);
 			void Resize(Number width, Number height);
 			void Resize(Number width, Number height);
 			void Update();
 			void Update();
+    
+            void addEntityFromMenu(String command);
 			
 			
-		protected:		
+		protected:
 			
 			
 			Entity *sideBar;
 			Entity *sideBar;
-			UIRect *headerBg;	
-			
+			UIRect *headerBg;
+				
 			std::vector<Entity*> selectedEntities;
 			std::vector<Entity*> selectedEntities;
 			
 			
 			Scene *mainScene;
 			Scene *mainScene;
+            Entity *sceneObjectRoot;
+    
 			SceneRenderTexture *renderTexture;
 			SceneRenderTexture *renderTexture;
 			UIRect *renderTextureShape;	
 			UIRect *renderTextureShape;	
 
 
 			TransformGizmo *transformGizmo;
 			TransformGizmo *transformGizmo;
 			TransformGizmoMenu *transformGizmoMenu;
 			TransformGizmoMenu *transformGizmoMenu;
 			TrackballCamera *trackballCamera;
 			TrackballCamera *trackballCamera;
-			EditorGrid *grid;			
+			EditorGrid *grid;
+    
+            UIImageButton *addEntityButton;
+            UIMenu *addEntityMenu;
+    
+            Vector3 cursorPosition;
+    
+            String assetSelectType;
+    
 };
 };
 
 
 
 

BIN
IDE/Contents/Resources/Images/browserIcons/mesh_icon.png


BIN
IDE/Contents/Resources/Images/entityEditor/add_entity.png


BIN
IDE/Contents/Resources/ImagesRetina/browserIcons/mesh_icon.png


BIN
IDE/Contents/Resources/ImagesRetina/entityEditor/add_entity.png


+ 2 - 1
IDE/Contents/Source/EditorGrid.cpp

@@ -50,7 +50,8 @@ void EditorGrid::setGrid(int gridSize) {
 			gridMesh->addPolygon(gridPoly);
 			gridMesh->addPolygon(gridPoly);
 				
 				
 			grid = new SceneMesh(gridMesh);
 			grid = new SceneMesh(gridMesh);
-			grid->setColor(1.0, 1.0, 1.0, 0.1);
+			grid->setColor(0.3, 0.3, 0.3, 1.0);
+            grid->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 			addChild(grid);                
 			addChild(grid);                
 			grid->setPosition(-gridSize * gridLen * 0.5, -gridSize * gridLen * 0.5);
 			grid->setPosition(-gridSize * gridLen * 0.5, -gridSize * gridLen * 0.5);
 	}
 	}

+ 104 - 26
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -21,6 +21,10 @@
  */
  */
  
  
 #include "PolycodeEntityEditor.h"
 #include "PolycodeEntityEditor.h"
+#include "PolycodeFrame.h"
+
+extern UIGlobalMenu *globalMenu;
+extern PolycodeFrame *globalFrame;
 
 
 EntityEditorMainView::EntityEditorMainView() {
 EntityEditorMainView::EntityEditorMainView() {
 	processInputEvents = true;
 	processInputEvents = true;
@@ -54,47 +58,121 @@ EntityEditorMainView::EntityEditorMainView() {
 
 
 	grid = new EditorGrid();
 	grid = new EditorGrid();
 	mainScene->addChild(grid);
 	mainScene->addChild(grid);
-			
-	// TEMPORARY!	
-	
-	ScenePrimitive  *testCube = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 3.0, 1.0, 1.0);
-	testCube->processInputEvents = true;
-	testCube->setColor(0.5, 0.5, 0.5, 1.0);
-//	testCube->setPosition(5, 7, 2);
-	mainScene->addChild(testCube);
-	testCube->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
-	testCube->wireFrameColor = Color(1.0, 0.8, 0.3, 1.0);
 	
 	
+    sceneObjectRoot = new Entity();
+    sceneObjectRoot->processInputEvents = true;
+    mainScene->addChild(sceneObjectRoot);
+    
 	transformGizmo = new TransformGizmo(mainScene, mainScene->getDefaultCamera());
 	transformGizmo = new TransformGizmo(mainScene, mainScene->getDefaultCamera());
 	mainScene->addChild(transformGizmo);		
 	mainScene->addChild(transformGizmo);		
 	trackballCamera = new TrackballCamera(mainScene->getDefaultCamera(), renderTextureShape);
 	trackballCamera = new TrackballCamera(mainScene->getDefaultCamera(), renderTextureShape);
 	
 	
+    addEntityButton = new UIImageButton("entityEditor/add_entity.png", 1.0, 24, 24);
+	sideBar->addChild(addEntityButton);
+    addEntityButton->setPosition(4, 2);
+    addEntityButton->addEventListener(this, UIEvent::CLICK_EVENT);
+    
 	transformGizmoMenu = new TransformGizmoMenu(transformGizmo);
 	transformGizmoMenu = new TransformGizmoMenu(transformGizmo);
 	sideBar->addChild(transformGizmoMenu);
 	sideBar->addChild(transformGizmoMenu);
-
+    transformGizmoMenu->setPositionX(40);
+    
 }
 }
 
 
 void EntityEditorMainView::Update() {
 void EntityEditorMainView::Update() {
 }
 }
 
 
+void EntityEditorMainView::setEditorProps(Entity *entity) {
+    entity->processInputEvents = true;
+    entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
+    
+    SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(entity);
+    if(sceneMesh) {
+        sceneMesh->wireFrameColor = Color(1.0, 0.8, 0.3, 1.0);
+        sceneMesh->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    }
+}
+
+void EntityEditorMainView::addEntityFromMenu(String command) {
+
+    if(command == "add_primitive") {
+        ScenePrimitive  *newPrimitive = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 1.0, 1.0, 1.0);
+        sceneObjectRoot->addChild(newPrimitive);
+        setEditorProps(newPrimitive);
+        newPrimitive->setPosition(cursorPosition);
+        return;
+    }
+
+    if(command == "add_mesh") {
+        assetSelectType = "mesh";
+        globalFrame->assetBrowser->addEventListener(this, UIEvent::OK_EVENT);
+        std::vector<String> extensions;
+        extensions.push_back("mesh");
+        globalFrame->showAssetBrowser(extensions);
+        return;
+    }
+
+}
+
 void EntityEditorMainView::handleEvent(Event *event) {
 void EntityEditorMainView::handleEvent(Event *event) {
 
 
-	if(event->getEventCode() == InputEvent::EVENT_MOUSEDOWN ) {
-		InputEvent *inputEvent = (InputEvent*) event;
+    if(event->getDispatcher() == globalFrame->assetBrowser) {
+        if(event->getEventCode() == UIEvent::OK_EVENT) {
+            if(assetSelectType == "mesh") {
+                SceneMesh *newMesh = new SceneMesh(globalFrame->assetBrowser->getFullSelectedAssetPath());
+                sceneObjectRoot->addChild(newMesh);
+                setEditorProps(newMesh);
+                newMesh->setPosition(cursorPosition);
+            }
+            
+            globalFrame->assetBrowser->removeAllHandlersForListener(this);
+            globalFrame->hideModal();
+        }
+        
+    } else if(event->getDispatcher() == addEntityMenu) {
+        addEntityMenu->removeAllHandlersForListener(this);
+        String command = addEntityMenu->getSelectedItem()->getMenuItemID();
+        addEntityFromMenu(command);
+    } else if(event->getDispatcher() == addEntityButton) {
+        addEntityMenu = globalMenu->showMenuAtMouse(150);
+        addEntityMenu->addOption("Add Primitive", "add_primitive");
+        addEntityMenu->addOption("Add Mesh", "add_mesh");
+        addEntityMenu->addOption("Add Entity", "add_entity");
+        addEntityMenu->addOption("Add Sprite", "add_sprite");
+        addEntityMenu->addOption("Add Label", "add_label");
+        addEntityMenu->addDivider();
+        addEntityMenu->addOption("Add Light", "add_light");
+        addEntityMenu->addOption("Add Particle System", "add_particles");
+        addEntityMenu->addOption("Add Sound", "add_sound");
+        addEntityMenu->addOption("Add Camera", "add_camera");
+        addEntityMenu->addDivider();
+        addEntityMenu->addOption("Add Empty", "add_empty");
+        addEntityMenu->fitToScreenVertical();
+        addEntityMenu->addEventListener(this, UIEvent::OK_EVENT);
+    } else {
+        if(event->getEventCode() == InputEvent::EVENT_MOUSEDOWN ) {
+            InputEvent *inputEvent = (InputEvent*) event;
 
 
-		if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2) {
-			Entity* targetEntity = (Entity*) event->getDispatcher();
-			
-			selectedEntities.clear();			
-			selectedEntities.push_back(targetEntity);
-			transformGizmo->setTransformSelection(selectedEntities);
-							
-			SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(targetEntity);
-			if(sceneMesh) {
-				sceneMesh->overlayWireframe = true;
-			}
-		}
-	}
+            if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2) {
+                Entity* targetEntity = (Entity*) event->getDispatcher();
+                
+                for(int i=0; i < selectedEntities.size(); i++) {
+                    SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(selectedEntities[i]);
+                    if(sceneMesh) {
+                        sceneMesh->overlayWireframe = false;
+                    }
+                }
+                
+                selectedEntities.clear();			
+                selectedEntities.push_back(targetEntity);
+                transformGizmo->setTransformSelection(selectedEntities);
+                                
+                SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(targetEntity);
+                if(sceneMesh) {
+                    sceneMesh->overlayWireframe = true;
+                }
+            }
+        }
+    }
 }
 }
 
 
 EntityEditorMainView::~EntityEditorMainView() {
 EntityEditorMainView::~EntityEditorMainView() {

+ 3 - 2
IDE/Contents/Source/PolycodeFrame.cpp

@@ -811,6 +811,8 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	holderBar->visible = true;
 	holderBar->visible = true;
 	holderBar->enabled = true;
 	holderBar->enabled = true;
 
 
+    activeEditorHolder = this;
+    
 	PolycodeEditor *mainHolderEditor = mainHolder->getEditor();
 	PolycodeEditor *mainHolderEditor = mainHolder->getEditor();
 		
 		
 	if(firstChildHolder) {
 	if(firstChildHolder) {
@@ -827,8 +829,6 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 		}
 		}
 	}
 	}
 	
 	
-	setActive(true);
-	
 	if(vSizer) {
 	if(vSizer) {
 		removeChild(vSizer);
 		removeChild(vSizer);
 		delete vSizer;
 		delete vSizer;
@@ -845,6 +845,7 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	vSizer = NULL;
 	vSizer = NULL;
 	hSizer = NULL;
 	hSizer = NULL;
 	
 	
+	setActive(true);    
 	setEditor(mainHolderEditor);
 	setEditor(mainHolderEditor);
 }
 }
 
 

+ 2 - 0
IDE/Contents/Source/TextureBrowser.cpp

@@ -56,6 +56,8 @@ AssetEntry::AssetEntry(String assetPath, String assetName, String extension) : U
 		imageShape->loadTexture("browserIcons/font_icon.png");
 		imageShape->loadTexture("browserIcons/font_icon.png");
 	} else if(extension == "vert" || extension == "frag") {
 	} else if(extension == "vert" || extension == "frag") {
 		imageShape->loadTexture("browserIcons/shader_icon.png");
 		imageShape->loadTexture("browserIcons/shader_icon.png");
+	} else if(extension == "mesh") {
+		imageShape->loadTexture("browserIcons/mesh_icon.png");
 	}
 	}
 
 
 	
 	

+ 13 - 4
IDE/Contents/Source/TransformGizmo.cpp

@@ -70,6 +70,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	centerCircle->depthTest = false;
 	centerCircle->depthTest = false;
 	centerCircle->billboardMode = true;
 	centerCircle->billboardMode = true;
 	addChild(centerCircle);
 	addChild(centerCircle);
+    centerCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 		
 		
 	trasnformDecorators = new Entity();
 	trasnformDecorators = new Entity();
 	addChild(trasnformDecorators);
 	addChild(trasnformDecorators);
@@ -92,6 +93,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	yLine->getMesh()->dirtyArrays();
 	yLine->getMesh()->dirtyArrays();
 	yLine->depthTest = false;
 	yLine->depthTest = false;
 	yLine->setColor(0.0, 1.0, 0.0, 1.0);
 	yLine->setColor(0.0, 1.0, 0.0, 1.0);
+    yLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(yLine);
 	transformAndScaleLines->addChild(yLine);
 
 
 	SceneMesh *xLine = new SceneMesh(Mesh::LINE_MESH);	
 	SceneMesh *xLine = new SceneMesh(Mesh::LINE_MESH);	
@@ -102,6 +104,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	xLine->getMesh()->dirtyArrays();
 	xLine->getMesh()->dirtyArrays();
 	xLine->depthTest = false;
 	xLine->depthTest = false;
 	xLine->setColor(1.0, 0.0, 0.0, 1.0);
 	xLine->setColor(1.0, 0.0, 0.0, 1.0);
+    xLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(xLine);
 	transformAndScaleLines->addChild(xLine);
 
 
 	SceneMesh *zLine = new SceneMesh(Mesh::LINE_MESH);	
 	SceneMesh *zLine = new SceneMesh(Mesh::LINE_MESH);	
@@ -112,6 +115,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	zLine->getMesh()->dirtyArrays();
 	zLine->getMesh()->dirtyArrays();
 	zLine->depthTest = false;
 	zLine->depthTest = false;
 	zLine->setColor(0.0, 0.0, 1.0, 1.0);
 	zLine->setColor(0.0, 0.0, 1.0, 1.0);
+    zLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(zLine);
 	transformAndScaleLines->addChild(zLine);
 	
 	
 	// MOVE
 	// MOVE
@@ -166,6 +170,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	bgCircle->depthTest = false;
 	bgCircle->depthTest = false;
 	bgCircle->billboardMode = true;
 	bgCircle->billboardMode = true;
 	rotateDectorators->addChild(bgCircle);
 	rotateDectorators->addChild(bgCircle);
+    bgCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 
 
 	ScenePrimitive *outerCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 2.0, 2.0, 32);
 	ScenePrimitive *outerCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 2.0, 2.0, 32);
 	outerCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	outerCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
@@ -173,7 +178,8 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	outerCircle->depthTest = false;
 	outerCircle->depthTest = false;
 	outerCircle->billboardMode = true;
 	outerCircle->billboardMode = true;
 	rotateDectorators->addChild(outerCircle);
 	rotateDectorators->addChild(outerCircle);
-	
+    outerCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *pitchCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.55, 1.55, 32);
 	ScenePrimitive *pitchCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.55, 1.55, 32);
 	pitchCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	pitchCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	pitchCircle->setColor(1.0, 0.0, 0.0, 1.0);
 	pitchCircle->setColor(1.0, 0.0, 0.0, 1.0);
@@ -181,7 +187,8 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	pitchCircle->Yaw(90);	
 	pitchCircle->Yaw(90);	
 	rotateDectorators->addChild(pitchCircle);
 	rotateDectorators->addChild(pitchCircle);
 	pitchCircle->setMaterialByName("OneSidedLine");
 	pitchCircle->setMaterialByName("OneSidedLine");
-
+    pitchCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *yawCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.65, 1.65, 32);
 	ScenePrimitive *yawCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.65, 1.65, 32);
 	yawCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	yawCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	yawCircle->setColor(0.0, 1.0, 0.0, 1.0);
 	yawCircle->setColor(0.0, 1.0, 0.0, 1.0);
@@ -189,14 +196,16 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	yawCircle->Pitch(90);
 	yawCircle->Pitch(90);
 	rotateDectorators->addChild(yawCircle);
 	rotateDectorators->addChild(yawCircle);
 	yawCircle->setMaterialByName("OneSidedLine");
 	yawCircle->setMaterialByName("OneSidedLine");
-	
+    yawCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *rollCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.6, 1.6, 32);
 	ScenePrimitive *rollCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.6, 1.6, 32);
 	rollCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	rollCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	rollCircle->setColor(0.0, 0.0, 1.0, 1.0);
 	rollCircle->setColor(0.0, 0.0, 1.0, 1.0);
 	rollCircle->depthTest = false;
 	rollCircle->depthTest = false;
 	rotateDectorators->addChild(rollCircle);
 	rotateDectorators->addChild(rollCircle);
 	rollCircle->setMaterialByName("OneSidedLine");
 	rollCircle->setMaterialByName("OneSidedLine");
-		
+    rollCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	pitchCircle->lineWidth = 2.0;	
 	pitchCircle->lineWidth = 2.0;	
 	yawCircle->lineWidth = 2.0;
 	yawCircle->lineWidth = 2.0;
 	rollCircle->lineWidth = 2.0;		
 	rollCircle->lineWidth = 2.0;		

+ 2 - 0
Modules/Contents/UI/Include/PolyUIMenu.h

@@ -37,6 +37,8 @@ namespace Polycode {
 			virtual ~UIMenuItem();
 			virtual ~UIMenuItem();
 
 
 			virtual bool isSelectable();
 			virtual bool isSelectable();
+        
+            String getMenuItemID();
 			
 			
 			/**
 			/**
 			 * The user-data associated with this entry, as set in UIMenu::addOption()
 			 * The user-data associated with this entry, as set in UIMenu::addOption()

+ 4 - 0
Modules/Contents/UI/Source/PolyUIMenu.cpp

@@ -52,6 +52,10 @@ UIMenuItem::UIMenuItem(String label, String _id, void *data, Number comboWidth,
 	this->data = data;
 	this->data = data;
 }
 }
 
 
+String UIMenuItem::getMenuItemID() {
+    return _id;
+}
+
 UIMenuItem::UIMenuItem() : UIElement(), data(NULL), itemLabel(NULL) {
 UIMenuItem::UIMenuItem() : UIElement(), data(NULL), itemLabel(NULL) {
 }
 }
 
 

Некоторые файлы не были показаны из-за большого количества измененных файлов