Ivan Safrin 9 лет назад
Родитель
Сommit
1a02f4dbc9

+ 2 - 0
build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.h

@@ -21,4 +21,6 @@ private:
     Core *core;
     Core *core;
     std::vector<ScenePrimitive*> tests;
     std::vector<ScenePrimitive*> tests;
     SceneLabel *fpsLabel;
     SceneLabel *fpsLabel;
+    Number counter;
+    int numFrames;
 };
 };

+ 13 - 4
build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.mm

@@ -25,7 +25,7 @@ PolycodeTemplateApp::PolycodeTemplateApp(PolycodeView *view) {
     
     
    // scene->setOverrideMaterial((Material*)globalPool->getResource(Resource::RESOURCE_MATERIAL, "Unlit"));
    // scene->setOverrideMaterial((Material*)globalPool->getResource(Resource::RESOURCE_MATERIAL, "Unlit"));
     
     
-    for(int i=0; i  < 5; i++) {
+    for(int i=0; i  < 5000; i++) {
         test = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 0.5, 0.5);
         test = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 0.5, 0.5);
         test->setMaterialByName("Unlit");
         test->setMaterialByName("Unlit");
         test->attachScript(rotateScript);
         test->attachScript(rotateScript);
@@ -40,7 +40,7 @@ PolycodeTemplateApp::PolycodeTemplateApp(PolycodeView *view) {
 
 
     fpsLabel = new SceneLabel("FPS:", 32, "mono", Label::ANTIALIAS_FULL, 0.1);
     fpsLabel = new SceneLabel("FPS:", 32, "mono", Label::ANTIALIAS_FULL, 0.1);
     scene->addChild(fpsLabel);
     scene->addChild(fpsLabel);
-    fpsLabel->setPositionX(-0.6);
+    fpsLabel->setPositionY(-0.4);
     
     
     Services()->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
     Services()->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
 }
 }
@@ -56,8 +56,17 @@ PolycodeTemplateApp::~PolycodeTemplateApp() {
 bool PolycodeTemplateApp::Update() {
 bool PolycodeTemplateApp::Update() {
     Number elapsed = core->getElapsed();
     Number elapsed = core->getElapsed();
     
     
-    if(Services()->getRenderer()->getRenderThread()->getFrameInfo().timeTaken > 0) {
-        fpsLabel->setText("FPS:"+String::IntToString(1000/Services()->getRenderer()->getRenderThread()->getFrameInfo().timeTaken));
+    
+    for(int i=0; i < tests.size(); i++) {
+        tests[i]->Roll(elapsed * 20.0);
+    }
+    
+    ++numFrames;
+    counter += elapsed;
+    if(counter >= 1.0) {
+        counter = 0.0;
+        fpsLabel->setText("FPS:"+String::IntToString(numFrames)+" FRAME MS:"+String::IntToString(Services()->getRenderer()->getRenderThread()->getFrameInfo().timeTaken));
+        numFrames = 0;
     }
     }
     
     
     return core->updateAndRender();
     return core->updateAndRender();

+ 3 - 1
include/polycode/core/PolyRenderer.h

@@ -35,7 +35,7 @@ THE SOFTWARE.
 #include <stack>
 #include <stack>
 #include <queue>  
 #include <queue>  
 
 
-#define RENDERER_MAX_LIGHTS 4
+#define RENDERER_MAX_LIGHTS 8
 #define RENDERER_MAX_LIGHT_SHADOWS 2
 #define RENDERER_MAX_LIGHT_SHADOWS 2
 
 
 #define MAX_QUEUED_FRAMES 2
 #define MAX_QUEUED_FRAMES 2
@@ -147,6 +147,8 @@ namespace Polycode {
             void processDrawBuffer(GPUDrawBuffer *buffer);
             void processDrawBuffer(GPUDrawBuffer *buffer);
             RenderThreadDebugInfo getFrameInfo();
             RenderThreadDebugInfo getFrameInfo();
         
         
+            void clearFrameQueue();
+        
             void initGlobals();
             void initGlobals();
         
         
             void lockRenderMutex();
             void lockRenderMutex();

+ 13 - 3
src/core/PolyRenderer.cpp

@@ -88,7 +88,9 @@ void RenderThread::runThread() {
             nextFrame = frameQueue.front();
             nextFrame = frameQueue.front();
             frameQueue.pop();
             frameQueue.pop();
         }
         }
-           
+
+        Services()->getCore()->unlockMutex(jobQueueMutex);
+
         if(nextFrame) {
         if(nextFrame) {
             while(nextFrame->jobQueue.size() > 0) {
             while(nextFrame->jobQueue.size() > 0) {
                 RendererThreadJob frameJob = nextFrame->jobQueue.front();
                 RendererThreadJob frameJob = nextFrame->jobQueue.front();
@@ -97,8 +99,6 @@ void RenderThread::runThread() {
             }
             }
             delete nextFrame;
             delete nextFrame;
         }
         }
-           
-        Services()->getCore()->unlockMutex(jobQueueMutex);
     }
     }
 }
 }
 
 
@@ -351,6 +351,11 @@ void RenderThread::unlockRenderMutex() {
     Services()->getCore()->unlockMutex(renderMutex);
     Services()->getCore()->unlockMutex(renderMutex);
 }
 }
 
 
+void RenderThread::clearFrameQueue() {
+    while(!frameQueue.empty()) {
+        frameQueue.pop();
+    }
+}
 
 
 void RenderThread::processJob(const RendererThreadJob &job) {
 void RenderThread::processJob(const RendererThreadJob &job) {
     
     
@@ -373,6 +378,7 @@ void RenderThread::processJob(const RendererThreadJob &job) {
         {
         {
             Texture *texture = (Texture*) job.data;
             Texture *texture = (Texture*) job.data;
             graphicsInterface->destroyTexture(texture);
             graphicsInterface->destroyTexture(texture);
+            clearFrameQueue();
         }
         }
         break;
         break;
         case JOB_CREATE_RENDER_BUFFER:
         case JOB_CREATE_RENDER_BUFFER:
@@ -385,18 +391,22 @@ void RenderThread::processJob(const RendererThreadJob &job) {
         {
         {
             RenderBuffer *buffer = (RenderBuffer*) job.data;
             RenderBuffer *buffer = (RenderBuffer*) job.data;
             graphicsInterface->destroyRenderBuffer(buffer);
             graphicsInterface->destroyRenderBuffer(buffer);
+            clearFrameQueue();
         }
         }
         break;
         break;
         case JOB_DESTROY_SHADER_BINDING:
         case JOB_DESTROY_SHADER_BINDING:
         {
         {
             ShaderBinding *binding = (ShaderBinding*) job.data;
             ShaderBinding *binding = (ShaderBinding*) job.data;
             delete binding;
             delete binding;
+            clearFrameQueue();
         }
         }
         break;
         break;
         case JOB_DESTROY_SHADER_PARAM:
         case JOB_DESTROY_SHADER_PARAM:
         {
         {
             LocalShaderParam *param = (LocalShaderParam*) job.data;
             LocalShaderParam *param = (LocalShaderParam*) job.data;
             delete param;
             delete param;
+            clearFrameQueue();
+
         }
         }
         break;
         break;
         case JOB_PROCESS_DRAW_BUFFER:
         case JOB_PROCESS_DRAW_BUFFER: