| |
| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| |
| #ifndef GrBatchedTextContext_DEFINED |
| #define GrBatchedTextContext_DEFINED |
| |
| #include "GrPaint.h" |
| #include "GrTextContext.h" |
| |
| class GrDrawTarget; |
| class GrTexture; |
| |
| /** |
| * Base class for TextContexts that can batch multiple glyphs into single draw. |
| * |
| * Every glyph is encoded on a single texture. |
| * Every glyph is enclosed within a quad (formed by triangle fan) represented |
| * by 4 vertices. |
| */ |
| class GrBatchedTextContext: public GrTextContext { |
| public: |
| virtual ~GrBatchedTextContext(); |
| |
| protected: |
| enum { |
| kMinRequestedGlyphs = 1, |
| kDefaultRequestedGlyphs = 64, |
| kMinRequestedVerts = kMinRequestedGlyphs * 4, |
| kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4, |
| kGlyphMaskStage = GrPaint::kTotalStages, |
| }; |
| |
| GrPaint fGrPaint; |
| GrDrawTarget* fDrawTarget; |
| |
| int32_t fMaxVertices; |
| GrTexture* fCurrTexture; |
| int fCurrVertex; |
| |
| GrBatchedTextContext(); |
| virtual void init(GrContext* context, const GrPaint&, |
| const GrMatrix* extMatrix) SK_OVERRIDE; |
| virtual void finish() SK_OVERRIDE; |
| |
| /** |
| * Prepare to add another glyph to buffer. The glyph is encoded on the |
| * texture provided. Make sure we are using the right texture (or switch |
| * to a new texture) and that our buffer is big enough. |
| */ |
| void prepareForGlyph(GrTexture*); |
| |
| /** |
| * Flush the buffer. Called when switching textures. |
| * Must be called in finish() method of all derived classes. |
| */ |
| virtual void flush() = 0; |
| |
| /** |
| * Set up a buffer to hold vertices of given layout. |
| * If NULL != *vertexBuff, don't do anything. |
| * Might cause flushing, if draw target suggests it. |
| */ |
| void setupVertexBuff(void** vertexBuff, GrVertexLayout vertexLayout); |
| |
| /** |
| * Reset after flushing. |
| */ |
| void reset(); |
| |
| private: |
| |
| typedef GrTextContext INHERITED; |
| }; |
| |
| #endif |