| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "GrGpuGL.h" | 9 #include "GrGpuGL.h" |
| 10 #include "GrGLStencilBuffer.h" | 10 #include "GrGLStencilBuffer.h" |
| (...skipping 1327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 } | 1338 } |
| 1339 return; | 1339 return; |
| 1340 } | 1340 } |
| 1341 } | 1341 } |
| 1342 | 1342 |
| 1343 // See fall through note above | 1343 // See fall through note above |
| 1344 this->disableScissor(); | 1344 this->disableScissor(); |
| 1345 } | 1345 } |
| 1346 | 1346 |
| 1347 bool GrGLGpu::flushGLState(const GrOptDrawState& optState) { | 1347 bool GrGLGpu::flushGLState(const GrOptDrawState& optState) { |
| 1348 // GrGpu::setupClipAndFlushState should have already checked this and bailed
if not true. | 1348 SkASSERT(kStencilPath_DrawType != optState.drawType()); |
| 1349 SkASSERT(optState.getRenderTarget()); | 1349 this->flushMiscFixedFunctionState(optState); |
| 1350 | 1350 |
| 1351 if (kStencilPath_DrawType == optState.drawType()) { | 1351 fCurrentProgram.reset(fProgramCache->getProgram(optState)); |
| 1352 const GrRenderTarget* rt = optState.getRenderTarget(); | 1352 if (NULL == fCurrentProgram.get()) { |
| 1353 SkISize size; | 1353 SkDEBUGFAIL("Failed to create program!"); |
| 1354 size.set(rt->width(), rt->height()); | 1354 return false; |
| 1355 this->glPathRendering()->setProjectionMatrix(optState.getViewMatrix(), s
ize, rt->origin()); | 1355 } |
| 1356 } else { | |
| 1357 this->flushMiscFixedFunctionState(optState); | |
| 1358 | 1356 |
| 1359 fCurrentProgram.reset(fProgramCache->getProgram(optState)); | 1357 fCurrentProgram.get()->ref(); |
| 1360 if (NULL == fCurrentProgram.get()) { | |
| 1361 SkDEBUGFAIL("Failed to create program!"); | |
| 1362 return false; | |
| 1363 } | |
| 1364 | 1358 |
| 1365 fCurrentProgram.get()->ref(); | 1359 GrGLuint programID = fCurrentProgram->programID(); |
| 1360 if (fHWProgramID != programID) { |
| 1361 GL_CALL(UseProgram(programID)); |
| 1362 fHWProgramID = programID; |
| 1363 } |
| 1366 | 1364 |
| 1367 GrGLuint programID = fCurrentProgram->programID(); | 1365 this->flushBlend(optState); |
| 1368 if (fHWProgramID != programID) { | |
| 1369 GL_CALL(UseProgram(programID)); | |
| 1370 fHWProgramID = programID; | |
| 1371 } | |
| 1372 | 1366 |
| 1373 this->flushBlend(optState); | 1367 fCurrentProgram->setData(optState); |
| 1374 | |
| 1375 fCurrentProgram->setData(optState); | |
| 1376 } | |
| 1377 | 1368 |
| 1378 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(optState.getRenderTa
rget()); | 1369 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(optState.getRenderTa
rget()); |
| 1379 this->flushStencil(optState.getStencil(), optState.drawType()); | 1370 this->flushStencil(optState.getStencil(), optState.drawType()); |
| 1380 this->flushScissor(optState.getScissorState(), glRT->getViewport(), glRT->or
igin()); | 1371 this->flushScissor(optState.getScissorState(), glRT->getViewport(), glRT->or
igin()); |
| 1381 this->flushAAState(optState); | 1372 this->flushAAState(optState); |
| 1382 | 1373 |
| 1383 // This must come after textures are flushed because a texture may need | 1374 // This must come after textures are flushed because a texture may need |
| 1384 // to be msaa-resolved (which will modify bound FBO state). | 1375 // to be msaa-resolved (which will modify bound FBO state). |
| 1385 this->flushRenderTarget(glRT, NULL); | 1376 this->flushRenderTarget(glRT, NULL); |
| 1386 | 1377 |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1867 SwapBuf(); | 1858 SwapBuf(); |
| 1868 int set_a_break_pt_here = 9; | 1859 int set_a_break_pt_here = 9; |
| 1869 SwapBuf(); | 1860 SwapBuf(); |
| 1870 #endif | 1861 #endif |
| 1871 #endif | 1862 #endif |
| 1872 } | 1863 } |
| 1873 | 1864 |
| 1874 void GrGLGpu::onStencilPath(const GrOptDrawState& ds, | 1865 void GrGLGpu::onStencilPath(const GrOptDrawState& ds, |
| 1875 const GrPath* path, | 1866 const GrPath* path, |
| 1876 const GrStencilSettings& stencil) { | 1867 const GrStencilSettings& stencil) { |
| 1877 if (!this->flushGLState(ds)) { | 1868 this->flushMiscFixedFunctionState(ds); |
| 1878 return; | 1869 GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(ds.getRenderTarget()); |
| 1879 } | 1870 SkISize size = SkISize::Make(rt->width(), rt->height()); |
| 1871 this->glPathRendering()->setProjectionMatrix(ds.getViewMatrix(), size, rt->o
rigin()); |
| 1872 this->flushStencil(ds.getStencil(), ds.drawType()); |
| 1873 this->flushScissor(ds.getScissorState(), rt->getViewport(), rt->origin()); |
| 1874 this->flushAAState(ds); |
| 1875 this->flushRenderTarget(rt, NULL); |
| 1876 |
| 1880 fPathRendering->stencilPath(path, stencil); | 1877 fPathRendering->stencilPath(path, stencil); |
| 1881 } | 1878 } |
| 1882 | 1879 |
| 1883 void GrGLGpu::onDrawPath(const GrOptDrawState& ds, const GrPath* path, | 1880 void GrGLGpu::onDrawPath(const GrOptDrawState& ds, const GrPath* path, |
| 1884 const GrStencilSettings& stencil) { | 1881 const GrStencilSettings& stencil) { |
| 1885 if (!this->flushGLState(ds)) { | 1882 if (!this->flushGLState(ds)) { |
| 1886 return; | 1883 return; |
| 1887 } | 1884 } |
| 1888 fPathRendering->drawPath(path, stencil); | 1885 fPathRendering->drawPath(path, stencil); |
| 1889 } | 1886 } |
| (...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2731 this->setVertexArrayID(gpu, 0); | 2728 this->setVertexArrayID(gpu, 0); |
| 2732 } | 2729 } |
| 2733 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2730 int attrCount = gpu->glCaps().maxVertexAttributes(); |
| 2734 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 2731 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
| 2735 fDefaultVertexArrayAttribState.resize(attrCount); | 2732 fDefaultVertexArrayAttribState.resize(attrCount); |
| 2736 } | 2733 } |
| 2737 attribState = &fDefaultVertexArrayAttribState; | 2734 attribState = &fDefaultVertexArrayAttribState; |
| 2738 } | 2735 } |
| 2739 return attribState; | 2736 return attribState; |
| 2740 } | 2737 } |
| OLD | NEW |