wined3d: Fixed some typos and prevented divide by 0.

This commit is contained in:
Vitaly Budovski 2006-02-25 20:50:27 +11:00 committed by Alexandre Julliard
parent d6201e2375
commit c8480e25e7
1 changed files with 21 additions and 18 deletions

View File

@ -3502,7 +3502,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, D3DRENDE
{ {
/* /*
* POINTSCALEENABLE controls how point size value is treated. If set to * POINTSCALEENABLE controls how point size value is treated. If set to
* true, the point size is scaled with repsect to height of viewport. * true, the point size is scaled with respect to height of viewport.
* When set to false point size is in pixels. * When set to false point size is in pixels.
* *
* http://msdn.microsoft.com/library/en-us/directx9_c/point_sprites.asp * http://msdn.microsoft.com/library/en-us/directx9_c/point_sprites.asp
@ -3510,28 +3510,31 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, D3DRENDE
/* Default values */ /* Default values */
GLfloat att[3] = {1.0f, 0.0f, 0.0f}; GLfloat att[3] = {1.0f, 0.0f, 0.0f};
/* /*
* Minium valid point size for OpenGL is 1.0f. For Direct3D it is 0.0f. * Minimum valid point size for OpenGL is 1.0f. For Direct3D it is 0.0f.
* This means that OpenGL will clamp really small point sizes to 1.0f. * This means that OpenGL will clamp really small point sizes to 1.0f.
* To correct for this we need to multiply by the scale factor when sizes * To correct for this we need to multiply by the scale factor when sizes
* are less than 1.0f. scale_factor = 1.0f / point_size. * are less than 1.0f. scale_factor = 1.0f / point_size.
*/ */
GLfloat pointSize = *((float*)&This->stateBlock->renderState[D3DRS_POINTSIZE]); GLfloat pointSize = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSIZE]);
GLfloat scaleFactor; if(pointSize > 0.0f) {
if(pointSize < 1.0f) { GLfloat scaleFactor;
scaleFactor = pointSize * pointSize;
} else { if(pointSize < 1.0f) {
scaleFactor = 1.0f; scaleFactor = pointSize * pointSize;
} } else {
scaleFactor = 1.0f;
if(This->stateBlock->renderState[WINED3DRS_POINTSCALEENABLE]) { }
att[0] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_A]) /
(This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor); if(This->stateBlock->renderState[WINED3DRS_POINTSCALEENABLE]) {
att[1] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_B]) / att[0] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_A]) /
(This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor); (This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor);
att[2] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_C]) / att[1] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_B]) /
(This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor); (This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor);
att[2] = *((float*)&This->stateBlock->renderState[WINED3DRS_POINTSCALE_C]) /
(This->stateBlock->viewport.Height * This->stateBlock->viewport.Height * scaleFactor);
}
} }
if(GL_SUPPORT(ARB_POINT_PARAMETERS)) { if(GL_SUPPORT(ARB_POINT_PARAMETERS)) {