FVertexDeclarationRHIRef FOpenGLDynamicRHI::RHICreateVertexDeclaration(const FVertexDeclarationElementList& Elements) { // Construct a key from the elements. FOpenGLVertexDeclarationKey Key(Elements); // Check for a cached vertex declaration. FVertexDeclarationRHIRef* VertexDeclarationRefPtr = GOpenGLVertexDeclarationCache.Find(Key); if (VertexDeclarationRefPtr == NULL) { // Create and add to the cache if it doesn't exist. VertexDeclarationRefPtr = &GOpenGLVertexDeclarationCache.Add(Key,new FOpenGLVertexDeclaration(Key.VertexElements)); check(VertexDeclarationRefPtr); check(IsValidRef(*VertexDeclarationRefPtr)); FShaderCache::LogVertexDeclaration(Elements, *VertexDeclarationRefPtr); } // The cached declaration must match the input declaration! check(VertexDeclarationRefPtr); check(IsValidRef(*VertexDeclarationRefPtr)); FOpenGLVertexDeclaration* OpenGLVertexDeclaration = (FOpenGLVertexDeclaration*)VertexDeclarationRefPtr->GetReference(); checkSlow(OpenGLVertexDeclaration->VertexElements == Key.VertexElements); return *VertexDeclarationRefPtr; }
virtual void ReleaseRHI() override { VertexDeclarationRHI.SafeRelease(); }
virtual void ReleaseDynamicRHI() { VertexDeclarationRHI.SafeRelease(); }