Program::link() and callees do not access mPixelHLSL, mVertexHLSL, mFragmentShader, mVertexShader, mAttributeBinding.
mPixelHLSL and mVertexHLSL are deleted because they are only used during linking.
Review URL: https://codereview.appspot.com/6306047
git-svn-id: https://angleproject.googlecode.com/svn/trunk@1141 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Program.h b/src/libGLESv2/Program.h
index 683f4cf..f6d1173 100644
--- a/src/libGLESv2/Program.h
+++ b/src/libGLESv2/Program.h
@@ -25,6 +25,19 @@
class FragmentShader;
class VertexShader;
+class AttributeBindings
+{
+ public:
+ AttributeBindings();
+ ~AttributeBindings();
+
+ void bindAttributeLocation(GLuint index, const char *name);
+ int getAttributeBinding(const std::string &name) const;
+
+ private:
+ std::set<std::string> mAttributeBinding[MAX_VERTEX_ATTRIBS];
+};
+
// Helper struct representing a single shader uniform
struct Uniform
{
@@ -136,6 +149,7 @@
void applyUniforms();
void link();
+ void link(const AttributeBindings &attributeBindings, FragmentShader *fragmentShader, VertexShader *vertexShader);
bool isLinked();
int getInfoLogLength() const;
void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog);
@@ -170,11 +184,10 @@
ID3D10Blob *compileToBinary(const char *hlsl, const char *profile, ID3DXConstantTable **constantTable);
void unlink(bool destroy = false);
- int packVaryings(const Varying *packing[][4]);
- bool linkVaryings();
+ int packVaryings(const Varying *packing[][4], FragmentShader *fragmentShader);
+ bool linkVaryings(std::string& pixelHLSL, std::string& vertexHLSL, FragmentShader *fragmentShader, VertexShader *vertexShader);
- bool linkAttributes();
- int getAttributeBinding(const std::string &name);
+ bool linkAttributes(const AttributeBindings &attributeBindings, FragmentShader *fragmentShader, VertexShader *vertexShader);
bool linkUniforms(GLenum shader, ID3DXConstantTable *constantTable);
bool defineUniform(GLenum shader, const D3DXHANDLE &constantHandle, const D3DXCONSTANT_DESC &constantDescription, std::string name = "");
@@ -198,15 +211,12 @@
FragmentShader *mFragmentShader;
VertexShader *mVertexShader;
- std::string mPixelHLSL;
- std::string mVertexHLSL;
-
IDirect3DPixelShader9 *mPixelExecutable;
IDirect3DVertexShader9 *mVertexExecutable;
ID3DXConstantTable *mConstantTablePS;
ID3DXConstantTable *mConstantTableVS;
- std::set<std::string> mAttributeBinding[MAX_VERTEX_ATTRIBS];
+ AttributeBindings mAttributeBindings;
Attribute mLinkedAttribute[MAX_VERTEX_ATTRIBS];
int mSemanticIndex[MAX_VERTEX_ATTRIBS];