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; }
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; }
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; } }