// // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // VertexDeclarationCache.h: Defines a helper class to construct and cache vertex declarations. #ifndef LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_ #define LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_ #include "libGLESv2/renderer/VertexDataManager.h" namespace gl { class VertexDataManager; } namespace rx { class VertexDeclarationCache { public: VertexDeclarationCache(); ~VertexDeclarationCache(); GLenum applyDeclaration(IDirect3DDevice9 *device, TranslatedAttribute attributes[], gl::ProgramBinary *programBinary, GLsizei instances, GLsizei *repeatDraw); void markStateDirty(); private: UINT mMaxLru; enum { NUM_VERTEX_DECL_CACHE_ENTRIES = 32 }; struct VBData { unsigned int serial; unsigned int stride; unsigned int offset; }; VBData mAppliedVBs[gl::MAX_VERTEX_ATTRIBS]; IDirect3DVertexDeclaration9 *mLastSetVDecl; bool mInstancingEnabled; struct VertexDeclCacheEntry { D3DVERTEXELEMENT9 cachedElements[gl::MAX_VERTEX_ATTRIBS + 1]; UINT lruCount; IDirect3DVertexDeclaration9 *vertexDeclaration; } mVertexDeclCache[NUM_VERTEX_DECL_CACHE_ENTRIES]; }; } #endif // LIBGLESV2_RENDERER_VERTEXDECLARATIONCACHE_H_