1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker *
4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5*b7c941bbSAndroid Build Coastguard Worker * in compliance with the License. You may obtain a copy of the License at
6*b7c941bbSAndroid Build Coastguard Worker *
7*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
8*b7c941bbSAndroid Build Coastguard Worker *
9*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software distributed under the License
10*b7c941bbSAndroid Build Coastguard Worker * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11*b7c941bbSAndroid Build Coastguard Worker * or implied. See the License for the specific language governing permissions and limitations under
12*b7c941bbSAndroid Build Coastguard Worker * the License.
13*b7c941bbSAndroid Build Coastguard Worker */
14*b7c941bbSAndroid Build Coastguard Worker
15*b7c941bbSAndroid Build Coastguard Worker #include "PerspectiveMeshNode.h"
16*b7c941bbSAndroid Build Coastguard Worker
17*b7c941bbSAndroid Build Coastguard Worker #include "PerspectiveProgram.h"
18*b7c941bbSAndroid Build Coastguard Worker
PerspectiveMeshNode(const Mesh * mesh,const GLuint textureId)19*b7c941bbSAndroid Build Coastguard Worker PerspectiveMeshNode::PerspectiveMeshNode(const Mesh* mesh, const GLuint textureId) :
20*b7c941bbSAndroid Build Coastguard Worker TexturedMeshNode(mesh, textureId) {
21*b7c941bbSAndroid Build Coastguard Worker }
22*b7c941bbSAndroid Build Coastguard Worker
before(Program & program,Matrix & model,Matrix & view,Matrix & projection)23*b7c941bbSAndroid Build Coastguard Worker void PerspectiveMeshNode::before(Program& program, Matrix& model, Matrix& view, Matrix& projection) {
24*b7c941bbSAndroid Build Coastguard Worker PerspectiveProgram& prog = (PerspectiveProgram&) program;
25*b7c941bbSAndroid Build Coastguard Worker
26*b7c941bbSAndroid Build Coastguard Worker int textureUniformHandle = glGetUniformLocation(prog.mProgramId, "u_Texture");
27*b7c941bbSAndroid Build Coastguard Worker int positionHandle = glGetAttribLocation(prog.mProgramId, "a_Position");
28*b7c941bbSAndroid Build Coastguard Worker int normalHandle = glGetAttribLocation(prog.mProgramId, "a_Normal");
29*b7c941bbSAndroid Build Coastguard Worker int texCoordHandle = glGetAttribLocation(prog.mProgramId, "a_TexCoordinate");
30*b7c941bbSAndroid Build Coastguard Worker
31*b7c941bbSAndroid Build Coastguard Worker // Set the texture.
32*b7c941bbSAndroid Build Coastguard Worker glActiveTexture (GL_TEXTURE0);
33*b7c941bbSAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, mTextureId);
34*b7c941bbSAndroid Build Coastguard Worker glUniform1i(textureUniformHandle, 0);
35*b7c941bbSAndroid Build Coastguard Worker
36*b7c941bbSAndroid Build Coastguard Worker glEnableVertexAttribArray(positionHandle);
37*b7c941bbSAndroid Build Coastguard Worker glVertexAttribPointer(positionHandle, 3, GL_FLOAT, false, 0, mMesh->mVertices);
38*b7c941bbSAndroid Build Coastguard Worker glEnableVertexAttribArray(normalHandle);
39*b7c941bbSAndroid Build Coastguard Worker glVertexAttribPointer(normalHandle, 3, GL_FLOAT, false, 0, mMesh->mNormals);
40*b7c941bbSAndroid Build Coastguard Worker glEnableVertexAttribArray(texCoordHandle);
41*b7c941bbSAndroid Build Coastguard Worker glVertexAttribPointer(texCoordHandle, 2, GL_FLOAT, false, 0, mMesh->mTexCoords);
42*b7c941bbSAndroid Build Coastguard Worker
43*b7c941bbSAndroid Build Coastguard Worker // This multiplies the view matrix by the model matrix, and stores the result in the MVP
44*b7c941bbSAndroid Build Coastguard Worker // matrix (which currently contains model * view).
45*b7c941bbSAndroid Build Coastguard Worker prog.mMVMatrix.multiply(view, model);
46*b7c941bbSAndroid Build Coastguard Worker
47*b7c941bbSAndroid Build Coastguard Worker // Pass in the modelview matrix.
48*b7c941bbSAndroid Build Coastguard Worker glUniformMatrix4fv(prog.mMVMatrixHandle, 1, false, prog.mMVMatrix.mData);
49*b7c941bbSAndroid Build Coastguard Worker
50*b7c941bbSAndroid Build Coastguard Worker // This multiplies the modelview matrix by the projection matrix, and stores the result in
51*b7c941bbSAndroid Build Coastguard Worker // the MVP matrix (which now contains model * view * projection).
52*b7c941bbSAndroid Build Coastguard Worker prog.mMVPMatrix.multiply(projection, prog.mMVMatrix);
53*b7c941bbSAndroid Build Coastguard Worker
54*b7c941bbSAndroid Build Coastguard Worker // Pass in the combined matrix.
55*b7c941bbSAndroid Build Coastguard Worker glUniformMatrix4fv(prog.mMVPMatrixHandle, 1, false, prog.mMVPMatrix.mData);
56*b7c941bbSAndroid Build Coastguard Worker
57*b7c941bbSAndroid Build Coastguard Worker // Pass in the light position in eye space.
58*b7c941bbSAndroid Build Coastguard Worker glUniform3f(prog.mLightPosHandle, prog.mLightPosInEyeSpace[0], prog.mLightPosInEyeSpace[1],
59*b7c941bbSAndroid Build Coastguard Worker prog.mLightPosInEyeSpace[2]);
60*b7c941bbSAndroid Build Coastguard Worker
61*b7c941bbSAndroid Build Coastguard Worker glDrawArrays(GL_TRIANGLES, 0, mMesh->mNumVertices);
62*b7c941bbSAndroid Build Coastguard Worker }
63*b7c941bbSAndroid Build Coastguard Worker
after(Program & program,Matrix & model,Matrix & view,Matrix & projection)64*b7c941bbSAndroid Build Coastguard Worker void PerspectiveMeshNode::after(Program& program, Matrix& model, Matrix& view, Matrix& projection) {
65*b7c941bbSAndroid Build Coastguard Worker }
66