Пример #1
0
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;
	}
}