looking for a professional viewpoint on writing opengl c code to opengl es.
This is a example:
/////////////////////////////////////////////////////////////////////////
//
// rubik.h - Renderfunctions
//
// This file was created by the OpenGL-Export-Script for Blender.
//
// Export-Time: 07.04.2010, 16:52:37
//
// Script written by Michael Gantenbrinker.
//
/////////////////////////////////////////////////////////////////////////
#ifndef __RUBIK_H__
#define __RUBIK_H__
/////////////////////////////////////////////////////////////////////////
// DEFINES
#define NUM_MESHES 1
#define NUM_LIGHTS 0
/////////////////////////////////////////////////////////////////////////
// CONSTANTS
// Vertex-Array for each Mesh
const float fVertices_1[21][3] = { {1.000000f, 1.000000f, 0.000000f}, {1.000000f, -1.000000f, 0.000000f}, {-1.000000f, -1.000000f, 0.000000f}, {-1.000000f, 1.000000f, 0.000000f},
{-0.000000f, -1.000000f, 0.000000f}, {1.000000f, -0.000000f, 0.000000f}, {0.000000f, 1.000000f, 0.000000f}, {-1.000000f, 0.000000f, 0.000000f},
{0.000000f, 0.000000f, 0.000000f}, {1.000000f, -0.000000f, 1.366215f}, {0.000000f, 0.000000f, 1.366215f}, {0.000000f, 1.000000f, 1.366215f},
{1.000000f, 1.000000f, 1.366215f}, {1.000000f, -0.000000f, 0.942688f}, {0.000000f, 0.000000f, 0.942688f}, {0.000000f, 1.000000f, 0.942688f},
{1.000000f, 1.000000f, 0.942688f}, {1.000000f, -0.577829f, 0.942688f}, {-0.000000f, -0.577828f, 0.942688f}, {-0.000000f, -0.577828f, 1.366215f},
{1.000000f, -0.577829f, 1.366215f} };
// Normal-Array for each Mesh
const float fNormals_1[21][3] = { {0.707083f, 0.707083f, 0.000000f}, {0.000000f, 0.000000f, 1.000000f}, {0.000000f, 0.000000f, 1.000000f}, {0.000000f, 0.000000f, 1.000000f},
{0.000000f, 0.000000f, 1.000000f}, {0.577349f, -0.577349f, 0.577349f}, {-0.577349f, 0.577349f, 0.577349f}, {0.000000f, 0.000000f, 1.000000f},
{-0.301492f, -0.301492f, 0.904508f}, {0.707083f, 0.000000f, 0.707083f}, {-0.707083f, 0.000000f, 0.707083f}, {-0.577349f, 0.577349f, 0.577349f},
{0.577349f, 0.577349f, 0.577349f}, {0.904508f, -0.301492f, -0.301492f}, {-0.904508f, -0.301492f, -0.301492f}, {-0.707083f, 0.707083f, 0.000000f},
{0.707083f, 0.707083f, 0.000000f}, {0.577349f, -0.577349f, -0.577349f}, {-0.577349f, -0.577349f, -0.577349f}, {-0.577349f, -0.577349f, 0.577349f},
{0.577349f, -0.577349f, 0.577349f} };
// Triangle-Indices for each Mesh
// Quad-Indices for each Mesh
const unsigned long ulQuadIndices_1[16][4] = { {6, 3, 7, 8}, {7, 2, 4, 8}, {4, 1, 5, 8}, {9, 12, 11, 10}, {5, 13, 14, 8}, {8, 14, 15, 6}, {14, 10, 11, 15}, {16, 0, 6, 15},
{15, 11, 12, 16}, {0, 16, 13, 5}, {16, 12, 9, 13}, {14, 13, 17, 18}, {10, 14, 18, 19}, {13, 9, 20, 17}, {9, 10, 19, 20}, {17, 20, 19, 18}
};
// Array with Vertex-Array-Pointers
const float* pVertexPointers[] = {&fVertices_1[0][0]};
// Array with Normal-Array-Pointers
const float* pNormalPointers[] = {&fNormals_1[0][0]};
// Array with TriangleIndex-Array-Pointers
const unsigned long* pTriangleIndexPointers[] = {0};
// Array with QuadIndex-Array-Pointers
const unsigned long* pQuadIndexPointers[] = {&ulQuadIndices_1[0][0]};
// Array with Vertex-Array-Lengths
const unsigned long ulVertexLengths[] = {21};
// Array with TriangleIndex-Array-Lengths
const unsigned long ulTriangleIndexLengths[] = {0};
// Array with QuadIndex-Array-Lengths
const unsigned long ulQuadIndexLengths[] = {16};
void Init()
{
}
void Render(int iWidth = 1024, int iHeight = 768)
{
// Setup Projektion-Matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double dAspectRatio = (double)iWidth / (double)iHeight;
gluPerspective(45.0f, dAspectRatio, 1.0f, 100.0f);
glViewport(0, 0, iWidth, iHeight);
gluLookAt(5.0f, 5.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
// Setup Lights
float lPos[] = {5.0f, 5.0f, 5.0f, 1.0f};
float lDir[] = {-0.707f, -0.707f, -0.707f};
glLightfv(GL_LIGHT0, GL_AMBIENT, StdColor_White);
glLightfv(GL_LIGHT0, GL_DIFFUSE, StdColor_BrightGrey);
glLightfv(GL_LIGHT0, GL_SPECULAR, StdColor_White);
glLightfv(GL_LIGHT0, GL_POSITION, lPos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, lDir);
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 180.f);
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 1.0f);
glLightf (GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0f);
glLightf (GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.6f);
glLightf (GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.06f);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
// Setup Scene-Content
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
float* fVertices = 0;
float* fNormals = 0;
unsigned long* ulTriangleIndices = 0;
unsigned long* ulQuadIndices = 0;
unsigned long* ulPtr = 0;
for(int i = 0; i < NUM_MESHES; i++)
{
fVertices = (float*)pVertexPointers[i];
fNormals = (float*)pNormalPointers[i];
ulTriangleIndices = (unsigned long*)pTriangleIndexPointers[i];
ulQuadIndices = (unsigned long*)pQuadIndexPointers[i];
if(ulTriangleIndices)
{
glBegin(GL_TRIANGLES);
unsigned long t = 0;
while(t < ulTriangleIndexLengths[i]*3)
{
ulPtr = &ulTriangleIndices[t];
glNormal3fv(&fNormals[ulPtr[0]*3]);
glVertex3fv(&fVertices[ulPtr[0]*3]);
glNormal3fv(&fNormals[ulPtr[1]*3]);
glVertex3fv(&fVertices[ulPtr[1]*3]);
glNormal3fv(&fNormals[ulPtr[2]*3]);
glVertex3fv(&fVertices[ulPtr[2]*3]);
t += 3;
}
glEnd();
}
if(ulQuadIndices)
{
glBegin(GL_QUADS);
unsigned long q = 0;
while(q < ulQuadIndexLengths[i]*4)
{
ulPtr = &ulQuadIndices[q];
glNormal3fv(&fNormals[ulPtr[0]*3]);
glVertex3fv(&fVertices[ulPtr[0]*3]);
glNormal3fv(&fNormals[ulPtr[1]*3]);
glVertex3fv(&fVertices[ulPtr[1]*3]);
glNormal3fv(&fNormals[ulPtr[2]*3]);
glVertex3fv(&fVertices[ulPtr[2]*3]);
glNormal3fv(&fNormals[ulPtr[3]*3]);
glVertex3fv(&fVertices[ulPtr[3]*3]);
q += 4;
}
glEnd();
}
}
}
#endif /* __RUBIK_H__ */