/** * gets the redirect URL as workaround for opening a new window or refreshing a window (Noscript * version) */ private String getWindowOpener() { String result = ""; IServiceStateInfo stateInfo = ContextProvider.getStateInfo(); WebForm activeForm = FormManager.getActive(); WebForm[] allForms = FormManager.getAll(); boolean finished = false; for (int i = 0; !finished && i < allForms.length; i++) { WebForm form = allForms[i]; IFormAdapter formAdapter = WebFormUtil.getFormAdapter(form); if (stateInfo.isExpired()) { if (!formAdapter.getWindowOpenerBuffer().equals("")) { result = formAdapter.getWindowOpenerBuffer(); finished = true; } } else { if (WebComponentControl.openInNewWindow(form) || WebComponentControl.refreshWindow(form)) { result = "<meta http-equiv=\"refresh\" content=\"0; url=" + RenderUtil.createEncodedFormGetURL(form) + "\">"; formAdapter.addWindowOpenerBuffer(result); NoscriptFormStack.getInstance().push(activeForm); finished = true; } else { formAdapter.addWindowOpenerBuffer(""); } } } return result; }
private String getWindowCloser() { String result = ""; boolean isActiveForm = false; WebForm[] allForms = FormManager.getAll(); // remove all closed windows except the active window for (int i = 0; i < allForms.length; i++) { WebForm form = allForms[i]; if (form != FormManager.getActive()) { IWindow window = W4TContext.getWindowManager().findWindow(form); if (window != null && WindowManager.isClosing(window)) { NoscriptFormStack.getInstance().remove(form); } } } // 'close' active window IWindow activeWindow = WindowManager.getActive(); if (WindowManager.isClosing(activeWindow) && !WindowManager.isClosed(activeWindow)) { isActiveForm = true; NoscriptFormStack.getInstance().remove(FormManager.getActive()); WindowManager.setClosed(activeWindow, true); } // create meta tag to redirect to previous form if (isActiveForm && !NoscriptFormStack.getInstance().isEmpty()) { WebForm newForm = NoscriptFormStack.getInstance().pop(); result = "<meta http-equiv=\"refresh\" content=\"0; url=" + RenderUtil.createEncodedFormGetURL(newForm) + "\">"; } return result; }
public void render() { RenderUtil.setClearColor(Transform.getCamera().getPos().div(2048f).abs()); _shader.bind(); _shader.updateUniforms( _transform.getTransformation(), _transform.getProjectedTransformation(), _material); _mesh.draw(); }
/** * 创建灰度图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param pic 源图片 * @param srcX 处理块在源图片中的X偏移 * @param srcY 处理块在源图片中的Y偏移 * @param w 处理块宽度 * @param h 处理块高度 * @return */ public static Image createGray(Image pic, int srcX, int srcY, int w, int h) { int[] rgbData = new int[w * h]; pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } return Image.createRGBImage(rgbData, w, h, true); }
private static FrameworkResources loadPlatformResources(File resFolder, ILogger log) throws IOException, RenderingException { final FrameworkResources resources = new FrameworkResources(); final IAbstractFolder resFolderWrapper = new BufferingFolderWrapper(resFolder); RenderUtil.loadResources(resources, null, null, resFolderWrapper); resources.loadPublicResources(resFolderWrapper, log); return resources; }
/** * 绘制灰度变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 */ public static void drawGray( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY) { int[] rgbData = new int[w * h]; Image grayImg; pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } grayImg = Image.createRGBImage(rgbData, w, h, true); g.drawImage(grayImg, destX, destY, 0); }
/** * 逐行绘制灰度变换图像(J2ME中只支持PNG格式图片),内存不够时调用次方法,绘制效率偏低 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 */ public static void drawGrayByLine( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY) { int[] rgbData = new int[w]; for (int hd = h - 1; hd >= 0; --hd) { pic.getRGB(rgbData, 0, w, srcX, srcY + hd, w, 1); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnGray(rgbData[i]); } g.drawRGB(rgbData, 0, w, destX, destY + hd, w, 1, true); } }
/** * 创建透明变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param alpha alpha通道值 * @return */ public static Image createTransparence(Image pic, int srcX, int srcY, int w, int h, int alpha) { int[] rgbData = new int[w * h]; if (alpha < 0 || alpha > 255) { return null; } pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnTransparence(rgbData[i], alpha); } return Image.createRGBImage(rgbData, w, h, true); }
/** * 创建亮度变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param pic * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 * @param delta * @return */ public static Image createBright( Image pic, int srcX, int srcY, int w, int h, int destX, int destY, int delta) { int[] rgbData = new int[w * h]; if (delta == 0) { return null; } pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnBright(rgbData[i], delta); } return Image.createRGBImage(rgbData, w, h, true); }
/** * 逐行绘制透明变换图像(J2ME中只支持PNG格式图片),内存不够时调用次方法,绘制效率偏低 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 * @param alpha alpha通道值 */ public static void drawTransparenceByLine( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY, int alpha) { int[] rgbData = new int[w]; if (alpha < 0 || alpha > 255) { return; } for (int hd = h - 1; hd >= 0; --hd) { pic.getRGB(rgbData, 0, w, srcX, srcY + hd, w, 1); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnTransparence(rgbData[i], alpha); } g.drawRGB(rgbData, 0, w, destX, destY + hd, w, 1, true); } }
/** * 绘制亮度变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 * @param delta */ public static void drawBright( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY, int delta) { int[] rgbData = new int[w * h]; Image brightImg; if (delta == 0) { return; } pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnBright(rgbData[i], delta); } brightImg = Image.createRGBImage(rgbData, w, h, true); g.drawImage(brightImg, destX, destY, 0); }
/** * 逐行绘制亮度变换图像(J2ME中只支持PNG格式图片),内存不够时调用次方法,绘制效率偏低 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 * @param delta */ public static void drawBrightByLine( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY, int delta) { int[] rgbData = new int[w]; if (delta == 0) { return; } for (int hd = h - 1; hd >= 0; --hd) { pic.getRGB(rgbData, 0, w, srcX, srcY + hd, w, 1); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnBright(rgbData[i], delta); } g.drawRGB(rgbData, 0, w, destX, destY + hd, w, 1, true); } }
/** * 绘制透明变换图像(J2ME中只支持PNG格式图片),内存空间足够时调用此方法 * * @param g * @param pic 源图片 * @param srcX 绘制块在源图片的X偏移 * @param srcY 绘制块在源图片的Y偏移 * @param w 绘制宽度 * @param h 绘制高度 * @param destX 显示的X坐标 * @param destY 显示的Y坐标 * @param alpha alpha通道值 */ public static void drawTransparence( SGraphics g, Image pic, int srcX, int srcY, int w, int h, int destX, int destY, int alpha) { int[] rgbData = new int[w * h]; Image transparenceImg; if (alpha < 0 || alpha > 255) { return; } pic.getRGB(rgbData, 0, w, srcX, srcY, w, h); for (int i = rgbData.length - 1; i >= 0; --i) { rgbData[i] = RenderUtil.turnTransparence(rgbData[i], alpha); } transparenceImg = Image.createRGBImage(rgbData, w, h, true); g.drawImage(transparenceImg, destX, destY, 0); }
/** * Updates all Phong Shader uniforms * * @param worldMatrix * @param projectedMatrix * @param material */ @Override public void updateUniforms(Matrix4f worldMatrix, Matrix4f projectedMatrix, Material material) { if (material.getTexture() != null) { material.getTexture().bind(); } else { RenderUtil.unbindTextures(); } setUniform("transformProjected", projectedMatrix); setUniform("transform", worldMatrix); setUniform("baseColor", material.getColor()); setUniform("ambientLight", PhongShader.getAmbientLight()); setUniform("directionalLight", directionalLight); }