Переглянути джерело

Misc fixes for things broken by the new renderer

Ivan Safrin 10 роки тому
батько
коміт
78037076ca

+ 1 - 0
Core/Contents/Include/PolyGPUDrawBuffer.h

@@ -64,6 +64,7 @@ namespace Polycode {
         Texture *targetFramebuffer;
         Matrix4 projectionMatrix;
         Matrix4 viewMatrix;
+        Matrix4 cameraMatrix;
         Color clearColor;
         bool clearDepthBuffer;
         bool clearColorBuffer;

+ 15 - 0
Core/Contents/Include/PolyMatrix4.h

@@ -360,6 +360,21 @@ namespace Polycode {
                 m[3][1] = -((top+bottom)/(top-bottom));
                 m[3][2] = -((zFar+zNear)/(zFar-zNear));
             }
+        
+            inline void setProjectionFrustum(Number left, Number right, Number bottom, Number top, Number zNear, Number zFar) {
+                
+                m[0][0] = (2.0*zNear)/(right-left);
+                m[1][1] = (2.0*zNear)/(top-bottom);
+                m[3][3] = 0.0;
+
+                m[2][0] = (right+left)/(right-left);
+                m[2][1] = (top+bottom)/(top-bottom);
+                m[2][2] = (zFar+zNear)/(zFar-zNear);
+                m[2][3] = -1.0;
+                
+                m[3][2] = (2.0*zFar*zNear)/(zFar-zNear);
+                
+            }
 
             inline void setProjection(Number fov, Number aspect, Number zNear, Number zFar) {
                 

+ 1 - 2
Core/Contents/Include/PolyParticleEmitter.h

@@ -64,9 +64,8 @@ namespace Polycode {
         
             void fixedUpdate();
             void Render(GPUDrawBuffer *buffer);
-        
             void updateParticles();
-            void rebuildParticles();
+            void rebuildParticles(GPUDrawBuffer *buffer);
         
             void triggerParticles(bool allAtOnce);
         

+ 0 - 11
Core/Contents/Include/PolySceneMesh.h

@@ -181,17 +181,6 @@ namespace Polycode {
 			*/ 			
 			bool ownsSkeleton;
 			
-            /**
-             * If set to true, will render the mesh wireframe on top of the mesh using wireFrameColor.
-             * @see wireFrameColor
-             */
-			bool overlayWireframe;
-        
-            /*
-             * If overlayWireframe is set to true, defines the color of the mesh wireframe.
-             */
-			Color wireFrameColor;	
-			
             /**
              * If set to true, will check against actual geometry polygons on ray hit detection. Defaults to false.
              */

+ 1 - 46
Core/Contents/Source/PolyCamera.cpp

@@ -530,8 +530,7 @@ Matrix4 Camera::createProjectionMatrix() {
             retMatrix.setProjection(fov * TORADIANS, (viewport.w/viewport.h), nearClipPlane, farClipPlane);
             break;
         case PERSPECTIVE_FRUSTUM:
-            // TODO
-          //  renderer->setProjectionFromFrustum(leftFrustum, rightFrustum, bottomFrustum, topFrustum, nearClipPlane, farClipPlane);
+            retMatrix.setProjectionFrustum(leftFrustum, rightFrustum, bottomFrustum, topFrustum, nearClipPlane, farClipPlane);
             break;
         case ORTHO_SIZE_MANUAL:
             setOrthoMatrix(retMatrix, orthoSizeX, orthoSizeY, nearClipPlane, farClipPlane, !topLeftOrtho);
@@ -551,48 +550,4 @@ Matrix4 Camera::createProjectionMatrix() {
     }
     
     return retMatrix;
-    
-    // RENDERER_TODO
-	/*
-    viewport = renderer->getViewport();
-
-	switch (projectionMode) {
-		case PERSPECTIVE_FOV:
-			renderer->setViewportShift(cameraShift.x, cameraShift.y);
-			renderer->setProjectionFromFoV(fov, nearClipPlane, farClipPlane);
-		break;
-		case PERSPECTIVE_FRUSTUM:
-			renderer->setProjectionFromFrustum(leftFrustum, rightFrustum, bottomFrustum, topFrustum, nearClipPlane, farClipPlane);
-		break;
-		case ORTHO_SIZE_MANUAL:
-			renderer->setProjectionOrtho(orthoSizeX, orthoSizeY, nearClipPlane, farClipPlane, !topLeftOrtho);
-		break;
-		case ORTHO_SIZE_LOCK_HEIGHT:
-			renderer->setProjectionOrtho(orthoSizeY * (viewport.w/viewport.h), orthoSizeY, nearClipPlane, farClipPlane, !topLeftOrtho);
-		break;
-		case ORTHO_SIZE_LOCK_WIDTH:
-			renderer->setProjectionOrtho(orthoSizeX, orthoSizeX * (viewport.h/viewport.w), nearClipPlane, farClipPlane, !topLeftOrtho);
-		break;
-		case ORTHO_SIZE_VIEWPORT:
-			renderer->setProjectionOrtho(viewport.w / renderer->getBackingResolutionScaleX(), viewport.h / renderer->getBackingResolutionScaleY(), !topLeftOrtho);
-		break;
-		case MANUAL_MATRIX:
-            renderer->setProjectionMatrix(projectionMatrix);
-        break;
-	}
-	renderer->setExposureLevel(exposureLevel);
-
-    if(projectionMode != MANUAL_MATRIX) {
-        projectionMatrix = renderer->getProjectionMatrix();
-    }
-
-	if(matrixDirty) {
-		rebuildTransformMatrix();
-	}
-
-	Matrix4 camMatrix = getConcatenatedMatrix();
-	renderer->setCameraMatrix(camMatrix);	
-	camMatrix = camMatrix.Inverse();
-	renderer->multModelviewMatrix(camMatrix);
-     */
 }

+ 0 - 5
Core/Contents/Source/PolyCocoaCore.mm

@@ -248,9 +248,6 @@ void CocoaCore::handleVideoModeChange(VideoModeChangeInfo *modeInfo) {
 	} else {
 		CGLDisable(ctx, kCGLCESurfaceBackingSize);		
 	}
-    
-        // RENDERER_TODO
-	//renderer->Resize(xRes, yRes);
 
 	if(aaLevel > 0) {
 		glEnable( GL_MULTISAMPLE_ARB );
@@ -307,8 +304,6 @@ String CocoaCore::executeExternalCommand(String command,  String args, String in
 void CocoaCore::resizeTo(int xRes, int yRes) {
 	this->xRes = xRes;
 	this->yRes = yRes;
-    // RENDERER_TODO
-//	renderer->Resize(xRes, yRes);
     coreResized = true;
 }
 

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

@@ -203,7 +203,7 @@ void SceneParticleEmitter::enableParticleSystem(bool val) {
     }
 }
 
-void SceneParticleEmitter::rebuildParticles() {
+void SceneParticleEmitter::rebuildParticles(GPUDrawBuffer *buffer) {
     mesh->clearMesh();
     Matrix4 inverseMatrix = systemTrasnformMatrix.Inverse();
     
@@ -227,8 +227,6 @@ void SceneParticleEmitter::rebuildParticles() {
         case PARTICLE_TYPE_MESH:
         case PARTICLE_TYPE_QUAD:
         {
-            // RENDERER_TODO
-            Matrix4 cameraMatrix;// = renderer->getCameraMatrix();
             Quaternion q;
             
             Color vertexColor;
@@ -290,25 +288,25 @@ void SceneParticleEmitter::rebuildParticles() {
                     
                     Vector3 vertexPosition = Vector3(-finalParticleSize, -finalParticleSize, 0.0);
                     vertexPosition = q.applyTo(vertexPosition);
-                    vertexPosition = cameraMatrix.rotateVector(vertexPosition);
+                    vertexPosition = buffer->cameraMatrix.rotateVector(vertexPosition);
                     mesh->addVertexWithUV(particlePosition.x+vertexPosition.x, particlePosition.y+vertexPosition.y, particlePosition.z+vertexPosition.z, 0.0, 0.0);
                     mesh->addColor(vertexColor);
                     
                     vertexPosition = Vector3(finalParticleSize, -finalParticleSize, 0.0);
                     vertexPosition = q.applyTo(vertexPosition);
-                    vertexPosition = cameraMatrix.rotateVector(vertexPosition);
+                    vertexPosition = buffer->cameraMatrix.rotateVector(vertexPosition);
                     mesh->addVertexWithUV(particlePosition.x+vertexPosition.x, particlePosition.y+vertexPosition.y, particlePosition.z+vertexPosition.z, 1.0, 0.0);
                     mesh->addColor(vertexColor);
 
                     vertexPosition = Vector3(finalParticleSize, finalParticleSize, 0.0);
                     vertexPosition = q.applyTo(vertexPosition);
-                    vertexPosition = cameraMatrix.rotateVector(vertexPosition);
+                    vertexPosition = buffer->cameraMatrix.rotateVector(vertexPosition);
                     mesh->addVertexWithUV(particlePosition.x+vertexPosition.x, particlePosition.y+vertexPosition.y, particlePosition.z+vertexPosition.z, 1.0, 1.0);
                     mesh->addColor(vertexColor);
 
                     vertexPosition = Vector3(-finalParticleSize, finalParticleSize, 0.0);
                     vertexPosition = q.applyTo(vertexPosition);
-                    vertexPosition = cameraMatrix.rotateVector(vertexPosition);
+                    vertexPosition = buffer->cameraMatrix.rotateVector(vertexPosition);
                     mesh->addVertexWithUV(particlePosition.x+vertexPosition.x, particlePosition.y+vertexPosition.y, particlePosition.z+vertexPosition.z, 0.0, 1.0);
                     mesh->addColor(vertexColor);
                     
@@ -506,7 +504,7 @@ void SceneParticleEmitter::updateParticles() {
 
 void SceneParticleEmitter::Render(GPUDrawBuffer *buffer) {
     systemTrasnformMatrix = getConcatenatedMatrix();
-    rebuildParticles();
+    rebuildParticles(buffer);
     SceneMesh::Render(buffer);
 }
 

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

@@ -244,6 +244,7 @@ void Scene::Render(Camera *targetCamera, Texture *targetFramebuffer) {
     
     drawBuffer->projectionMatrix = targetCamera->createProjectionMatrix();
     drawBuffer->viewMatrix = targetCamera->getConcatenatedMatrix().Inverse();
+    drawBuffer->cameraMatrix = targetCamera->getConcatenatedMatrix();
 /*
 	if(useClearColor) {
 		CoreServices::getInstance()->getRenderer()->setClearColor(clearColor.r,clearColor.g,clearColor.b, clearColor.a);	

+ 0 - 6
Core/Contents/Source/PolySceneLabel.cpp

@@ -123,12 +123,6 @@ void SceneLabel::updateFromLabel() {
     
     localShaderOptions->setTextureForParam("diffuse", texture);
     
-        // RENDERER_TODO
-    /*
-	if(useVertexBuffer)
-		CoreServices::getInstance()->getRenderer()->createVertexBufferForMesh(mesh);
-     */
-	
 }
 
 void SceneLabel::Render(GPUDrawBuffer *buffer) {

+ 0 - 5
Core/Contents/Source/PolySceneMesh.cpp

@@ -52,7 +52,6 @@ SceneMesh::SceneMesh(const String& fileName) : Entity(), material(NULL), skeleto
 	lineWidth = 1.0;
 	pointSize = 1.0;
 	pointSmooth = false;
-	overlayWireframe = false;
 	useGeometryHitDetection = false;
     forceMaterial = false;
     backfaceCulled = true;
@@ -71,7 +70,6 @@ SceneMesh::SceneMesh(Mesh *mesh) : Entity(), material(NULL), skeleton(NULL), loc
 	lineWidth = 1.0;
 	pointSize = 1.0;
 	pointSmooth = false;
-	overlayWireframe = false;	
 	useGeometryHitDetection = false;
     forceMaterial = false;
     backfaceCulled = true;
@@ -88,7 +86,6 @@ SceneMesh::SceneMesh(int meshType) : material(NULL), skeleton(NULL), localShader
 	ownsMesh = true;
 	ownsSkeleton = true;	
 	lineWidth = 1.0;
-	overlayWireframe = false;
 	useGeometryHitDetection = false;
     forceMaterial = false;
     backfaceCulled = true;
@@ -129,8 +126,6 @@ void SceneMesh::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly)
 	_clone->alphaTest = alphaTest;
 	_clone->backfaceCulled = backfaceCulled;
     _clone->ownsSkeleton = ownsSkeleton;
-    _clone->overlayWireframe = overlayWireframe;
-    _clone->wireFrameColor = wireFrameColor;
     _clone->useGeometryHitDetection = useGeometryHitDetection;
     _clone->forceMaterial = forceMaterial;
     _clone->setFilename(fileName);

+ 0 - 8
Core/Contents/Source/PolySceneSprite.cpp

@@ -132,14 +132,6 @@ void SceneSprite::setSpriteSet(SpriteSet *spriteSet) {
     spriteSet->addEventListener(this, Event::CHANGE_EVENT);
     
     localShaderOptions->setTextureForParam("diffuse", spriteSet->getTexture());
-    
-    // RENDERER_TODO
-    /*
-    if(getLocalShaderOptions()) {
-        getLocalShaderOptions()->clearTexture("diffuse");
-        getLocalShaderOptions()->addTexture("diffuse", getTexture());
-    }
-    */
     currentSprite = NULL;
     currentSpriteState = NULL;
 }

+ 13 - 10
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -712,9 +712,7 @@ EntityEditorMainView::EntityEditorMainView(PolycodeEditor *editor) {
     iconVisibilitySelector->addEventListener(this, UIEvent::SELECT_EVENT);
     
     bBoxVis = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 1.0, 1.0, 1.0);
-    bBoxVis->overlayWireframe = true;
-    bBoxVis->wireFrameColor = Color(0.3, 0.5, 1.0, 0.5);
-    bBoxVis->color.a = 0.0;
+    bBoxVis->color = Color(0.3, 0.5, 1.0, 0.5);
     bBoxVis->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     mainScene->addChild(bBoxVis);
     
@@ -995,10 +993,10 @@ void EntityEditorMainView::Update() {
     
     if(selectedEntities.size() > 0) {
         setBBox();
-        bBoxVis->wireFrameColor = Color(0.3, 0.5, 1.0, 0.5);
+        bBoxVis->color = Color(0.3, 0.5, 1.0, 0.5);
     } else {
         setBBox(getObjectRoot());
-        bBoxVis->wireFrameColor = Color(0.5, 1.0, 0.3, 0.5);
+        bBoxVis->color = Color(0.5, 1.0, 0.3, 0.5);
     }
 }
 
@@ -1049,7 +1047,8 @@ void EntityEditorMainView::setLinkedEntityPropsRecursive(SceneEntityInstance *pa
     entity->editorOnly = true;
     
     if(sceneMesh && !emitter) {
-        sceneMesh->wireFrameColor = Color(0.2, 0.9, 0.6, 1.0);
+        // RENDERER_TODO
+//        sceneMesh->wireFrameColor = Color(0.2, 0.9, 0.6, 1.0);
         sceneMesh->useGeometryHitDetection = true;
     }
  
@@ -1068,7 +1067,8 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
     SceneSprite *sprite = dynamic_cast<SceneSprite*>(entity);
     
     if(sceneMesh && !emitter && !sprite) {
-        sceneMesh->wireFrameColor = Color(1.0, 0.8, 0.3, 1.0);
+        // RENDERER_TODO
+//        sceneMesh->wireFrameColor = Color(1.0, 0.8, 0.3, 1.0);
 //        sceneMesh->setLineWidth(CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX());
         sceneMesh->useGeometryHitDetection = true;
     }
@@ -1750,7 +1750,8 @@ Scene *EntityEditorMainView::getMainScene() {
 void EntityEditorMainView::doEntityDeselect(Entity *targetEntity) {
     SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(targetEntity);
     if(sceneMesh) {
-        sceneMesh->overlayWireframe = false;
+        // RENDERER_TODO
+        //sceneMesh->overlayWireframe = false;
     }
     
     if(targetEntity == dummyEntity) {
@@ -1777,7 +1778,8 @@ void EntityEditorMainView::doEntityDeselect(Entity *targetEntity) {
 void EntityEditorMainView::setOverlayWireframeRecursive(Entity *targetEntity, bool val) {
     SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(targetEntity);
     if(sceneMesh) {
-        sceneMesh->overlayWireframe = val;
+        // RENDERER_TODO
+            //sceneMesh->overlayWireframe = val;
     }
     for(int i=0; i < targetEntity->getNumChildren(); i++) {
         setOverlayWireframeRecursive(targetEntity->getChildAtIndex(i), val);
@@ -1789,7 +1791,8 @@ void EntityEditorMainView::doEntitySelect(Entity *targetEntity) {
     SceneParticleEmitter *emitter = dynamic_cast<SceneParticleEmitter*>(targetEntity);
     
     if(sceneMesh && ! emitter) {
-        sceneMesh->overlayWireframe = true;
+                // RENDERER_TODO
+//        sceneMesh->overlayWireframe = true;
     }
     
     if(targetEntity == dummyEntity) {