public void WriteRawConstant( int physicalIndex, ColorEx color, int count ) #endif { // write either the number requested (for packed types) or up to 4 var arr = new float[4]; color.ToArrayRGBA( arr ); _writeRawConstants( physicalIndex, arr, Utility.Min( count, 4 ) ); }
public override void SetTextureBorderColor( int stage, ColorEx borderColor ) { borderColor.ToArrayRGBA( _tempColorVals ); if (ActivateGLTextureUnit(stage)) { Gl.glTexParameterfv( textureTypes[ stage ], Gl.GL_TEXTURE_BORDER_COLOR, _tempColorVals ); ActivateGLTextureUnit( 0 ); } }
public override void SetFog(FogMode mode, ColorEx color, Real density, Real start, Real end) { int fogMode; switch ( mode ) { case FogMode.Exp: fogMode = Gl.GL_EXP; break; case FogMode.Exp2: fogMode = Gl.GL_EXP2; break; case FogMode.Linear: fogMode = Gl.GL_LINEAR; break; default: if ( fogEnabled ) { Gl.glDisable( Gl.GL_FOG ); fogEnabled = false; } return; } // switch if (!fogEnabled) { Gl.glEnable( Gl.GL_FOG ); fogEnabled = true; } Gl.glFogi( Gl.GL_FOG_MODE, fogMode ); // fog color values color.ToArrayRGBA( _tempColorVals ); Gl.glFogfv( Gl.GL_FOG_COLOR, _tempColorVals ); Gl.glFogf( Gl.GL_FOG_DENSITY, density ); Gl.glFogf( Gl.GL_FOG_START, start ); Gl.glFogf( Gl.GL_FOG_END, end ); // TODO: Fog hints maybe? }
public override void SetSurfaceParams(ColorEx ambient, ColorEx diffuse, ColorEx specular, ColorEx emissive, Real shininess, TrackVertexColor tracking) { if (tracking == TrackVertexColor.None) { var gt = Gl.GL_DIFFUSE; // There are actually 15 different combinations for tracking, of which // GL only supports the most used 5. This means that we have to do some // magic to find the best match. NOTE: // GL_AMBIENT_AND_DIFFUSE != GL_AMBIENT | GL__DIFFUSE if ((tracking & TrackVertexColor.Ambient) != 0) { if ((tracking & TrackVertexColor.Diffuse) != 0) { gt = Gl.GL_AMBIENT_AND_DIFFUSE; } else { gt = Gl.GL_AMBIENT; } } else if ((tracking & TrackVertexColor.Diffuse) != 0) { gt = Gl.GL_DIFFUSE; } else if ((tracking & TrackVertexColor.Specular) != 0) { gt = Gl.GL_SPECULAR; } else if ((tracking & TrackVertexColor.Emissive) != 0) { gt = Gl.GL_EMISSION; } Gl.glColorMaterial(Gl.GL_FRONT_AND_BACK, gt); Gl.glEnable(Gl.GL_COLOR_MATERIAL); } else { Gl.glDisable(Gl.GL_COLOR_MATERIAL); } var vals = _tempColorVals; diffuse.ToArrayRGBA( vals ); Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_DIFFUSE, vals); ambient.ToArrayRGBA( vals ); Gl.glMaterialfv( Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT, vals ); specular.ToArrayRGBA( vals ); Gl.glMaterialfv( Gl.GL_FRONT_AND_BACK, Gl.GL_SPECULAR, vals ); emissive.ToArrayRGBA(vals); Gl.glMaterialfv( Gl.GL_FRONT_AND_BACK, Gl.GL_EMISSION, vals ); Gl.glMaterialf( Gl.GL_FRONT_AND_BACK, Gl.GL_SHININESS, shininess ); }
/// <summary> /// /// </summary> /// <param name="ambient"></param> /// <param name="diffuse"></param> /// <param name="specular"></param> /// <param name="emissive"></param> /// <param name="shininess"></param> public override void SetSurfaceParams(ColorEx ambient, ColorEx diffuse, ColorEx specular, ColorEx emissive, float shininess) { float[] vals = tempColorVals; // ambient //if(lastAmbient == null || lastAmbient.CompareTo(ambient) != 0) { ambient.ToArrayRGBA(vals); Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT, vals); lastAmbient = ambient; //} // diffuse //if(lastDiffuse == null || lastDiffuse.CompareTo(diffuse) != 0) { vals[0] = diffuse.r; vals[1] = diffuse.g; vals[2] = diffuse.b; vals[3] = diffuse.a; Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_DIFFUSE, vals); lastDiffuse = diffuse; //} // specular //if(lastSpecular == null || lastSpecular.CompareTo(specular) != 0) { vals[0] = specular.r; vals[1] = specular.g; vals[2] = specular.b; vals[3] = specular.a; Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_SPECULAR, vals); lastSpecular = specular; //} // emissive //if(lastEmissive == null || lastEmissive.CompareTo(emissive) != 0) { vals[0] = emissive.r; vals[1] = emissive.g; vals[2] = emissive.b; vals[3] = emissive.a; Gl.glMaterialfv(Gl.GL_FRONT_AND_BACK, Gl.GL_EMISSION, vals); lastEmissive = emissive; //} // shininess //if(lastShininess != shininess) { Gl.glMaterialf(Gl.GL_FRONT_AND_BACK, Gl.GL_SHININESS, shininess); lastShininess = shininess; //} }
public void SetNamedConstant(string name, ColorEx value) { var floats = new float[4]; value.ToArrayRGBA( floats ); SetNamedConstant(name, floats); }