summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 09d6668)
raw | patch | inline | side by side (parent: 09d6668)
author | a1batross <a1ba.omarov@gmail.com> | |
Fri, 4 Nov 2016 15:17:25 +0000 (18:17 +0300) | ||
committer | a1batross <a1ba.omarov@gmail.com> | |
Fri, 4 Nov 2016 15:17:25 +0000 (18:17 +0300) |
nanoWrap.cpp | patch | blob | history |
diff --git a/nanoWrap.cpp b/nanoWrap.cpp
index e159046488ad94dbd24f21818ec451b63992eea3..b46b4c796cf1dff53a3d1beea2b600141a8f48b4 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,
}
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( );