Vitaly Budovski : d3d8: Fixed point sprite scaling when size < 1.0f.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Feb 4 11:15:05 CST 2006
Module: wine
Branch: refs/heads/master
Commit: d68f7a68c0e81d8a9544542dffe16f1eac019d78
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d68f7a68c0e81d8a9544542dffe16f1eac019d78
Author: Vitaly Budovski <vbudovsk at cs.rmit.edu.au>
Date: Sat Feb 4 17:14:38 2006 +0100
d3d8: Fixed point sprite scaling when size < 1.0f.
---
dlls/d3d8/device.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index ffa18a5..d1f7657 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -2987,13 +2987,28 @@ HRESULT WINAPI IDirect3DDevice8Impl_Se
/* Default values */
GLfloat att[3] = {1.0f, 0.0f, 0.0f};
+
+ /*
+ * Minium 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.
+ * 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.
+ */
+ GLfloat pointSize = *((float*)&This->StateBlock->renderstate[D3DRS_POINTSIZE]);
+ GLfloat scaleFactor;
+ if(pointSize < 1.0f) {
+ scaleFactor = pointSize * pointSize;
+ } else {
+ scaleFactor = 1.0f;
+ }
+
if(This->StateBlock->renderstate[D3DRS_POINTSCALEENABLE]) {
att[0] = *((float*)&This->StateBlock->renderstate[D3DRS_POINTSCALE_A]) /
- (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height);
+ (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height * scaleFactor);
att[1] = *((float*)&This->StateBlock->renderstate[D3DRS_POINTSCALE_B]) /
- (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height);
+ (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height * scaleFactor);
att[2] = *((float*)&This->StateBlock->renderstate[D3DRS_POINTSCALE_C]) /
- (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height);
+ (This->StateBlock->viewport.Height * This->StateBlock->viewport.Height * scaleFactor);
}
if(GL_SUPPORT(ARB_POINT_PARAMETERS)) {
More information about the wine-cvs
mailing list