--- old/modules/graphics/src/main/java/com/sun/prism/d3d/D3DContext.java 2013-12-02 16:38:57.154813100 +0400 +++ new/modules/graphics/src/main/java/com/sun/prism/d3d/D3DContext.java 2013-12-02 16:38:56.990803700 +0400 @@ -186,6 +186,21 @@ return res == D3D_OK; } + /** + * OpenGL projection transform use z-range of [-1, 1] while D3D expects it + * to be [0, 1], so we need to adjust the matrix, see RT-32880. + */ + + private GeneralTransform3D adjustClipSpace(GeneralTransform3D projViewTx) { + double[] m = projViewTx.get(null); + m[8] = (m[8] + m[12])/2; + m[9] = (m[9] + m[13])/2; + m[10] = (m[10] + m[14])/2; + m[11] = (m[11] + m[15])/2; + projViewTx.set(m); + return projViewTx; + } + @Override protected State updateRenderTarget(RenderTarget target, NGCamera camera, boolean depthTest) { @@ -209,7 +224,7 @@ } // Set projection view matrix - tempTx = camera.getProjViewTx(tempTx); + tempTx = adjustClipSpace(camera.getProjViewTx(tempTx)); res = nSetProjViewMatrix(pContext, depthTest, tempTx.get(0), tempTx.get(1), tempTx.get(2), tempTx.get(3), tempTx.get(4), tempTx.get(5), tempTx.get(6), tempTx.get(7),