Here’s some code:
void testApp::setup(){
shader.load("shaders/multitex");
ofIndexType indices[] = {0,1,2,2,3,0};
mMesh.addVertex( ofVec3f( 0, 0, 100));
mMesh.addTexCoord(ofVec2f( 0, 0 ));
mMesh.addVertex( ofVec3f( 200, 0, 100));
mMesh.addTexCoord(ofVec2f( 100, 0 ));
mMesh.addVertex( ofVec3f( 200, 200, 100));
mMesh.addTexCoord(ofVec2f( 100, 100 ));
mMesh.addVertex( ofVec3f( 0, 200, 100));
mMesh.addTexCoord(ofVec2f( 0, 100 ));
mMesh.addIndices(&indices[0], 6);
mMesh2.addVertex( ofVec3f( 200, 0, 100));
mMesh2.addTexCoord(ofVec2f( 0, 0 ));
mMesh2.addVertex( ofVec3f( 400, 0, 100));
mMesh2.addTexCoord(ofVec2f( 100, 0 ));
mMesh2.addVertex( ofVec3f( 400, 200, 100));
mMesh2.addTexCoord(ofVec2f( 100, 100 ));
mMesh2.addVertex( ofVec3f( 200, 200, 100));
mMesh2.addTexCoord(ofVec2f( 0, 100 ));
mMesh2.addIndices(&indices[0], 6);
img1.loadImage("one.jpg");
img2.loadImage("two.jpg");
}
void testApp::draw(){
ofPushMatrix();
ofTranslate(200, 100);
shader.begin();
shader.setUniformTexture("textures[0]", img1, 0);
shader.setUniformTexture("textures[1]", img2, 1);
float texIDs[] = {0,0,0,0};
shader.setAttribute1fv("texID", &texIDs[0], 0);
mMesh.draw();
texIDs[0] = 1; texIDs[1] = 1; texIDs[2] = 1; texIDs[3] = 1;
shader.setAttribute1fv("texID", &texIDs[0], 0);
mMesh2.draw();
shader.end();
ofPopMatrix();
}
vert
#version 120
varying vec2 texturePosition;
attribute float texID;
varying float texIDVarying;
void main(){
texturePosition = gl_MultiTexCoord0.xy;
//get our current vertex position so we can modify it
vec4 pos = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
texIDVarying = texID;
//finally set the pos to be that actual position rendered
gl_Position = pos;
}
frag
#version 120
varying vec2 texturePosition;
varying float texIDVarying;
uniform sampler2DRect textures[2];
void main(){
int i = int(texIDVarying);
gl_FragColor = texture2DRect(textures[i], texturePosition);
}