X-Git-Url: http://deadsoftware.ru/gitweb?p=nanogl.git;a=blobdiff_plain;f=nanoWrap.cpp;h=fa3829e35aefd1c22e42c13e43a1db9fdcbfae00;hp=c13aea311d72a7f902275de277d4f156227a7039;hb=30b7a31233e8f4b52e7a93768250391db5dc32b7;hpb=3bfb0b2c9c04f5463e75b604fd11c042eb3b3ff1 diff --git a/nanoWrap.cpp b/nanoWrap.cpp index c13aea3..fa3829e 100644 --- a/nanoWrap.cpp +++ b/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}, + {0,GL_FLOAT,0, NULL, GL_FALSE, GL_FALSE}, }; static struct nanotmuState* activetmuState = &tmuState0; @@ -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); @@ -1524,7 +1541,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); } @@ -1560,6 +1577,22 @@ 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->glColorPointer(tmuState0.normal_array.size, + 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; @@ -1632,6 +1665,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) @@ -1678,6 +1720,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) @@ -1745,6 +1796,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(); @@ -1850,10 +1918,103 @@ 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 pglMultiTexCoord3f(GLenum, GLfloat, GLfloat, GLfloat) +{ + +} +void pglMultiTexCoord2f(GLenum, GLfloat, GLfloat) +{ +} -// End Vladimir +/*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->glGenFramebuffers( 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 ); +}