diff --git a/nanoWrap.cpp b/nanoWrap.cpp
index e159046488ad94dbd24f21818ec451b63992eea3..420ea78269ad86e21c4b9c09f4b6a48ab20dabda 100644 (file)
--- a/nanoWrap.cpp
+++ b/nanoWrap.cpp
GLboolean scissor_test;
GLboolean stencil_test;
GLboolean depthmask;
+ GLboolean stupidglesbug;
GLclampf depth_range_near;
GLclampf depth_range_far;
GLenum depth_func;
static struct nanoState nanoglState;
static struct nanoState nanoglInitState =
- {
+{
GL_FALSE,
GL_FALSE,
GL_FALSE,
GL_FALSE,
GL_FALSE,
GL_TRUE,
+ GL_FALSE,
0.0f,
1.0f,
GL_LESS,
static struct nanotmuState *activetmuState = &tmuState0;
-extern "C++" GlESInterface *glEsImpl;
+extern GlESInterface *glEsImpl;
static GLenum wrapperPrimitiveMode = GL_QUADS;
GLboolean useTexCoordArray = GL_FALSE;
}
void glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
-{
- currentVertexAttrib.red = (unsigned char)ClampTo255( red * 255.0f );
- currentVertexAttrib.green = (unsigned char)ClampTo255( green * 255.0f );
- currentVertexAttrib.blue = (unsigned char)ClampTo255( blue * 255.0f );
+{
+ if( nanoglState.stupidglesbug )
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( ( red * alpha ) * 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( ( green * alpha ) * 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( ( blue * alpha ) * 255.0f );
+ }
+ else
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( red * 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( green * 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( blue * 255.0f );
+ }
currentVertexAttrib.alpha = (unsigned char)ClampTo255( alpha * 255.0f );
}
}
void glColor4fv( const GLfloat *v )
-{
- currentVertexAttrib.red = (unsigned char)ClampTo255( v[0] * 255.0f );
- currentVertexAttrib.green = (unsigned char)ClampTo255( v[1] * 255.0f );
- currentVertexAttrib.blue = (unsigned char)ClampTo255( v[2] * 255.0f );
+{
+ if( nanoglState.stupidglesbug )
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( ( v[0] * v[3] ) * 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( ( v[1] * v[3] ) * 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( ( v[2] * v[3] ) * 255.0f );
+ }
+ else
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( v[0] * 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( v[1] * 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( v[2] * 255.0f );
+ }
currentVertexAttrib.alpha = (unsigned char)ClampTo255( v[3] * 255.0f );
}
void glColor4ubv( const GLubyte *v )
{
//*((unsigned int*)(¤tVertexAttrib.red)) = *((unsigned int*)(v));
- currentVertexAttrib.red = v[0];
- currentVertexAttrib.green = v[1];
- currentVertexAttrib.blue = v[2];
+ if( nanoglState.stupidglesbug )
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( v[0] * v[3] / 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( v[1] * v[3] / 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( v[2] * v[3] / 255.0f );
+ }
+ else
+ {
+ currentVertexAttrib.red = v[0];
+ currentVertexAttrib.green = v[1];
+ currentVertexAttrib.blue = v[2];
+ }
currentVertexAttrib.alpha = v[3];
}
void glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
{
- currentVertexAttrib.red = red;
- currentVertexAttrib.green = green;
- currentVertexAttrib.blue = blue;
+ if( nanoglState.stupidglesbug )
+ {
+ currentVertexAttrib.red = (unsigned char)ClampTo255( red * alpha / 255.0f );
+ currentVertexAttrib.green = (unsigned char)ClampTo255( green * alpha / 255.0f );
+ currentVertexAttrib.blue = (unsigned char)ClampTo255( blue * alpha / 255.0f );
+ }
+ else
+ {
+ currentVertexAttrib.red = red;
+ currentVertexAttrib.green = green;
+ currentVertexAttrib.blue = blue;
+ }
currentVertexAttrib.alpha = alpha;
}
{
return;
}
+
+ if( sfactor == GL_SRC_ALPHA && dfactor == GL_ONE )
+ {
+ sfactor = GL_ONE; // workaround gles bug
+ nanoglState.stupidglesbug = GL_TRUE;
+ }
+ else
+ nanoglState.stupidglesbug = GL_FALSE;
+
nanoglState.sfactor = sfactor;
nanoglState.dfactor = dfactor;
FlushOnStateChange( );
{
glEsImpl->glNormalPointer( type, stride, ptr );
}*/
-
+/*
void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height )
{
FlushOnStateChange( );
@@ -2110,4 +2157,4 @@ void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width,
{
FlushOnStateChange( );
glEsImpl->glRenderbufferStorage( target, internalformat, width, height );
-}
+}*/