When trying to run a C ++-based program in android through the NDK platform, compilation gives an error, because the header files "gl.h" and "glext.h" were not found, since I included both of them in my C ++. M using android-ndk-r8 and compiling it with Cygwin.
here s my code:
**ANDROID.MK**
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDK1
FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
include $(BUILD_SHARED_LIBRARY)
---
**APPLICATION.MK**
APP_STL := stlport_static
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-3
---
**Viewer.cpp**
//#import <GLKit/GLKEffects.h>
void Viewer::render() {
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArrayOES( _vertexArray[0]);
// Render the object with GLKit
glDrawArrays(GL_TRIANGLES, 0, 36);
/////////
glBindVertexArrayOES(_vertexArray[1]);
// Render the object with GLKit
//[self.effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, 36);
}
void Viewer::initialize() {
sceneObj.constructDemoScene();
glEnable( GL_DEPTH_TEST);
///////////////////////////////////
glGenVertexArraysOES(1, &_vertexArray[0]);
glBindVertexArrayOES( _vertexArray[0]);
glGenBuffers(1, &_vertexBuffer[0]);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer[0]);
H3DModel * model = sceneObj.get3DModel(0);
float * vertices = model->vertexBuffObj.getVertices();
for (int c = 0; c < 216; c++)
printf("%f\t", vertices[c]);
glBufferData(GL_ARRAY_BUFFER, 216 * 4, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray( EVertexAttribPosition);
glVertexAttribPointer(EVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, position));
glEnableVertexAttribArray( EVertexAttribNormal);
glVertexAttribPointer(EVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, normal));
///////////////////////////////////
glGenVertexArraysOES(2, &_vertexArray[1]);
glBindVertexArrayOES(_vertexArray[1]);
glGenBuffers(2, &_vertexBuffer[1]);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer[1]);
H3DModel * model1 = sceneObj.get3DModel(1);
float * vertices1 = model1->vertexBuffObj.getVertices();
for (int c = 0; c < 216; c++)
printf("%f\t", vertices[c]);
glBufferData(GL_ARRAY_BUFFER, 216 * 4, vertices1, GL_STATIC_DRAW);
glEnableVertexAttribArray(EVertexAttribPosition);
glVertexAttribPointer(EVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, position));
glEnableVertexAttribArray(EVertexAttribNormal);
glVertexAttribPointer(EVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, normal));
glBindVertexArrayOES(0);
}
void Viewer::unInitialize() {
glDeleteBuffers(1, &_vertexBuffer[0]);
glDeleteBuffers(2, &_vertexBuffer[1]);
glDeleteVertexArraysOES(1, &_vertexArray[0]);
glDeleteVertexArraysOES(2, &_vertexArray[1]);
if (_program) {
glDeleteProgram( _program);
_program = 0;
}
}
GLKMatrix4 Viewer::update() {
GLKMatrix4 baseModelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f,
-4.0f);
baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, _rotation,
0.0f, 1.0f, 0.0f);
// Compute the model view matrix for the object rendered with GLKit
//GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -1.5f);
//modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 1.0f, 1.0f, 1.0f);
//modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
//self.effect.transform.modelviewMatrix = baseModelViewMatrix;
/*// Compute the model view matrix for the object rendered with ES2
modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 1.5f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 1.0f, 1.0f, 1.0f);
modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
_normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
_modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix);*/
_rotation += 0.04f;
return baseModelViewMatrix;
}
Thanks in advance .. I want to know how to use OPENGL ES in android ndk !!