modules/graphics/src/main/java/com/sun/prism/d3d/D3DContext.java
Print this page
@@ -31,10 +31,11 @@
import com.sun.javafx.geom.transform.BaseTransform;
import com.sun.javafx.geom.transform.GeneralTransform3D;
import com.sun.javafx.sg.prism.NGCamera;
import com.sun.javafx.sg.prism.NGDefaultCamera;
import com.sun.prism.CompositeMode;
+import com.sun.prism.Graphics;
import com.sun.prism.MeshView;
import com.sun.prism.RTTexture;
import com.sun.prism.RenderTarget;
import com.sun.prism.Texture;
import com.sun.prism.impl.PrismSettings;
@@ -83,11 +84,11 @@
private State state;
private boolean isLost = false;
private final long pContext;
- NGCamera camera = null;
+ private Vec3d cameraPos = new Vec3d();
private int targetWidth = 0, targetHeight = 0;
private final D3DResourceFactory factory;
public static final int NUM_QUADS = PrismSettings.superShader ? 4096 : 256;
@@ -213,11 +214,10 @@
// if render target wasn't changed
if (res == D3D_OK) {
resetLastClip(state);
}
- this.camera = camera;
targetWidth = target.getPhysicalWidth();
targetHeight = target.getPhysicalHeight();
// Need to validate the camera before getting its computed data.
if (camera instanceof NGDefaultCamera) {
@@ -240,13 +240,13 @@
tempTx.get(4), tempTx.get(5), tempTx.get(6), tempTx.get(7),
tempTx.get(8), tempTx.get(9), tempTx.get(10), tempTx.get(11),
tempTx.get(12), tempTx.get(13), tempTx.get(14), tempTx.get(15));
validate(res);
- tempVec3d = camera.getPositionInWorld(tempVec3d);
-// System.err.println("Camera position in world = " + tempVec3d);
- res = nSetCameraPosition(pContext, tempVec3d.x, tempVec3d.y, tempVec3d.z);
+ // update camera position; this will be uploaded to the shader
+ // when we switch to 3D state
+ cameraPos = camera.getPositionInWorld(cameraPos);
return state;
}
@Override
@@ -542,12 +542,18 @@
void setPointLight(long nativeMeshView, int index, float x, float y, float z, float r, float g, float b, float w) {
nSetPointLight(pContext, nativeMeshView, index, x, y, z, r, g, b, w);
}
- void renderMeshView(long nativeMeshView, BaseTransform transformNoClone) {
- updateWorldTransform(transformNoClone);
+ void renderMeshView(long nativeMeshView, Graphics g) {
+ updateWorldTransform(g.getTransformNoClone());
+ float pixelScaleFactor = g.getPixelScaleFactor();
+ int res = nSetCameraPosition(pContext,
+ cameraPos.x * pixelScaleFactor,
+ cameraPos.y * pixelScaleFactor,
+ cameraPos.z * pixelScaleFactor);
+ validate(res);
nRenderMeshView(pContext, nativeMeshView);
}
@Override
public void blit(RTTexture srcRTT, RTTexture dstRTT,