I am seeking a way to write native android applications. Now I am exprloring Tegra Android development Pack 2.0. My problem is windowing library. Because GLUT is unavailable on android I need some other graphic library. I was unable to understand how to draw rectangle or triangle using Tegra Android development Pack 2.0. I tried to call GL primitived directly:
GLuint Engine::LoadShader ( GLenum type, const char *shaderSrc )
{
GLuint shader;
GLint compiled;
// Create the shader object
shader = glCreateShader ( type );
if ( shader == 0 )
return 0;
// Load the shader source
glShaderSource ( shader, 1, &shaderSrc, NULL );
// Compile the shader
glCompileShader ( shader );
// Check the compile status
glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );
if ( !compiled )
{
GLint infoLen = 0;
glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );
if ( infoLen > 1 )
{
char* infoLog = (char*)(malloc (sizeof(char) * infoLen ));
glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
//esLogMessage ( "Error compiling shader:\n%s\n", infoLog );
free ( infoLog );
}
glDeleteShader ( shader );
return 0;
}
return shader;
}
int Engine::makeProgram ( GLuint * dstProgramObject ) {
GLbyte vShaderStr =
"attribute vec4 vPosition; \n"
"void main() \n"
"{ \n"
" gl_Position = vPosition; \n"
"} \n";
GLbyte fShaderStr =
"precision mediump float;\n"
"void main() \n"
"{ \n"
" gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n"
"} \n";
GLuint vertexShader;
GLuint fragmentShader;
GLuint programObject;
GLint linked;
// Load the vertex/fragment shaders
vertexShader = LoadShader ( GL_VERTEX_SHADER, (const char *)vShaderStr );
fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, (const char *)fShaderStr );
// Create the program object
programObject = glCreateProgram ( );
if ( programObject == 0 )
return 0;
glAttachShader ( programObject, vertexShader );
glAttachShader ( programObject, fragmentShader );
// Bind vPosition to attribute 0
glBindAttribLocation ( programObject, 0, "vPosition" );
// Link the program
glLinkProgram ( programObject );
// Check the link status
glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );
if ( !linked )
{
GLint infoLen = 0;
glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );
if ( infoLen > 1 )
{
char* infoLog = (char*)(malloc (sizeof(char) * infoLen ));
glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );
free ( infoLog );
}
glDeleteProgram ( programObject );
return GL_FALSE;
}
m_debugComment = "Link successfull";
// Store the program object
*dstProgramObject = programObject;
//glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );
return GL_TRUE;
}
…
…
static GLfloat vVertices = { 0.0f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f };
glViewport ( 200, 200, 50, 50 );
glClear ( GL_COLOR_BUFFER_BIT );
static GLuint programObject;
makeProgram (&programObject);
glUseProgram ( programObject );
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
glEnableVertexAttribArray ( 0 );
glDrawArrays ( GL_TRIANGLES, 0, 3 );
I also tried using nv_draw_rect.cpp,
But I still could not display even single rectangle!
So, I have questions:
- How to draw figure using Tegra Android development Pack 2.0?
- Which windowing library is it better to use for android native development?
Thanks in advance
Tamachi