diff --git a/project/jni/nanogl/Android.mk b/project/jni/nanogl/Android.mk index a8ab21611..05715f3ea 100644 --- a/project/jni/nanogl/Android.mk +++ b/project/jni/nanogl/Android.mk @@ -20,7 +20,7 @@ LOCAL_MODULE := nanogl #include $(XASH3D_CONFIG) -LOCAL_CFLAGS += +LOCAL_CFLAGS += -D__MULTITEXTURE_SUPPORT__ LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/GL diff --git a/project/jni/nanogl/include/GL/gl.h b/project/jni/nanogl/include/GL/gl.h index 5bdc4727b..605864b57 100644 --- a/project/jni/nanogl/include/GL/gl.h +++ b/project/jni/nanogl/include/GL/gl.h @@ -691,6 +691,39 @@ void glTexGeni( GLenum coord, GLenum pname, GLint param ); void glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); void glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +// for XashXT + +void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +void glTexEnvi(GLenum target, GLenum pname, GLint param); + +void glBindFramebuffer(GLenum target, GLuint framebuffer); +void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers); +void glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLenum glCheckFramebufferStatus(GLenum target); + +//GLboolean glIsRenderbuffer (GLuint renderbuffer); +void glBindRenderbuffer (GLenum target, GLuint renderbuffer); +void glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +void glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); + + +void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + + +void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + + +void glNormalPointer(GLenum type, GLsizei stride, const void *ptr); + +void glMultiTexCoord3f(GLenum, GLfloat, GLfloat, GLfloat); +void glMultiTexCoord3fARB(GLenum, GLfloat, GLfloat, GLfloat); + +void glMultiTexCoord2f(GLenum, GLfloat, GLfloat); + +void glDrawArrays( GLenum mode, GLint first, GLsizei count ); #ifdef __cplusplus } diff --git a/project/jni/nanogl/include/GL/gl_entries.in b/project/jni/nanogl/include/GL/gl_entries.in index 9ca48a81c..19220c253 100644 --- a/project/jni/nanogl/include/GL/gl_entries.in +++ b/project/jni/nanogl/include/GL/gl_entries.in @@ -37,7 +37,7 @@ GL_ENTRY(void,glClearColor,float red, float green, float blue, float alpha) GL_ENTRY(void,glClearColorx,int red, int green, int blue, int alpha) GL_ENTRY(void,glClearDepthf,float depth) - GL_ENTRY(void,glClearDepthx,int depth) + GL_ENTRY(void,glClearDepthx,int depth) GL_ENTRY(void,glClearStencil,int s) GL_ENTRY(void,glClientActiveTexture,unsigned int texture) GL_ENTRY(void,glColor4f,float red, float green, float blue, float alpha) @@ -181,4 +181,18 @@ GL_ENTRY(int,eglReleaseTexImage,int dpy, int surface, int buffer) GL_ENTRY(int,eglSurfaceAttrib,int dpy, int surface, int attribute, int value) +#ifdef USE_CORE_PROFILE + GL_ENTRY(void,glOrtho,double left, double right, double bottom, double top, double zNear, double zFar) + GL_ENTRY(void,glDepthRange,double zNear, double zFar) +#endif +// fbo +GL_ENTRY(void,glGenFramebuffersOES, GLsizei n, GLuint* framebuffers) +GL_ENTRY(void,glGenRenderbuffersOES, GLsizei n, GLuint* renderbuffers) +GL_ENTRY(void,glRenderbufferStorageOES, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +GL_ENTRY(void,glBindFramebufferOES, GLenum target, GLuint framebuffer) +GL_ENTRY(void,glBindRenderbufferOES, GLenum target, GLuint renderbuffer) +GL_ENTRY(void,glFramebufferTexture2DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +GL_ENTRY(void,glDeleteRenderbuffersOES, GLsizei n, const GLuint* renderbuffers) +GL_ENTRY(void,glDeleteFramebuffersOES, GLsizei n, const GLuint* framebuffers) +GL_ENTRY(void,glFramebufferRenderbufferOES, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) diff --git a/project/jni/nanogl/include/GL/glesinterface.h b/project/jni/nanogl/include/GL/glesinterface.h index 46de9e4bd..0003ef690 100644 --- a/project/jni/nanogl/include/GL/glesinterface.h +++ b/project/jni/nanogl/include/GL/glesinterface.h @@ -34,9 +34,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define S #endif +#ifdef _WIN32 +#include //APIENTRY +#endif +#ifndef APIENTRY +#ifdef _MSC_VER +#define APIENTRY WINAPI +#else +#define APIENTRY +#endif +#endif + struct GlESInterface { - int (*eglChooseConfig) (int dpy, const int *attrib_list, int *configs, int config_size, int *num_config) S; int (*eglCopyBuffers) (int dpy, int surface, void* target) S; int (*eglCreateContext) (int dpy, int config, int share_list, const int *attrib_list) S; @@ -64,159 +74,173 @@ struct GlESInterface int (*eglTerminate) (int dpy) S; int (*eglWaitGL) (void) S; int (*eglWaitNative) (int engine) S; - void (*glActiveTexture) (unsigned int texture) S; - void (*glAlphaFunc) (unsigned int func, float ref) S; - void (*glAlphaFuncx) (unsigned int func, int ref) S; - void (*glBindTexture) (unsigned int target, unsigned int texture) S; - void (*glBlendFunc) (unsigned int sfactor, unsigned int dfactor) S; - void (*glClear) (unsigned int mask) S; - void (*glClearColor) (float red, float green, float blue, float alpha) S; - void (*glClearColorx) (int red, int green, int blue, int alpha) S; - void (*glClearDepthf) (float depth) S; - void (*glClearDepthx) (int depth) S; - void (*glClearStencil) (int s) S; - void (*glClientActiveTexture) (unsigned int texture) S; - void (*glColor4f) (float red, float green, float blue, float alpha) S; - void (*glColor4x) (int red, int green, int blue, int alpha) S; - void (*glColorMask) (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) S; - void (*glColorPointer) (int size, unsigned int type, int stride, const void *pointer) S; - void (*glCompressedTexImage2D) (unsigned int target, int level, unsigned int internalformat, int width, int height, int border, int imageSize, const void *data) S; - void (*glCompressedTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int width, int height, unsigned int format, int imageSize, const void *data) S; - void (*glCopyTexImage2D) (unsigned int target, int level, unsigned int internalformat, int x, int y, int width, int height, int border) S; - void (*glCopyTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) S; - void (*glCullFace) (unsigned int mode) S; - void (*glDeleteTextures) (int n, const unsigned int *textures) S; - void (*glDepthFunc) (unsigned int func) S; - void (*glDepthMask) (unsigned char flag) S; - void (*glDepthRangef) (float zNear, float zFar) S; - void (*glDepthRangex) (int zNear, int zFar) S; - void (*glDisable) (unsigned int cap) S; - void (*glDisableClientState) (unsigned int array) S; - void (*glDrawArrays) (unsigned int mode, int first, int count) S; - void (*glDrawElements) (unsigned int mode, int count, unsigned int type, const void *indices) S; - void (*glEnable) (unsigned int cap) S; - void (*glEnableClientState) (unsigned int array) S; - void (*glFinish) (void) S; - void (*glFlush) (void) S; - void (*glFogf) (unsigned int pname, float param) S; - void (*glFogfv) (unsigned int pname, const float *params) S; - void (*glFogx) (unsigned int pname, int param) S; - void (*glFogxv) (unsigned int pname, const int *params) S; - void (*glFrontFace) (unsigned int mode) S; - void (*glFrustumf) (float left, float right, float bottom, float top, float zNear, float zFar) S; - void (*glFrustumx) (int left, int right, int bottom, int top, int zNear, int zFar) S; - void (*glGenTextures) (int n, unsigned int *textures) S; - unsigned int (*glGetError) (void) S; - void (*glGetIntegerv) (unsigned int pname, int *params) S; - const unsigned char * (*glGetString) (unsigned int name) S; - void (*glHint) (unsigned int target, unsigned int mode) S; - void (*glLightModelf) (unsigned int pname, float param) S; - void (*glLightModelfv) (unsigned int pname, const float *params) S; - void (*glLightModelx) (unsigned int pname, int param) S; - void (*glLightModelxv) (unsigned int pname, const int *params) S; - void (*glLightf) (unsigned int light, unsigned int pname, float param) S; - void (*glLightfv) (unsigned int light, unsigned int pname, const float *params) S; - void (*glLightx) (unsigned int light, unsigned int pname, int param) S; - void (*glLightxv) (unsigned int light, unsigned int pname, const int *params) S; - void (*glLineWidth) (float width) S; - void (*glLineWidthx) (int width) S; - void (*glLoadIdentity) (void) S; - void (*glLoadMatrixf) (const float *m) S; - void (*glLoadMatrixx) (const int *m) S; - void (*glLogicOp) (unsigned int opcode) S; - void (*glMaterialf) (unsigned int face, unsigned int pname, float param) S; - void (*glMaterialfv) (unsigned int face, unsigned int pname, const float *params) S; - void (*glMaterialx) (unsigned int face, unsigned int pname, int param) S; - void (*glMaterialxv) (unsigned int face, unsigned int pname, const int *params) S; - void (*glMatrixMode) (unsigned int mode) S; - void (*glMultMatrixf) (const float *m) S; - void (*glMultMatrixx) (const int *m) S; - void (*glMultiTexCoord4f) (unsigned int target, float s, float t, float r, float q) S; - void (*glMultiTexCoord4x) (unsigned int target, int s, int t, int r, int q) S; - void (*glNormal3f) (float nx, float ny, float nz) S; - void (*glNormal3x) (int nx, int ny, int nz) S; - void (*glNormalPointer) (unsigned int type, int stride, const void *pointer) S; - void (*glOrthof) (float left, float right, float bottom, float top, float zNear, float zFar) S; - void (*glOrthox) (int left, int right, int bottom, int top, int zNear, int zFar) S; - void (*glPixelStorei) (unsigned int pname, int param) S; - void (*glPointSize) (float size) S; - void (*glPointSizex) (int size) S; - void (*glPolygonOffset) (float factor, float units) S; - void (*glPolygonOffsetx) (int factor, int units) S; - void (*glPopMatrix) (void) S; - void (*glPushMatrix) (void) S; - unsigned int (*glQueryMatrixxOES) (int mantissa[16], int exponent[16]) S; - void (*glReadPixels) (int x, int y, int width, int height, unsigned int format, unsigned int type, void *pixels) S; - void (*glRotatef) (float angle, float x, float y, float z) S; - void (*glRotatex) (int angle, int x, int y, int z) S; - void (*glSampleCoverage) (float value, unsigned char invert) S; - void (*glSampleCoveragex) (int value, unsigned char invert) S; - void (*glScalef) (float x, float y, float z) S; - void (*glScalex) (int x, int y, int z) S; - void (*glScissor) (int x, int y, int width, int height) S; - void (*glShadeModel) (unsigned int mode) S; - void (*glStencilFunc) (unsigned int func, int ref, unsigned int mask) S; - void (*glStencilMask) (unsigned int mask) S; - void (*glStencilOp) (unsigned int fail, unsigned int zfail, unsigned int zpass) S; - void (*glTexCoordPointer) (int size, unsigned int type, int stride, const void *pointer) S; - void (*glTexEnvf) (unsigned int target, unsigned int pname, float param) S; - void (*glTexEnvfv) (unsigned int target, unsigned int pname, const float *params) S; - void (*glTexEnvx) (unsigned int target, unsigned int pname, int param) S; - void (*glTexEnvxv) (unsigned int target, unsigned int pname, const int *params) S; - void (*glTexImage2D) (unsigned int target, int level, int internalformat, int width, int height, int border, unsigned int format, unsigned int type, const void *pixels) S; - void (*glTexParameterf) (unsigned int target, unsigned int pname, float param) S; - void (*glTexParameterx) (unsigned int target, unsigned int pname, int param) S; - void (*glTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int width, int height, unsigned int format, unsigned int type, const void *pixels) S; - void (*glTranslatef) (float x, float y, float z) S; - void (*glTranslatex) (int x, int y, int z) S; - void (*glVertexPointer) (int size, unsigned int type, int stride, const void *pointer) S; - void (*glViewport) (int x, int y, int width, int height) S; + void ( APIENTRY *glActiveTexture) (unsigned int texture) S; + void ( APIENTRY *glAlphaFunc) (unsigned int func, float ref) S; + void ( APIENTRY *glAlphaFuncx) (unsigned int func, int ref) S; + void ( APIENTRY *glBindTexture) (unsigned int target, unsigned int texture) S; + void ( APIENTRY *glBlendFunc) (unsigned int sfactor, unsigned int dfactor) S; + void ( APIENTRY *glClear) (unsigned int mask) S; + void ( APIENTRY *glClearColor) (float red, float green, float blue, float alpha) S; + void ( APIENTRY *glClearColorx) (int red, int green, int blue, int alpha) S; + void ( APIENTRY *glClearDepthf) (float depth) S; + void ( APIENTRY *glClearDepthx) (int depth) S; + void ( APIENTRY *glClearStencil) (int s) S; + void ( APIENTRY *glClientActiveTexture) (unsigned int texture) S; + void ( APIENTRY *glColor4f) (float red, float green, float blue, float alpha) S; + void ( APIENTRY *glColor4x) (int red, int green, int blue, int alpha) S; + void ( APIENTRY *glColorMask) (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) S; + void ( APIENTRY *glColorPointer) (int size, unsigned int type, int stride, const void *pointer) S; + void ( APIENTRY *glCompressedTexImage2D) (unsigned int target, int level, unsigned int internalformat, int width, int height, int border, int imageSize, const void *data) S; + void ( APIENTRY *glCompressedTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int width, int height, unsigned int format, int imageSize, const void *data) S; + void ( APIENTRY *glCopyTexImage2D) (unsigned int target, int level, unsigned int internalformat, int x, int y, int width, int height, int border) S; + void ( APIENTRY *glCopyTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) S; + void ( APIENTRY *glCullFace) (unsigned int mode) S; + void ( APIENTRY *glDeleteTextures) (int n, const unsigned int *textures) S; + void ( APIENTRY *glDepthFunc) (unsigned int func) S; + void ( APIENTRY *glDepthMask) (unsigned char flag) S; + void ( APIENTRY *glDepthRangef) (float zNear, float zFar) S; + void ( APIENTRY *glDepthRangex) (int zNear, int zFar) S; + void ( APIENTRY *glDisable) (unsigned int cap) S; + void ( APIENTRY *glDisableClientState) (unsigned int array) S; + void ( APIENTRY *glDrawArrays) (unsigned int mode, int first, int count) S; + void ( APIENTRY *glDrawElements) (unsigned int mode, int count, unsigned int type, const void *indices) S; + void ( APIENTRY *glEnable) (unsigned int cap) S; + void ( APIENTRY *glEnableClientState) (unsigned int array) S; + void ( APIENTRY *glFinish) (void) S; + void ( APIENTRY *glFlush) (void) S; + void ( APIENTRY *glFogf) (unsigned int pname, float param) S; + void ( APIENTRY *glFogfv) (unsigned int pname, const float *params) S; + void ( APIENTRY *glFogx) (unsigned int pname, int param) S; + void ( APIENTRY *glFogxv) (unsigned int pname, const int *params) S; + void ( APIENTRY *glFrontFace) (unsigned int mode) S; + void ( APIENTRY *glFrustumf) (float left, float right, float bottom, float top, float zNear, float zFar) S; + void ( APIENTRY *glFrustumx) (int left, int right, int bottom, int top, int zNear, int zFar) S; + void ( APIENTRY *glGenTextures) (int n, unsigned int *textures) S; + unsigned int ( APIENTRY *glGetError) (void) S; + void ( APIENTRY *glGetIntegerv) (unsigned int pname, int *params) S; + const unsigned char * ( APIENTRY *glGetString) (unsigned int name) S; + void ( APIENTRY *glHint) (unsigned int target, unsigned int mode) S; + void ( APIENTRY *glLightModelf) (unsigned int pname, float param) S; + void ( APIENTRY *glLightModelfv) (unsigned int pname, const float *params) S; + void ( APIENTRY *glLightModelx) (unsigned int pname, int param) S; + void ( APIENTRY *glLightModelxv) (unsigned int pname, const int *params) S; + void ( APIENTRY *glLightf) (unsigned int light, unsigned int pname, float param) S; + void ( APIENTRY *glLightfv) (unsigned int light, unsigned int pname, const float *params) S; + void ( APIENTRY *glLightx) (unsigned int light, unsigned int pname, int param) S; + void ( APIENTRY *glLightxv) (unsigned int light, unsigned int pname, const int *params) S; + void ( APIENTRY *glLineWidth) (float width) S; + void ( APIENTRY *glLineWidthx) (int width) S; + void ( APIENTRY *glLoadIdentity) (void) S; + void ( APIENTRY *glLoadMatrixf) (const float *m) S; + void ( APIENTRY *glLoadMatrixx) (const int *m) S; + void ( APIENTRY *glLogicOp) (unsigned int opcode) S; + void ( APIENTRY *glMaterialf) (unsigned int face, unsigned int pname, float param) S; + void ( APIENTRY *glMaterialfv) (unsigned int face, unsigned int pname, const float *params) S; + void ( APIENTRY *glMaterialx) (unsigned int face, unsigned int pname, int param) S; + void ( APIENTRY *glMaterialxv) (unsigned int face, unsigned int pname, const int *params) S; + void ( APIENTRY *glMatrixMode) (unsigned int mode) S; + void ( APIENTRY *glMultMatrixf) (const float *m) S; + void ( APIENTRY *glMultMatrixx) (const int *m) S; + void ( APIENTRY *glMultiTexCoord4f) (unsigned int target, float s, float t, float r, float q) S; + void ( APIENTRY *glMultiTexCoord4x) (unsigned int target, int s, int t, int r, int q) S; + void ( APIENTRY *glNormal3f) (float nx, float ny, float nz) S; + void ( APIENTRY *glNormal3x) (int nx, int ny, int nz) S; + void ( APIENTRY *glNormalPointer) (unsigned int type, int stride, const void *pointer) S; + void ( APIENTRY *glOrthof) (float left, float right, float bottom, float top, float zNear, float zFar) S; + void ( APIENTRY *glOrthox) (int left, int right, int bottom, int top, int zNear, int zFar) S; + void ( APIENTRY *glPixelStorei) (unsigned int pname, int param) S; + void ( APIENTRY *glPointSize) (float size) S; + void ( APIENTRY *glPointSizex) (int size) S; + void ( APIENTRY *glPolygonOffset) (float factor, float units) S; + void ( APIENTRY *glPolygonOffsetx) (int factor, int units) S; + void ( APIENTRY *glPopMatrix) (void) S; + void ( APIENTRY *glPushMatrix) (void) S; + unsigned int ( APIENTRY *glQueryMatrixxOES) (int mantissa[16], int exponent[16]) S; + void ( APIENTRY *glReadPixels) (int x, int y, int width, int height, unsigned int format, unsigned int type, void *pixels) S; + void ( APIENTRY *glRotatef) (float angle, float x, float y, float z) S; + void ( APIENTRY *glRotatex) (int angle, int x, int y, int z) S; + void ( APIENTRY *glSampleCoverage) (float value, unsigned char invert) S; + void ( APIENTRY *glSampleCoveragex) (int value, unsigned char invert) S; + void ( APIENTRY *glScalef) (float x, float y, float z) S; + void ( APIENTRY *glScalex) (int x, int y, int z) S; + void ( APIENTRY *glScissor) (int x, int y, int width, int height) S; + void ( APIENTRY *glShadeModel) (unsigned int mode) S; + void ( APIENTRY *glStencilFunc) (unsigned int func, int ref, unsigned int mask) S; + void ( APIENTRY *glStencilMask) (unsigned int mask) S; + void ( APIENTRY *glStencilOp) (unsigned int fail, unsigned int zfail, unsigned int zpass) S; + void ( APIENTRY *glTexCoordPointer) (int size, unsigned int type, int stride, const void *pointer) S; + void ( APIENTRY *glTexEnvf) (unsigned int target, unsigned int pname, float param) S; + void ( APIENTRY *glTexEnvfv) (unsigned int target, unsigned int pname, const float *params) S; + void ( APIENTRY *glTexEnvx) (unsigned int target, unsigned int pname, int param) S; + void ( APIENTRY *glTexEnvxv) (unsigned int target, unsigned int pname, const int *params) S; + void ( APIENTRY *glTexImage2D) (unsigned int target, int level, int internalformat, int width, int height, int border, unsigned int format, unsigned int type, const void *pixels) S; + void ( APIENTRY *glTexParameterf) (unsigned int target, unsigned int pname, float param) S; + void ( APIENTRY *glTexParameterx) (unsigned int target, unsigned int pname, int param) S; + void ( APIENTRY *glTexSubImage2D) (unsigned int target, int level, int xoffset, int yoffset, int width, int height, unsigned int format, unsigned int type, const void *pixels) S; + void ( APIENTRY *glTranslatef) (float x, float y, float z) S; + void ( APIENTRY *glTranslatex) (int x, int y, int z) S; + void ( APIENTRY *glVertexPointer) (int size, unsigned int type, int stride, const void *pointer) S; + void ( APIENTRY *glViewport) (int x, int y, int width, int height) S; int (*eglSwapInterval) (int dpy, int interval) S; - void (*glBindBuffer) (unsigned int target, unsigned int buffer) S; - void (*glBufferData) (unsigned int target, int size, const void *data, unsigned int usage) S; - void (*glBufferSubData) (unsigned int target, int offset,int size, const void *data) S; - void (*glClipPlanef) (unsigned int plane, const float *equation) S; - void (*glClipPlanex) (unsigned int plane, const int *equation) S; - void (*glColor4ub) (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) S; - void (*glDeleteBuffers) (int n, const unsigned int *buffers) S; - void (*glGenBuffers) (int n, unsigned int *buffers) S; - void (*glGetBooleanv) (unsigned int pname, unsigned char *params) S; - void (*glGetBufferParameteriv) (unsigned int target, unsigned int pname, int *params) S; - void (*glGetClipPlanef) (unsigned int pname, float eqn[4]) S; - void (*glGetClipPlanex) (unsigned int pname, int eqn[4]) S; - void (*glGetFixedv) (unsigned int pname, int *params) S; - void (*glGetFloatv) (unsigned int pname, float *params) S; - void (*glGetLightfv) (unsigned int light, unsigned int pname, float *params) S; - void (*glGetLightxv) (unsigned int light, unsigned int pname, int *params) S; - void (*glGetMaterialfv) (unsigned int face, unsigned int pname, float *params) S; - void (*glGetMaterialxv) (unsigned int face, unsigned int pname, int *params) S; - void (*glGetPointerv) (unsigned int pname, void **params) S; - void (*glGetTexEnvfv) (unsigned int env, unsigned int pname, float *params) S; - void (*glGetTexEnviv) (unsigned int env, unsigned int pname, int *params) S; - void (*glGetTexEnvxv) (unsigned int env, unsigned int pname, int *params) S; - void (*glGetTexParameterfv) (unsigned int target, unsigned int pname, float *params) S; - void (*glGetTexParameteriv) (unsigned int target, unsigned int pname, int *params) S; - void (*glGetTexParameterxv) (unsigned int target, unsigned int pname, int *params) S; - unsigned char (*glIsBuffer) (unsigned int buffer) S; - unsigned char (*glIsEnabled) (unsigned int cap) S; - unsigned char (*glIsTexture) (unsigned int texture) S; - void (*glPointParameterf) (unsigned int pname, float param) S; - void (*glPointParameterfv) (unsigned int pname, const float *params) S; - void (*glPointParameterx) (unsigned int pname, int param) S; - void (*glPointParameterxv) (unsigned int pname, const int *params) S; - void (*glPointSizePointerOES) (unsigned int type, int stride, const void *pointer) S; - void (*glTexEnvi) (unsigned int target, unsigned int pname, int param) S; - void (*glTexEnviv) (unsigned int target, unsigned int pname, const int *params) S; - void (*glTexParameterfv) (unsigned int target, unsigned int pname, const float *params) S; - void (*glTexParameteri) (unsigned int target, unsigned int pname, int param) S; - void (*glTexParameteriv) (unsigned int target, unsigned int pname, const int *params) S; - void (*glTexParameterxv) (unsigned int target, unsigned int pname, const int *params) S; + void ( APIENTRY *glBindBuffer) (unsigned int target, unsigned int buffer) S; + void ( APIENTRY *glBufferData) (unsigned int target, int size, const void *data, unsigned int usage) S; + void ( APIENTRY *glBufferSubData) (unsigned int target, int offset,int size, const void *data) S; + void ( APIENTRY *glClipPlanef) (unsigned int plane, const float *equation) S; + void ( APIENTRY *glClipPlanex) (unsigned int plane, const int *equation) S; + void ( APIENTRY *glColor4ub) (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) S; + void ( APIENTRY *glDeleteBuffers) (int n, const unsigned int *buffers) S; + void ( APIENTRY *glGenBuffers) (int n, unsigned int *buffers) S; + void ( APIENTRY *glGetBooleanv) (unsigned int pname, unsigned char *params) S; + void ( APIENTRY *glGetBufferParameteriv) (unsigned int target, unsigned int pname, int *params) S; + void ( APIENTRY *glGetClipPlanef) (unsigned int pname, float eqn[4]) S; + void ( APIENTRY *glGetClipPlanex) (unsigned int pname, int eqn[4]) S; + void ( APIENTRY *glGetFixedv) (unsigned int pname, int *params) S; + void ( APIENTRY *glGetFloatv) (unsigned int pname, float *params) S; + void ( APIENTRY *glGetLightfv) (unsigned int light, unsigned int pname, float *params) S; + void ( APIENTRY *glGetLightxv) (unsigned int light, unsigned int pname, int *params) S; + void ( APIENTRY *glGetMaterialfv) (unsigned int face, unsigned int pname, float *params) S; + void ( APIENTRY *glGetMaterialxv) (unsigned int face, unsigned int pname, int *params) S; + void ( APIENTRY *glGetPointerv) (unsigned int pname, void **params) S; + void ( APIENTRY *glGetTexEnvfv) (unsigned int env, unsigned int pname, float *params) S; + void ( APIENTRY *glGetTexEnviv) (unsigned int env, unsigned int pname, int *params) S; + void ( APIENTRY *glGetTexEnvxv) (unsigned int env, unsigned int pname, int *params) S; + void ( APIENTRY *glGetTexParameterfv) (unsigned int target, unsigned int pname, float *params) S; + void ( APIENTRY *glGetTexParameteriv) (unsigned int target, unsigned int pname, int *params) S; + void ( APIENTRY *glGetTexParameterxv) (unsigned int target, unsigned int pname, int *params) S; + unsigned char ( APIENTRY *glIsBuffer) (unsigned int buffer) S; + unsigned char ( APIENTRY *glIsEnabled) (unsigned int cap) S; + unsigned char ( APIENTRY *glIsTexture) (unsigned int texture) S; + void ( APIENTRY *glPointParameterf) (unsigned int pname, float param) S; + void ( APIENTRY *glPointParameterfv) (unsigned int pname, const float *params) S; + void ( APIENTRY *glPointParameterx) (unsigned int pname, int param) S; + void ( APIENTRY *glPointParameterxv) (unsigned int pname, const int *params) S; + void ( APIENTRY *glPointSizePointerOES) (unsigned int type, int stride, const void *pointer) S; + void ( APIENTRY *glTexEnvi) (unsigned int target, unsigned int pname, int param) S; + void ( APIENTRY *glTexEnviv) (unsigned int target, unsigned int pname, const int *params) S; + void ( APIENTRY *glTexParameterfv) (unsigned int target, unsigned int pname, const float *params) S; + void ( APIENTRY *glTexParameteri) (unsigned int target, unsigned int pname, int param) S; + void ( APIENTRY *glTexParameteriv) (unsigned int target, unsigned int pname, const int *params) S; + void ( APIENTRY *glTexParameterxv) (unsigned int target, unsigned int pname, const int *params) S; int (*eglBindTexImage) (int dpy, int surface, int buffer) S; int (*eglReleaseTexImage) (int dpy, int surface, int buffer) S; int (*eglSurfaceAttrib) (int dpy, int surface, int attribute, int value) S; - }; +#ifdef USE_CORE_PROFILE + void ( APIENTRY *glOrtho) (double left, double right, double bottom, double top, double zNear, double zFar) S; + void ( APIENTRY *glDepthRange) (double zNear, double zFar) S; +#endif + void ( APIENTRY *glGenFramebuffers) (unsigned int n, unsigned int* framebuffers) S; + void ( APIENTRY *glGenRenderbuffers) (unsigned int n, unsigned int* renderbuffers) S; + void ( APIENTRY *glRenderbufferStorage) (unsigned int target, unsigned int internalformat, unsigned int width, unsigned int height) S; + void ( APIENTRY *glBindFramebuffer) (unsigned int target, unsigned int framebuffer) S; + void ( APIENTRY *glBindRenderbuffer) (unsigned int target, unsigned int renderbuffer) S; + void ( APIENTRY *glFramebufferTexture2D) (unsigned int target, unsigned int attachment, unsigned int textarget, unsigned int texture, int level) S; + void ( APIENTRY *glDeleteRenderbuffers) (unsigned int n, const unsigned int* renderbuffers) S; + void ( APIENTRY *glDeleteFramebuffers) (unsigned int n, const unsigned int* framebuffers) S; + void ( APIENTRY *glFramebufferRenderbuffer) (unsigned int target, unsigned int attachment, unsigned int renderbuffertarget, unsigned int renderbuffer) S; + +}; #if !defined (__WINS__) #if defined(__TARGET_FPU_VFP) #pragma no_softfp_linkage diff --git a/project/jni/nanogl/src/eglwrap.cpp b/project/jni/nanogl/src/eglwrap.cpp index ab575195d..7237c5be7 100644 --- a/project/jni/nanogl/src/eglwrap.cpp +++ b/project/jni/nanogl/src/eglwrap.cpp @@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern "C++" GlESInterface* glEsImpl; extern "C++" void FlushOnStateChange(); - +void APIENTRY gl_unimplemented(GLenum none); EGLint eglGetError (void) { @@ -159,10 +159,14 @@ EGLContext eglGetCurrentContext (void) } EGLSurface eglGetCurrentSurface (EGLint readdraw) { + if( (void*)glEsImpl->eglGetCurrentSurface == (void*)gl_unimplemented ) + return EGL_NO_SURFACE; return glEsImpl->eglGetCurrentSurface(readdraw); } EGLDisplay eglGetCurrentDisplay (void) { + if( (void*)glEsImpl->eglGetCurrentDisplay == (void*)gl_unimplemented ) + return EGL_NO_DISPLAY; return glEsImpl->eglGetCurrentDisplay(); } diff --git a/project/jni/nanogl/src/funcnames.h b/project/jni/nanogl/src/funcnames.h new file mode 100644 index 000000000..8a88e2971 --- /dev/null +++ b/project/jni/nanogl/src/funcnames.h @@ -0,0 +1,186 @@ + "eglChooseConfig", + "eglCopyBuffers", + "eglCreateContext", + "eglCreatePbufferSurface", + "eglCreatePixmapSurface", + "eglCreateWindowSurface", + "eglDestroyContext", + "eglDestroySurface", + "eglGetConfigAttrib", + "eglGetConfigs", + "eglGetCurrentContext", + "eglGetCurrentDisplay", + "eglGetCurrentSurface", + "eglGetDisplay", + "eglGetError", + + "eglGetProcAddress", + + "eglInitialize", + "eglMakeCurrent", + "eglQueryContext", + "eglQueryString", + "eglQuerySurface", + "eglSwapBuffers", + "eglTerminate", + "eglWaitGL", + "eglWaitNative", + + + "glActiveTexture", + "glAlphaFunc", + "glAlphaFuncx", + "glBindTexture", + "glBlendFunc", + "glClear", + "glClearColor", + "glClearColorx", + "glClearDepthf", + "glClearDepthx", + "glClearStencil", + "glClientActiveTexture", + "glColor4f", + "glColor4x", + "glColorMask", + "glColorPointer", + "glCompressedTexImage2D", + "glCompressedTexSubImage2D", + "glCopyTexImage2D", + "glCopyTexSubImage2D", + "glCullFace", + "glDeleteTextures", + "glDepthFunc", + "glDepthMask", + "glDepthRangef", + "glDepthRangex", + "glDisable", + "glDisableClientState", + "glDrawArrays", + "glDrawElements", + "glEnable", + "glEnableClientState", + "glFinish", + "glFlush", + "glFogf", + "glFogfv", + "glFogx", + "glFogxv", + "glFrontFace", + "glFrustumf", + "glFrustumx", + "glGenTextures", + "glGetError", + "glGetIntegerv", + "glGetString", + "glHint", + "glLightModelf", + "glLightModelfv", + "glLightModelx", + "glLightModelxv", + "glLightf", + "glLightfv", + "glLightx", + "glLightxv", + "glLineWidth", + "glLineWidthx", + "glLoadIdentity", + "glLoadMatrixf", + "glLoadMatrixx", + "glLogicOp", + "glMaterialf", + "glMaterialfv", + "glMaterialx", + "glMaterialxv", + "glMatrixMode", + "glMultMatrixf", + "glMultMatrixx", + "glMultiTexCoord4f", + "glMultiTexCoord4x", + "glNormal3f", + "glNormal3x", + "glNormalPointer", + "glOrthof", + "glOrthox", + "glPixelStorei", + "glPointSize", + "glPointSizex", + "glPolygonOffset", + "glPolygonOffsetx", + "glPopMatrix", + "glPushMatrix", + "glQueryMatrixxOES", + "glReadPixels", + "glRotatef", + "glRotatex", + "glSampleCoverage", + "glSampleCoveragex", + "glScalef", + "glScalex", + "glScissor", + "glShadeModel", + "glStencilFunc", + "glStencilMask", + "glStencilOp", + "glTexCoordPointer", + "glTexEnvf", + "glTexEnvfv", + "glTexEnvx", + "glTexEnvxv", + "glTexImage2D", + "glTexParameterf", + "glTexParameterx", + "glTexSubImage2D", + "glTranslatef", + "glTranslatex", + "glVertexPointer", + "glViewport", + "eglSwapInterval", + "glBindBuffer", + "glBufferData", + "glBufferSubData", + "glClipPlanef", + "glClipPlanex", + "glColor4ub", + "glDeleteBuffers", + "glGenBuffers", + "glGetBooleanv", + "glGetBufferParameteriv", + "glGetClipPlanef", + "glGetClipPlanex", + "glGetFixedv", + "glGetFloatv", + "glGetLightfv", + "glGetLightxv", + "glGetMaterialfv", + "glGetMaterialxv", + "glGetPointerv", + "glGetTexEnvfv", + "glGetTexEnviv", + "glGetTexEnvxv", + "glGetTexParameterfv", + "glGetTexParameteriv", + "glGetTexParameterxv", + "glIsBuffer", + "glIsEnabled", + "glIsTexture", + "glPointParameterf", + "glPointParameterfv", + "glPointParameterx", + "glPointParameterxv", + "glPointSizePointerOES", + "glTexEnvi", + "glTexEnviv", + "glTexParameterfv", + "glTexParameteri", + "glTexParameteriv", + "glTexParameterxv", + + + "eglBindTexImage", + "eglReleaseTexImage", + "eglSurfaceAttrib", + +#ifdef USE_CORE_PROFILE + "glOrtho", + "glDepthRange", +#endif diff --git a/project/jni/nanogl/src/nanoWrap.cpp b/project/jni/nanogl/src/nanoWrap.cpp index a30a009de..cdb9313f3 100644 --- a/project/jni/nanogl/src/nanoWrap.cpp +++ b/project/jni/nanogl/src/nanoWrap.cpp @@ -146,6 +146,8 @@ struct nanotmuState struct ptrstate vertex_array; struct ptrstate color_array; struct ptrstate texture_coord_array; + struct ptrstate normal_array; + }; static struct nanotmuState tmuState0; @@ -159,6 +161,7 @@ static struct nanotmuState tmuInitState = {4,GL_FLOAT,0, NULL, GL_FALSE, GL_FALSE}, {4,GL_FLOAT,0, NULL, GL_FALSE, GL_FALSE}, {4,GL_FLOAT,0, NULL, GL_FALSE, GL_FALSE}, + {3,GL_FLOAT,0, NULL, GL_FALSE, GL_FALSE}, }; static struct nanotmuState* activetmuState = &tmuState0; @@ -206,9 +209,9 @@ struct VertexAttrib #endif }; -static VertexAttrib vertexattribs[40000]; +static VertexAttrib vertexattribs[60000]; -static GLushort indexArray[30000]; +static GLushort indexArray[50000]; static GLuint vertexCount = 0; static GLuint indexCount = 0; @@ -289,6 +292,15 @@ void ResetNanoState() { glEsImpl->glDisableClientState(GL_TEXTURE_COORD_ARRAY); } + + if (tmuState0.normal_array.enabled) + { + glEsImpl->glEnableClientState(GL_NORMAL_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_NORMAL_ARRAY); + } glEsImpl->glVertexPointer(tmuState0.vertex_array.size, tmuState0.vertex_array.type, tmuState0.vertex_array.stride, @@ -304,6 +316,11 @@ void ResetNanoState() tmuState0.color_array.stride, tmuState0.color_array.ptr); + glEsImpl->glNormalPointer( + tmuState0.normal_array.type, + tmuState0.normal_array.stride, + tmuState0.normal_array.ptr); + glEsImpl->glMatrixMode(nanoglState.matrixmode); @@ -324,7 +341,9 @@ void FlushOnStateChange() if (delayedttmuchange) { delayedttmuchange = GL_FALSE; +#ifndef USE_CORE_PROFILE glEsImpl->glActiveTexture(delayedtmutarget); +#endif } if (!vertexCount) @@ -492,6 +511,9 @@ void glEnd(void) default: break; } + if( ptrVertexAttribArray - vertexattribs > 20000 * sizeof(VertexAttrib) || + ptrIndexArray - indexArray > 15000 * sizeof(GLushort) ) + FlushOnStateChange(); } void glEnable (GLenum cap) @@ -994,7 +1016,11 @@ void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) void glOrtho (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) { FlushOnStateChange(); +#ifdef USE_CORE_PROFILE + glEsImpl->glOrtho(left,right,bottom,top, zNear,zFar); +#else glEsImpl->glOrthof(left,right,bottom,top, zNear,zFar); +#endif } void glMatrixMode (GLenum mode) @@ -1071,7 +1097,11 @@ void glDepthRange(GLclampf zNear, GLclampf zFar) nanoglState.depth_range_far = zFar; } FlushOnStateChange(); +#ifdef USE_CORE_PROFILE + glEsImpl->glDepthRange(zNear, zFar); +#else glEsImpl->glDepthRangef(zNear, zFar); +#endif } void glDepthFunc (GLenum func) @@ -1514,7 +1544,7 @@ void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indi if (arraysValid || tmuState0.vertex_array.changed || tmuState0.color_array.changed || - tmuState0.texture_coord_array.changed) + tmuState0.texture_coord_array.changed || tmuState0.normal_array.changed) { glEsImpl->glClientActiveTexture(GL_TEXTURE0); } @@ -1550,6 +1580,21 @@ void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indi tmuState0.color_array.ptr); tmuState0.color_array.changed = GL_FALSE; } + if (arraysValid || tmuState0.normal_array.changed) + { + if (tmuState0.normal_array.enabled) + { + glEsImpl->glEnableClientState(GL_NORMAL_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_NORMAL_ARRAY); + } + glEsImpl->glNormalPointer(tmuState0.normal_array.type, + tmuState0.normal_array.stride, + tmuState0.normal_array.ptr); + tmuState0.normal_array.changed = GL_FALSE; + } if (arraysValid || tmuState0.texture_coord_array.changed) { tmuState0.texture_coord_array.changed = GL_FALSE; @@ -1622,6 +1667,15 @@ void glEnableClientState(GLenum array) clientstate->color_array.enabled = GL_TRUE; clientstate->color_array.changed = GL_TRUE; + break; + case GL_NORMAL_ARRAY: + if (clientstate->normal_array.enabled) + { + return; + } + clientstate->normal_array.enabled = GL_TRUE; + clientstate->normal_array.changed = GL_TRUE; + break; case GL_TEXTURE_COORD_ARRAY: if (clientstate->texture_coord_array.enabled) @@ -1668,6 +1722,15 @@ void glDisableClientState(GLenum array) clientstate->color_array.enabled = GL_FALSE; clientstate->color_array.changed = GL_TRUE; + break; + case GL_NORMAL_ARRAY: + if (!clientstate->normal_array.enabled) + { + return; + } + clientstate->normal_array.enabled = GL_FALSE; + clientstate->normal_array.changed = GL_TRUE; + break; case GL_TEXTURE_COORD_ARRAY: if (!clientstate->texture_coord_array.enabled) @@ -1735,6 +1798,23 @@ void glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *p tmuState0.color_array.ptr = (GLvoid*)pointer; tmuState0.color_array.changed = GL_TRUE; } + +void glNormalPointer( GLenum type, GLsizei stride, const GLvoid *pointer ) + { + int size = 0; + if (tmuState0.normal_array.size == size && + tmuState0.normal_array.stride == stride && + tmuState0.normal_array.type == type && + tmuState0.normal_array.ptr == pointer) + { + return; + } + tmuState0.normal_array.size = size; + tmuState0.normal_array.stride = stride; + tmuState0.normal_array.type = type; + tmuState0.normal_array.ptr = (GLvoid*)pointer; + tmuState0.normal_array.changed = GL_TRUE; + } void glPolygonOffset( GLfloat factor, GLfloat units ) { FlushOnStateChange(); @@ -1762,11 +1842,11 @@ void glMultiTexCoord2fARB( GLenum target, GLfloat s, GLfloat t ) #endif /* Vladimir */ -void glDrawArrays( GLenum mode, int first, int count) +/*void glDrawArrays( GLenum mode, int first, int count) { FlushOnStateChange(); glEsImpl->glDrawArrays(mode, first , count); -} +}*/ void glMultMatrixf (const GLfloat *m) { FlushOnStateChange(); @@ -1840,10 +1920,201 @@ void glFrontFace (GLenum mode) FlushOnStateChange(); glEsImpl->glFrontFace(mode); } - - - // End Vladimir +void glTexEnvi (GLenum target, GLenum pname, GLint param) + { + if (target == GL_TEXTURE_ENV) + { + if (pname == GL_TEXTURE_ENV_MODE) + { + if (param == activetmuState->texture_env_mode.value) + { + return; + } + else + { + FlushOnStateChange(); + glEsImpl->glTexEnvi(target, pname, param); + activetmuState->texture_env_mode.value = param; + return; + } + } + } + FlushOnStateChange(); + glEsImpl->glTexEnvi(target, pname, param); + } + +void glMultiTexCoord3fARB(GLenum a, GLfloat b, GLfloat c, GLfloat) +{ + return glMultiTexCoord2fARB(a, b, c); +} + +void glMultiTexCoord2f(GLenum, GLfloat, GLfloat) +{ + +} +void glDrawArrays( GLenum mode, GLint first, GLsizei count ) + { + // ensure that all primitives specified between glBegin/glEnd pairs + // are rendered first, and that we have correct tmu in use.. + if( mode == GL_QUADS ) mode = GL_TRIANGLE_FAN; + FlushOnStateChange(); + // setup correct vertex/color/texcoord pointers + if (arraysValid || + tmuState0.vertex_array.changed || + tmuState0.color_array.changed || + tmuState0.texture_coord_array.changed || tmuState0.normal_array.changed) + { + glEsImpl->glClientActiveTexture(GL_TEXTURE0); + } + if (arraysValid || tmuState0.vertex_array.changed) + { + if (tmuState0.vertex_array.enabled) + { + glEsImpl->glEnableClientState(GL_VERTEX_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_VERTEX_ARRAY); + } + glEsImpl->glVertexPointer(tmuState0.vertex_array.size, + tmuState0.vertex_array.type, + tmuState0.vertex_array.stride, + tmuState0.vertex_array.ptr); + tmuState0.vertex_array.changed = GL_FALSE; + } + if (arraysValid || tmuState0.color_array.changed) + { + if (tmuState0.color_array.enabled) + { + glEsImpl->glEnableClientState(GL_COLOR_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_COLOR_ARRAY); + } + glEsImpl->glColorPointer(tmuState0.color_array.size, + tmuState0.color_array.type, + tmuState0.color_array.stride, + tmuState0.color_array.ptr); + tmuState0.color_array.changed = GL_FALSE; + } + if (arraysValid || tmuState0.normal_array.changed) + { + if (tmuState0.normal_array.enabled) + { + glEsImpl->glEnableClientState(GL_NORMAL_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_NORMAL_ARRAY); + } + glEsImpl->glNormalPointer(tmuState0.normal_array.type, + tmuState0.normal_array.stride, + tmuState0.normal_array.ptr); + tmuState0.normal_array.changed = GL_FALSE; + } + if (arraysValid || tmuState0.texture_coord_array.changed) + { + tmuState0.texture_coord_array.changed = GL_FALSE; + if (tmuState0.texture_coord_array.enabled) + { + glEsImpl->glEnableClientState(GL_TEXTURE_COORD_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + glEsImpl->glTexCoordPointer(tmuState0.texture_coord_array.size, + tmuState0.texture_coord_array.type, + tmuState0.texture_coord_array.stride, + tmuState0.texture_coord_array.ptr); + } + + if (arraysValid || tmuState1.texture_coord_array.changed) + { + tmuState1.texture_coord_array.changed = GL_FALSE; + glEsImpl->glClientActiveTexture(GL_TEXTURE1); + if (tmuState1.texture_coord_array.enabled) + { + glEsImpl->glEnableClientState(GL_TEXTURE_COORD_ARRAY); + } + else + { + glEsImpl->glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + glEsImpl->glTexCoordPointer(tmuState1.texture_coord_array.size, + tmuState1.texture_coord_array.type, + tmuState1.texture_coord_array.stride, + tmuState1.texture_coord_array.ptr); + } + + arraysValid = GL_FALSE; + glEsImpl->glDrawArrays(mode, first, count); + } +/*void glNormalPointer(GLenum type, GLsizei stride, const void *ptr) +{ + glEsImpl->glNormalPointer( type, stride, ptr ); +}*/ + +void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) +{ + FlushOnStateChange(); + glEsImpl->glCopyTexSubImage2D( target, level, xoffset, yoffset, x, y, width, height ); +} + +void glGenFramebuffers (GLsizei n, GLuint* framebuffers) +{ + FlushOnStateChange(); + glEsImpl->glGenFramebuffers( n, framebuffers ); +} +void glGenRenderbuffers( GLsizei n, GLuint* renderbuffers ) +{ + FlushOnStateChange(); + glEsImpl->glGenRenderbuffers( n, renderbuffers ); +} + +void glBindRenderbuffer(GLenum target, GLuint renderbuffer) +{ + FlushOnStateChange(); + glEsImpl->glBindRenderbuffer( target, renderbuffer ); +} + +void glBindFramebuffer(GLenum target, GLuint framebuffer)\ +{ + FlushOnStateChange(); + glEsImpl->glBindFramebuffer( target, framebuffer ); +} + +void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +{ + FlushOnStateChange(); + glEsImpl->glFramebufferRenderbuffer( target, attachment, renderbuffertarget, renderbuffer ); +} + +void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) +{ + FlushOnStateChange(); + glEsImpl->glDeleteFramebuffers(n, framebuffers); +} + +void glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) +{ + FlushOnStateChange(); + glEsImpl->glDeleteRenderbuffers( n, renderbuffers ); +} +void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ + FlushOnStateChange(); + glEsImpl->glFramebufferTexture2D(target, attachment,textarget,texture,level); +} + +void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +{ + FlushOnStateChange(); + glEsImpl->glRenderbufferStorage(target, internalformat, width, height ); +} + diff --git a/project/jni/nanogl/src/nanogl.cpp b/project/jni/nanogl/src/nanogl.cpp index 9130cecc1..c8454b079 100644 --- a/project/jni/nanogl/src/nanogl.cpp +++ b/project/jni/nanogl/src/nanogl.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include -#include + //#include @@ -42,19 +42,34 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG,__VA_ARGS__) #else +#ifndef _MSC_VER +#define LOGI(...) printf("I: "__VA_ARGS__);printf("\n") +#define LOGD(...) if(DEBUG_NANO) {printf("D: "__VA_ARGS__);printf("\n");} +#define LOGE(...) printf("E: "__VA_ARGS__);printf("\n") +#define LOGW(...) printf("W: "__VA_ARGS__);printf("\n") +#else +#define LOGI printf +#define LOGD printf +#define LOGE printf +#define LOGW printf -#define LOGI(...) printf("I: "__VA_ARGS__) -#define LOGD(...) if(DEBUG_NANO) printf("D: "__VA_ARGS__) -#define LOGE(...) printf("E: "__VA_ARGS__) -#define LOGW(...) printf("W: "__VA_ARGS__) +#endif +#endif +#ifdef _WIN32 +#include +#define dlopen(x,y) LoadLibraryA(x) +#define dlsym(x,y) (void*)GetProcAddress((HINSTANCE)x,y) +#define dlclose(x) FreeLibrary((HINSTANCE)x) +#else +#include #endif -#define GL_ENTRY(_r, _api, ...) #_api, +//#define GL_ENTRY(_r, _api, ...) #_api, static char const * const gl_names[] = { - #include "gl_entries.in" + #include "funcnames.h" NULL }; @@ -66,27 +81,21 @@ GlESInterface* glEsImpl = NULL; extern void InitGLStructs(); -static void gl_unimplemented() { - LOGE ("Called unimplemented OpenGL ES API\n"); +void APIENTRY gl_unimplemented(GLenum none) { +#ifndef USE_CORE_PROFILE + LOGE ("Called unimplemented OpenGL ES API\n"); +#endif } void *nanoGL_GetProcAddress(const char *name) { -#if defined(__MULTITEXTURE_SUPPORT__) - if (!strcmp(procname, "glMultiTexCoord2fARB")) - { - return (void*)&glMultiTexCoord2fARB; - } - else if (!strcmp(procname, "glActiveTextureARB")) - { - return (void*)&glActiveTexture; - } - else if (!strcmp(procname, "glClientActiveTextureARB")) - { - return (void*)&glClientActiveTexture; - } + void *addr = NULL; +#ifdef XASH_SDL + addr = SDL_GL_GetProcAddress( name ); + if( !addr ) #endif - return dlsym(glesLib, name); + addr = dlsym(glesLib, name); + return addr; } static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void * default_func ) @@ -112,6 +121,19 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void f = dlsym(lib, *api); // try libGLESxx_CM.so +#ifdef USE_CORE_PROFILE + // Hack: try ARB and EXT suffix + if (f == NULL) { + char namearb[256]; + snprintf( namearb, 256, "%sARB", *api ); + f = dlsym( lib, namearb ); + } + if (f == NULL) { + char namearb[256]; + snprintf( namearb, 256, "%sEXT", *api ); + f = dlsym( lib, namearb ); + } +#endif if (f == NULL) { LOGW( "<%s> not found in %s. Trying libEGL.so.", *api, name); //driver); @@ -121,14 +143,24 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void if ( f == NULL ) { LOGE ( "<%s> not found in libEGL.so", *api); - f = default_func; //(void*)gl_unimplemented; + if( glEsImpl->eglGetProcAddress && ( (void*)glEsImpl->eglGetProcAddress != (void*)gl_unimplemented ) ) + f = (void*)glEsImpl->eglGetProcAddress( *api ); + if(f == NULL) + f = (void*)default_func; //(void*)gl_unimplemented; + } else { LOGD ("<%s> @ 0x%p\n", *api, f); } } - else - f = default_func; + else + { + LOGE ( "libEGL.so not loaded!"); + if( glEsImpl->eglGetProcAddress && ( (void*)glEsImpl->eglGetProcAddress != (void*)gl_unimplemented ) ) + f = (void*)glEsImpl->eglGetProcAddress( *api ); + if( !f ) + f = (void*)default_func; + } } else { LOGD ("<%s> @ 0x%p\n", *api, f); @@ -136,7 +168,7 @@ static int CreateGlEsInterface( const char * name, void * lib, void * lib1, void *ptr++ = f; api++; - } + } return 1; } @@ -151,6 +183,60 @@ static int loadDriver(const char * name) { /** * Init */ +#ifdef _WIN32 +int nanoGL_Init() +{ + const char * lib1 = "opengl32.dll"; // Has both gl* & egl* funcs SDK < 1.5 + const char * lib2 = "opengl32.dll"; // Only gl* funcs SDK >= 1.5 + const char * lib3 = "opengl32.dll"; // Only egl* funcs SDK >= 1.5 + const char * driver; + + // load lib + LOGI("nanoGL: Init loading driver %s\n", lib1); + //LOG (ANDROID_LOG_DEBUG, LOG_TAG, "nanoGL: Init loading driver %s\n", lib1); + + if ( ! loadDriver(lib1) ) + { + LOGE("Failed to load driver %s. Trying %s\n", lib1, lib2); + + if ( ! loadDriver(lib2) ) { + LOGE ("Failed to load %s.\n", lib2); + return 0; + } + else + driver = lib2; + } + else + driver = lib1; + + void * eglLib; + + //if ( strcmp(driver, lib2) == 0 ) { + LOGD ("**** Will Load EGL subs from %s ****", lib3); + + eglLib = dlopen(lib3, RTLD_NOW | RTLD_LOCAL); + + if ( ! eglLib ) { + LOGE ( "Failed to load %s", lib3); + } + //} + + // Load API gl* for 1.5+ else egl* gl* + //if (CreateGlEsInterface(driver, glesLib, eglLib, NULL) == -1) + if ( !CreateGlEsInterface(driver, glesLib, eglLib, (void *) gl_unimplemented) == -1) + { + // release lib + LOGE ( "CreateGlEsInterface failed."); + + dlclose(glesLib); + return 0; + } + + // Init nanoGL + InitGLStructs(); + return 1; +} +#else int nanoGL_Init() { const char * lib1 = "libGLESv1_CM.so"; // Has both gl* & egl* funcs SDK < 1.5 @@ -199,21 +285,33 @@ int nanoGL_Init() return 0; } +#ifdef __ANDROID__ + // somewhy it does not initialize correctly + *((void**)&glEsImpl->glGenFramebuffers) = (void*)glEsImpl->eglGetProcAddress( "glGenFramebuffersOES" ); + *((void**)&glEsImpl->glGenRenderbuffers) = (void*)glEsImpl->eglGetProcAddress( "glGenRenderbuffersOES" ); + *((void**)&glEsImpl->glRenderbufferStorage) = (void*)glEsImpl->eglGetProcAddress( "glRenderbufferStorageOES" ); + *((void**)&glEsImpl->glBindFramebuffer) = (void*)glEsImpl->eglGetProcAddress( "glBindFramebufferOES" ); + *((void**)&glEsImpl->glBindRenderbuffer) = (void*)glEsImpl->eglGetProcAddress( "glBindRenderbufferOES" ); + *((void**)&glEsImpl->glFramebufferTexture2D) = (void*)glEsImpl->eglGetProcAddress( "glFramebufferTexture2DOES" ); + *((void**)&glEsImpl->glDeleteRenderbuffers) = (void*)glEsImpl->eglGetProcAddress( "glDeleteRenderbuffersOES" ); + *((void**)&glEsImpl->glDeleteFramebuffers) = (void*)glEsImpl->eglGetProcAddress( "glDeleteFramebuffersOES" ); + *((void**)&glEsImpl->glFramebufferRenderbuffer) = (void*)glEsImpl->eglGetProcAddress( "glFramebufferRenderbufferOES" ); +#endif + // Init nanoGL InitGLStructs(); return 1; } - +#endif void nanoGL_Destroy() { LOGD ("nanoGL_Destroy"); if (glEsImpl) { - free( glEsImpl); + free( glEsImpl); glEsImpl = NULL; } // release lib dlclose(glesLib); } -