void RenderState::apply(GLWrapper & gl) const { static GLenum last_blendequation_rgb = GL_FUNC_ADD; static GLenum last_blendequation_alpha = GL_FUNC_ADD; static GLenum last_blend_src_rgb = GL_ONE; static GLenum last_blend_src_alpha = GL_ONE; static GLenum last_blend_dst_rgb = GL_ZERO; static GLenum last_blend_dst_alpha = GL_ZERO; switch (pname) { case GL_DEPTH_FUNC: gl.DepthFunc(param[0]); break; case GL_DEPTH_WRITEMASK: gl.DepthMask(param[0]); break; case GL_CULL_FACE_MODE: gl.CullFace(param[0]); break; case GL_FRONT_FACE: gl.FrontFace(param[0]); break; case GL_POLYGON_MODE: gl.PolygonMode(param[0]); break; case GL_POLYGON_OFFSET_FACTOR: gl.PolygonOffset(fparam[0], fparam[1]); break; case GL_SAMPLE_COVERAGE_VALUE: gl.SampleCoverage(fparam[0], (fparam[1] != 0)); break; case GL_SAMPLE_MASK_VALUE: gl.SampleMaski(0, param[0]); break; case GL_LINE_SMOOTH_HINT: case GL_POLYGON_SMOOTH_HINT: case GL_FRAGMENT_SHADER_DERIVATIVE_HINT: gl.Hint(pname, param[0]); break; case GL_BLEND_EQUATION_RGB: last_blendequation_rgb = param[0]; gl.BlendEquationSeparate(last_blendequation_rgb, last_blendequation_alpha); break; case GL_BLEND_EQUATION_ALPHA: last_blendequation_alpha = param[0]; gl.BlendEquationSeparate(last_blendequation_rgb, last_blendequation_alpha); break; case GL_BLEND_SRC_RGB: last_blend_src_rgb = param[0]; gl.BlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); break; case GL_BLEND_SRC_ALPHA: last_blend_src_alpha = param[0]; gl.BlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); break; case GL_BLEND_DST_RGB: last_blend_dst_rgb = param[0]; gl.BlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); break; case GL_BLEND_DST_ALPHA: last_blend_dst_alpha = param[0]; gl.BlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); break; default: assert(0 && "Don't know how to apply state variable"); break; } }