فهرست منبع

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 سال پیش
والد
کامیت
ca05ac1572

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

@@ -176,7 +176,9 @@ namespace Polycode {
 		Matrix4 getProjectionMatrix();
 		Matrix4 getModelviewMatrix();		
 		void setModelviewMatrix(Matrix4 m);	
-		void multModelviewMatrix(Matrix4 m);		
+		void multModelviewMatrix(Matrix4 m);
+		
+        void setWireframePolygonMode(bool val);
 		
 		void enableDepthTest(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 drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) = 0;
 		
-		void setRenderMode(int newRenderMode);
-		int getRenderMode();
-		
 		virtual void enableDepthTest(bool val) = 0;
 		virtual void enableDepthWrite(bool val) = 0;
+        virtual void setWireframePolygonMode(bool val) = 0;
 		
 		void billboardMatrix();
 		void billboardMatrixWithScale(Vector3 scale);
@@ -262,9 +260,6 @@ namespace Polycode {
 				
 		virtual Matrix4 getProjectionMatrix() = 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_NORMAL = 1;
@@ -342,7 +337,6 @@ namespace Polycode {
 		Material *currentMaterial;
 		
 		int textureFilteringMode;
-		int renderMode;
 		
 		Matrix4 cameraMatrix;
 	

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

@@ -534,12 +534,12 @@ void Entity::transformAndRender() {
 	renderer->setBlendingMode(blendingMode);
 	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) {
 		renderer->pushMatrix();		
 		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)) {
 		renderChildren();	
 	}
-		
 				
-	renderer->setRenderMode(mode);	
 	renderer->popMatrix();
     renderer->popVertexColor();
 	

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

@@ -383,40 +383,17 @@ void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuff
 	glEnableVertexAttribArrayARB(6);	
 	glVertexAttribPointer(6, 3, GL_FLOAT, 0, 0,  (char *)NULL);
 	
-	
-	
 	GLenum mode = GL_TRIANGLES;
 	
 	switch(buffer->meshType) {
 		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;
 		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;
 		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;
 		case Mesh::LINE_STRIP_MESH:
 			mode = GL_LINE_STRIP;
@@ -829,17 +806,13 @@ void OpenGLRenderer::setTexture(Texture *texture) {
 		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;
 }
@@ -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) {
 	
 	GLenum mode = GL_TRIANGLES;
 	
 	switch(drawType) {
 		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;
 		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;
 		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;
 		case Mesh::LINE_STRIP_MESH:
 			mode = GL_LINE_STRIP;

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

@@ -25,7 +25,7 @@
 
 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;
 	textureFilteringMode = TEX_FILTERING_LINEAR;
 	currentMaterial = NULL;
@@ -271,18 +271,10 @@ void Renderer::setClearColor(Color color) {
 	setClearColor(color.r, color.g, color.b, color.a);
 }
 
-void Renderer::setRenderMode(int newRenderMode) {
-	renderMode = newRenderMode;
-}
-
 void Renderer::setTextureFilteringMode(int mode) {
 	textureFilteringMode = mode;
 }
 
-int Renderer::getRenderMode() {
-	return renderMode;
-}
-
 void Renderer::setFOV(Number fov) {
 	this->fov = fov;
 	resetViewport();

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

@@ -326,7 +326,7 @@ void SceneMesh::Render() {
 	if(overlayWireframe) {
 		bool depthTestVal = depthTest;
 		renderer->enableDepthTest(false);
-		renderer->setRenderMode(Renderer::RENDER_MODE_WIREFRAME);
+		renderer->setWireframePolygonMode(true);
 		renderer->setVertexColor(wireFrameColor.r, wireFrameColor.g, wireFrameColor.b, wireFrameColor.a);
 		
 		if(useVertexBuffer) {
@@ -335,7 +335,7 @@ void SceneMesh::Render() {
 			renderMeshLocally();
 		}
 		renderer->enableDepthTest(depthTestVal);		
-		renderer->setRenderMode(Renderer::RENDER_MODE_NORMAL);		
+		renderer->setWireframePolygonMode(false);
 	}	
 	
 	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();
 			
-			void handleEvent(Event *event);			
+            void setEditorProps(Entity *entity);
+    
+			void handleEvent(Event *event);
 			void Resize(Number width, Number height);
 			void Update();
+    
+            void addEntityFromMenu(String command);
 			
-		protected:		
+		protected:
 			
 			Entity *sideBar;
-			UIRect *headerBg;	
-			
+			UIRect *headerBg;
+				
 			std::vector<Entity*> selectedEntities;
 			
 			Scene *mainScene;
+            Entity *sceneObjectRoot;
+    
 			SceneRenderTexture *renderTexture;
 			UIRect *renderTextureShape;	
 
 			TransformGizmo *transformGizmo;
 			TransformGizmoMenu *transformGizmoMenu;
 			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);
 				
 			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);                
 			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 "PolycodeFrame.h"
+
+extern UIGlobalMenu *globalMenu;
+extern PolycodeFrame *globalFrame;
 
 EntityEditorMainView::EntityEditorMainView() {
 	processInputEvents = true;
@@ -54,47 +58,121 @@ EntityEditorMainView::EntityEditorMainView() {
 
 	grid = new EditorGrid();
 	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());
 	mainScene->addChild(transformGizmo);		
 	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);
 	sideBar->addChild(transformGizmoMenu);
-
+    transformGizmoMenu->setPositionX(40);
+    
 }
 
 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) {
 
-	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() {

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

@@ -811,6 +811,8 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	holderBar->visible = true;
 	holderBar->enabled = true;
 
+    activeEditorHolder = this;
+    
 	PolycodeEditor *mainHolderEditor = mainHolder->getEditor();
 		
 	if(firstChildHolder) {
@@ -827,8 +829,6 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 		}
 	}
 	
-	setActive(true);
-	
 	if(vSizer) {
 		removeChild(vSizer);
 		delete vSizer;
@@ -845,6 +845,7 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 	vSizer = NULL;
 	hSizer = NULL;
 	
+	setActive(true);    
 	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");
 	} else if(extension == "vert" || extension == "frag") {
 		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->billboardMode = true;
 	addChild(centerCircle);
+    centerCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 		
 	trasnformDecorators = new Entity();
 	addChild(trasnformDecorators);
@@ -92,6 +93,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	yLine->getMesh()->dirtyArrays();
 	yLine->depthTest = false;
 	yLine->setColor(0.0, 1.0, 0.0, 1.0);
+    yLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(yLine);
 
 	SceneMesh *xLine = new SceneMesh(Mesh::LINE_MESH);	
@@ -102,6 +104,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	xLine->getMesh()->dirtyArrays();
 	xLine->depthTest = false;
 	xLine->setColor(1.0, 0.0, 0.0, 1.0);
+    xLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(xLine);
 
 	SceneMesh *zLine = new SceneMesh(Mesh::LINE_MESH);	
@@ -112,6 +115,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	zLine->getMesh()->dirtyArrays();
 	zLine->depthTest = false;
 	zLine->setColor(0.0, 0.0, 1.0, 1.0);
+    zLine->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 	transformAndScaleLines->addChild(zLine);
 	
 	// MOVE
@@ -166,6 +170,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	bgCircle->depthTest = false;
 	bgCircle->billboardMode = true;
 	rotateDectorators->addChild(bgCircle);
+    bgCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
 
 	ScenePrimitive *outerCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 2.0, 2.0, 32);
 	outerCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
@@ -173,7 +178,8 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	outerCircle->depthTest = false;
 	outerCircle->billboardMode = true;
 	rotateDectorators->addChild(outerCircle);
-	
+    outerCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *pitchCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.55, 1.55, 32);
 	pitchCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	pitchCircle->setColor(1.0, 0.0, 0.0, 1.0);
@@ -181,7 +187,8 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	pitchCircle->Yaw(90);	
 	rotateDectorators->addChild(pitchCircle);
 	pitchCircle->setMaterialByName("OneSidedLine");
-
+    pitchCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *yawCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.65, 1.65, 32);
 	yawCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	yawCircle->setColor(0.0, 1.0, 0.0, 1.0);
@@ -189,14 +196,16 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	yawCircle->Pitch(90);
 	rotateDectorators->addChild(yawCircle);
 	yawCircle->setMaterialByName("OneSidedLine");
-	
+    yawCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	ScenePrimitive *rollCircle = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 1.6, 1.6, 32);
 	rollCircle->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
 	rollCircle->setColor(0.0, 0.0, 1.0, 1.0);
 	rollCircle->depthTest = false;
 	rotateDectorators->addChild(rollCircle);
 	rollCircle->setMaterialByName("OneSidedLine");
-		
+    rollCircle->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
+    
 	pitchCircle->lineWidth = 2.0;	
 	yawCircle->lineWidth = 2.0;
 	rollCircle->lineWidth = 2.0;		

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

@@ -37,6 +37,8 @@ namespace Polycode {
 			virtual ~UIMenuItem();
 
 			virtual bool isSelectable();
+        
+            String getMenuItemID();
 			
 			/**
 			 * 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;
 }
 
+String UIMenuItem::getMenuItemID() {
+    return _id;
+}
+
 UIMenuItem::UIMenuItem() : UIElement(), data(NULL), itemLabel(NULL) {
 }
 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است