implemented supporting the OffscreenSurface context.
This commit is contained in:
parent
13eec17ddd
commit
544d94aed7
@ -32,34 +32,6 @@
|
|||||||
|
|
||||||
package com.jme3.system.lwjgl;
|
package com.jme3.system.lwjgl;
|
||||||
|
|
||||||
import com.jme3.input.JoyInput;
|
|
||||||
import com.jme3.input.KeyInput;
|
|
||||||
import com.jme3.input.MouseInput;
|
|
||||||
import com.jme3.input.TouchInput;
|
|
||||||
import com.jme3.input.lwjgl.GlfwJoystickInput;
|
|
||||||
import com.jme3.input.lwjgl.GlfwKeyInput;
|
|
||||||
import com.jme3.input.lwjgl.GlfwMouseInput;
|
|
||||||
import com.jme3.system.AppSettings;
|
|
||||||
import com.jme3.system.JmeContext;
|
|
||||||
import com.jme3.system.JmeSystem;
|
|
||||||
import com.jme3.system.NanoTimer;
|
|
||||||
import com.jme3.util.BufferUtils;
|
|
||||||
|
|
||||||
import org.lwjgl.Version;
|
|
||||||
import org.lwjgl.glfw.GLFWErrorCallback;
|
|
||||||
import org.lwjgl.glfw.GLFWImage;
|
|
||||||
import org.lwjgl.glfw.GLFWVidMode;
|
|
||||||
import org.lwjgl.glfw.GLFWWindowFocusCallback;
|
|
||||||
import org.lwjgl.glfw.GLFWWindowSizeCallback;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.IntBuffer;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_ALPHA_BITS;
|
import static org.lwjgl.glfw.GLFW.GLFW_ALPHA_BITS;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_BLUE_BITS;
|
import static org.lwjgl.glfw.GLFW.GLFW_BLUE_BITS;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR;
|
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR;
|
||||||
@ -102,6 +74,33 @@ import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose;
|
|||||||
import static org.lwjgl.opengl.GL11.GL_FALSE;
|
import static org.lwjgl.opengl.GL11.GL_FALSE;
|
||||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||||
|
|
||||||
|
import com.jme3.input.JoyInput;
|
||||||
|
import com.jme3.input.KeyInput;
|
||||||
|
import com.jme3.input.MouseInput;
|
||||||
|
import com.jme3.input.TouchInput;
|
||||||
|
import com.jme3.input.lwjgl.GlfwJoystickInput;
|
||||||
|
import com.jme3.input.lwjgl.GlfwKeyInput;
|
||||||
|
import com.jme3.input.lwjgl.GlfwMouseInput;
|
||||||
|
import com.jme3.system.AppSettings;
|
||||||
|
import com.jme3.system.JmeContext;
|
||||||
|
import com.jme3.system.JmeSystem;
|
||||||
|
import com.jme3.system.NanoTimer;
|
||||||
|
import com.jme3.util.BufferUtils;
|
||||||
|
|
||||||
|
import org.lwjgl.Version;
|
||||||
|
import org.lwjgl.glfw.GLFWErrorCallback;
|
||||||
|
import org.lwjgl.glfw.GLFWImage;
|
||||||
|
import org.lwjgl.glfw.GLFWVidMode;
|
||||||
|
import org.lwjgl.glfw.GLFWWindowFocusCallback;
|
||||||
|
import org.lwjgl.glfw.GLFWWindowSizeCallback;
|
||||||
|
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapper class over the GLFW framework in LWJGL 3.
|
* A wrapper class over the GLFW framework in LWJGL 3.
|
||||||
*
|
*
|
||||||
@ -316,9 +315,10 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
|
|||||||
glfwSwapInterval(0);
|
glfwSwapInterval(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setWindowIcon(settings);
|
if(type != Type.OffscreenSurface) {
|
||||||
|
setWindowIcon(settings);
|
||||||
glfwShowWindow(window);
|
glfwShowWindow(window);
|
||||||
|
}
|
||||||
|
|
||||||
allowSwapBuffers = settings.isSwapBuffers();
|
allowSwapBuffers = settings.isSwapBuffers();
|
||||||
}
|
}
|
||||||
@ -378,10 +378,6 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
|
|||||||
image = convertedImage;
|
image = convertedImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
final IntBuffer w = BufferUtils.createIntBuffer(1);
|
|
||||||
final IntBuffer h = BufferUtils.createIntBuffer(1);
|
|
||||||
final IntBuffer comp = BufferUtils.createIntBuffer(1);
|
|
||||||
|
|
||||||
final ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4);
|
final ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4);
|
||||||
|
|
||||||
for (int i = 0; i < image.getHeight(); i++) {
|
for (int i = 0; i < image.getHeight(); i++) {
|
||||||
@ -478,13 +474,13 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
|
|||||||
|
|
||||||
created.set(true);
|
created.set(true);
|
||||||
super.internalCreate();
|
super.internalCreate();
|
||||||
|
|
||||||
//create OpenCL
|
//create OpenCL
|
||||||
//Must be done here because the window handle is needed
|
//Must be done here because the window handle is needed
|
||||||
if (settings.isOpenCLSupport()) {
|
if (settings.isOpenCLSupport()) {
|
||||||
initOpenCL(window);
|
initOpenCL(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
try {
|
try {
|
||||||
if (window != NULL) {
|
if (window != NULL) {
|
||||||
@ -666,44 +662,4 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
|
|||||||
public long getWindowHandle() {
|
public long getWindowHandle() {
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Implement support for window icon when GLFW supports it.
|
|
||||||
|
|
||||||
private ByteBuffer[] imagesToByteBuffers(Object[] images) {
|
|
||||||
ByteBuffer[] out = new ByteBuffer[images.length];
|
|
||||||
for (int i = 0; i < images.length; i++) {
|
|
||||||
BufferedImage image = (BufferedImage) images[i];
|
|
||||||
out[i] = imageToByteBuffer(image);
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ByteBuffer imageToByteBuffer(BufferedImage image) {
|
|
||||||
if (image.getType() != BufferedImage.TYPE_INT_ARGB_PRE) {
|
|
||||||
BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);
|
|
||||||
Graphics2D g = convertedImage.createGraphics();
|
|
||||||
double width = image.getWidth() * (double) 1;
|
|
||||||
double height = image.getHeight() * (double) 1;
|
|
||||||
g.drawImage(image, (int) ((convertedImage.getWidth() - width) / 2),
|
|
||||||
(int) ((convertedImage.getHeight() - height) / 2),
|
|
||||||
(int) (width), (int) (height), null);
|
|
||||||
g.dispose();
|
|
||||||
image = convertedImage;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] imageBuffer = new byte[image.getWidth() * image.getHeight() * 4];
|
|
||||||
int counter = 0;
|
|
||||||
for (int i = 0; i < image.getHeight(); i++) {
|
|
||||||
for (int j = 0; j < image.getWidth(); j++) {
|
|
||||||
int colorSpace = image.getRGB(j, i);
|
|
||||||
imageBuffer[counter + 0] = (byte) ((colorSpace << 8) >> 24);
|
|
||||||
imageBuffer[counter + 1] = (byte) ((colorSpace << 16) >> 24);
|
|
||||||
imageBuffer[counter + 2] = (byte) ((colorSpace << 24) >> 24);
|
|
||||||
imageBuffer[counter + 3] = (byte) (colorSpace >> 24);
|
|
||||||
counter += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ByteBuffer.wrap(imageBuffer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user