|
@@ -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:
|