OSDN Git Service

Make Blitter part of Renderer.
[android-x86/external-swiftshader.git] / src / Renderer / Renderer.cpp
index fe6c7f9..a84423d 100644 (file)
@@ -114,6 +114,7 @@ namespace sw
 
                setRenderTarget(0, 0);
                clipper = new Clipper(symmetricNormalizedDepth);
+               blitter = new Blitter;
 
                updateViewMatrix = true;
                updateBaseMatrix = true;
@@ -177,7 +178,10 @@ namespace sw
                sync->destruct();
 
                delete clipper;
-               clipper = 0;
+               clipper = nullptr;
+
+               delete blitter;
+               blitter = nullptr;
 
                terminateThreads();
                delete resumeApp;
@@ -191,30 +195,15 @@ namespace sw
        }
 
        // This object has to be mem aligned
-       void* Renderer::operator new(size_t size)\r
-       {\r
-               ASSERT(size == sizeof(Renderer)); // This operator can't be called from a derived class\r
-               return sw::allocate(sizeof(Renderer), 16);\r
-       }\r
-\r
-       void Renderer::operator delete(void * mem)\r
-       {\r
-               sw::deallocate(mem);\r
-       }
-
-       void Renderer::clear(void *pixel, Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
+       void* Renderer::operator new(size_t size)
        {
-               blitter.clear(pixel, format, dest, dRect, rgbaMask);
+               ASSERT(size == sizeof(Renderer)); // This operator can't be called from a derived class
+               return sw::allocate(sizeof(Renderer), 16);
        }
 
-       void Renderer::blit(Surface *source, const SliceRect &sRect, Surface *dest, const SliceRect &dRect, bool filter)
+       void Renderer::operator delete(void * mem)
        {
-               blitter.blit(source, sRect, dest, dRect, filter);
-       }
-
-       void Renderer::blit3D(Surface *source, Surface *dest)
-       {
-               blitter.blit3D(source, dest);
+               sw::deallocate(mem);
        }
 
        void Renderer::draw(DrawType drawType, unsigned int indexOffset, unsigned int count, bool update)
@@ -634,7 +623,7 @@ namespace sw
 
                                if(draw->stencilBuffer)
                                {
-                                       data->stencilBuffer = (unsigned char*)context->stencilBuffer->lockStencil(q * ms, MANAGED);
+                                       data->stencilBuffer = (unsigned char*)context->stencilBuffer->lockStencil(0, 0, q * ms, MANAGED);
                                        data->stencilPitchB = context->stencilBuffer->getStencilPitchB();
                                        data->stencilSliceB = context->stencilBuffer->getStencilSliceB();
                                }
@@ -657,7 +646,16 @@ namespace sw
                        nextDraw++;
                        schedulerMutex.unlock();
 
-                       if(threadCount > 1)
+                       #ifndef NDEBUG
+                       if(threadCount == 1)   // Use main thread for draw execution
+                       {
+                               threadsAwake = 1;
+                               task[0].type = Task::RESUME;
+
+                               taskLoop(0);
+                       }
+                       else
+                       #endif
                        {
                                if(!threadsAwake)
                                {
@@ -669,16 +667,24 @@ namespace sw
                                        resume[0]->signal();
                                }
                        }
-                       else   // Use main thread for draw execution
-                       {
-                               threadsAwake = 1;
-                               task[0].type = Task::RESUME;
-
-                               taskLoop(0);
-                       }
                }
        }
 
+       void Renderer::clear(void *pixel, Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
+       {
+               blitter->clear(pixel, format, dest, dRect, rgbaMask);
+       }
+
+       void Renderer::blit(Surface *source, const SliceRect &sRect, Surface *dest, const SliceRect &dRect, bool filter, bool isStencil)
+       {
+               blitter->blit(source, sRect, dest, dRect, filter, isStencil);
+       }
+
+       void Renderer::blit3D(Surface *source, Surface *dest)
+       {
+               blitter->blit3D(source, dest);
+       }
+
        void Renderer::threadFunction(void *parameters)
        {
                Renderer *renderer = static_cast<Parameters*>(parameters)->renderer;