Use ShaderProgramID in place of GLuint handles

Bug: angleproject:3804
Change-Id: I5dc640004c2cc054c53261e8e939b6a9f5fc23bb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1762363
Commit-Queue: Jiacheng Lu <lujc@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
diff --git a/src/libANGLE/ResourceManager.cpp b/src/libANGLE/ResourceManager.cpp
index 9b60d2a..31d315a 100644
--- a/src/libANGLE/ResourceManager.cpp
+++ b/src/libANGLE/ResourceManager.cpp
@@ -157,52 +157,52 @@
 {
     while (!mPrograms.empty())
     {
-        deleteProgram(context, mPrograms.begin()->first);
+        deleteProgram(context, {mPrograms.begin()->first});
     }
     mPrograms.clear();
     while (!mShaders.empty())
     {
-        deleteShader(context, mShaders.begin()->first);
+        deleteShader(context, {mShaders.begin()->first});
     }
     mShaders.clear();
 }
 
-GLuint ShaderProgramManager::createShader(rx::GLImplFactory *factory,
-                                          const gl::Limitations &rendererLimitations,
-                                          ShaderType type)
+ShaderProgramID ShaderProgramManager::createShader(rx::GLImplFactory *factory,
+                                                   const gl::Limitations &rendererLimitations,
+                                                   ShaderType type)
 {
     ASSERT(type != ShaderType::InvalidEnum);
-    GLuint handle = mHandleAllocator.allocate();
+    ShaderProgramID handle = ShaderProgramID{mHandleAllocator.allocate()};
     mShaders.assign(handle, new Shader(this, factory, rendererLimitations, type, handle));
     return handle;
 }
 
-void ShaderProgramManager::deleteShader(const Context *context, GLuint shader)
+void ShaderProgramManager::deleteShader(const Context *context, ShaderProgramID shader)
 {
     deleteObject(context, &mShaders, shader);
 }
 
-Shader *ShaderProgramManager::getShader(GLuint handle) const
+Shader *ShaderProgramManager::getShader(ShaderProgramID handle) const
 {
     return mShaders.query(handle);
 }
 
-GLuint ShaderProgramManager::createProgram(rx::GLImplFactory *factory)
+ShaderProgramID ShaderProgramManager::createProgram(rx::GLImplFactory *factory)
 {
-    GLuint handle = mHandleAllocator.allocate();
+    ShaderProgramID handle = ShaderProgramID{mHandleAllocator.allocate()};
     mPrograms.assign(handle, new Program(factory, this, handle));
     return handle;
 }
 
-void ShaderProgramManager::deleteProgram(const gl::Context *context, GLuint program)
+void ShaderProgramManager::deleteProgram(const gl::Context *context, ShaderProgramID program)
 {
     deleteObject(context, &mPrograms, program);
 }
 
-template <typename ObjectType>
+template <typename ObjectType, typename IDType>
 void ShaderProgramManager::deleteObject(const Context *context,
-                                        ResourceMap<ObjectType> *objectMap,
-                                        GLuint id)
+                                        ResourceMap<ObjectType, IDType> *objectMap,
+                                        IDType id)
 {
     ObjectType *object = objectMap->query(id);
     if (!object)
@@ -212,7 +212,7 @@
 
     if (object->getRefCount() == 0)
     {
-        mHandleAllocator.release(id);
+        mHandleAllocator.release(id.value);
         object->onDestroy(context);
         objectMap->erase(id, &object);
     }