Пример #1
0
void glMaterialfv (GLenum face, GLenum pname, const GLfloat *params)
{
	switch (pname) {
	case GL_AMBIENT:
		pspgl_curctx->material.ambient = COLOR4(params);

		/* material ambient is overloaded by glColor() */
		if (getReg(CMD_ENA_LIGHTING) & 0xff) {
			sendCommandi(CMD_MATERIAL_AMB_C, pspgl_curctx->material.ambient);
			sendCommandi(CMD_MATERIAL_AMB_A, pspgl_curctx->material.ambient >> 24);
		}
		break;
	case GL_EMISSION:
		sendCommandi(CMD_MATERIAL_EMS_C, COLOR3(params));
		break;
	case GL_DIFFUSE:
		sendCommandi(CMD_MATERIAL_DIF_C, COLOR3(params));
		break;
	case GL_AMBIENT_AND_DIFFUSE:
		glMaterialfv(face, GL_AMBIENT, params);
		glMaterialfv(face, GL_DIFFUSE, params);
		break;
	case GL_SPECULAR:
		sendCommandi(CMD_MATERIAL_SPC_C, COLOR3(params));
		break;
	case GL_SHININESS:
		sendCommandf(CMD_MATERIAL_SPEC_POW, params[0]);
		break;
	default:
		GLERROR(GL_INVALID_ENUM);
		return;
	}
void IRenderPipeline3D::PixelShader_DrawTriangles(RasterizedFragment& inVertex)
{
	COLOR3 outColor;
	//if texture mapping is disabled, (1,1,1) will be returned to apply multiplication
	COLOR3 texSampleColor = mFunction_SampleTexture(inVertex.texcoord.x, inVertex.texcoord.y);
	outColor =COLOR3(inVertex.color.x, inVertex.color.y, inVertex.color.z) * texSampleColor;
	m_pOutColorBuffer->at(inVertex.pixelY*mBufferWidth + inVertex.pixelX) = outColor;
}
Пример #3
0
COLOR3 IPicture::GetPixel(UINT x, UINT y)
{
	if (x<mWidth && y<mHeight)
	{
		UINT index = y*mWidth + x;
		return m_pColorBuffer->at(index);
	}
	return COLOR3(255, 0, 0);
}
void IRenderPipeline3D::PixelShader_DrawPoints(RasterizedFragment & inVertex)
{
	COLOR3 outColor;
	outColor = COLOR3(inVertex.color.x, inVertex.color.y, inVertex.color.z);
	
	//draw a bigger point (2x2 pixel)
	int px1 = Clamp(inVertex.pixelX - 1, 0, mBufferWidth);
	int px2 = Clamp(inVertex.pixelX + 1, 0, mBufferWidth);
	int py1 = Clamp(inVertex.pixelY - 1, 0, mBufferHeight);
	int py2 = Clamp(inVertex.pixelY +1, 0, mBufferHeight);
	for (int i = px1;i < px2;i++)
		for (int j = py1;j < py2;j++)
			m_pOutColorBuffer->at(j*mBufferWidth +i) = outColor;
}
Пример #5
0
void glLightModelfv (GLenum pname, const GLfloat *params)
{
	switch (pname) {
	case GL_LIGHT_MODEL_AMBIENT:
		sendCommandi(CMD_AMBIENT_COLOR, COLOR3(params));
		sendCommandi(CMD_AMBIENT_ALPHA, (int) (255.0 * CLAMPF(params[3])));
		break;
	case GL_LIGHT_MODEL_COLOR_CONTROL:
		sendCommandi(CMD_LIGHTMODEL,
			     (params[0] == GL_SEPARATE_SPECULAR_COLOR) ? 1 : 0);
		break;
	default:
		GLERROR(GL_INVALID_ENUM);
		return;
	}
}