use of com.sun.jna.platform.win32.GDI32 in project jna by java-native-access.
the class OpenGL32Test method testGetStringGLVersion.
public void testGetStringGLVersion() {
// create a dummy window
HWND hWnd = User32Util.createWindow("Message", null, 0, 0, 0, 0, 0, null, null, null, null);
HDC hdc = User32.INSTANCE.GetDC(hWnd);
// set a compatible pixel format
PIXELFORMATDESCRIPTOR.ByReference pfd = new PIXELFORMATDESCRIPTOR.ByReference();
pfd.nVersion = 1;
pfd.dwFlags = WinGDI.PFD_DRAW_TO_WINDOW | WinGDI.PFD_SUPPORT_OPENGL | WinGDI.PFD_DOUBLEBUFFER;
pfd.iPixelType = WinGDI.PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = WinGDI.PFD_MAIN_PLANE;
GDI32.INSTANCE.SetPixelFormat(hdc, GDI32.INSTANCE.ChoosePixelFormat(hdc, pfd), pfd);
// create the OpenGL context
WinDef.HGLRC hGLRC = OpenGL32.INSTANCE.wglCreateContext(hdc);
OpenGL32.INSTANCE.wglMakeCurrent(hdc, hGLRC);
String glString = OpenGL32.INSTANCE.glGetString(GL.GL_VERSION);
System.out.println("GL_VERSION=" + glString);
OpenGL32.INSTANCE.wglDeleteContext(hGLRC);
// destroy the window
User32.INSTANCE.ReleaseDC(hWnd, hdc);
User32Util.destroyWindow(hWnd);
assertNotNull("Could not get GL_VERSION", glString);
}
use of com.sun.jna.platform.win32.GDI32 in project jna by java-native-access.
the class OpenGL32Test method testGetStringGLRenderer.
public void testGetStringGLRenderer() {
// create a dummy window
HWND hWnd = User32Util.createWindow("Message", null, 0, 0, 0, 0, 0, null, null, null, null);
HDC hdc = User32.INSTANCE.GetDC(hWnd);
// set a compatible pixel format
PIXELFORMATDESCRIPTOR.ByReference pfd = new PIXELFORMATDESCRIPTOR.ByReference();
pfd.nVersion = 1;
pfd.dwFlags = WinGDI.PFD_DRAW_TO_WINDOW | WinGDI.PFD_SUPPORT_OPENGL | WinGDI.PFD_DOUBLEBUFFER;
pfd.iPixelType = WinGDI.PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = WinGDI.PFD_MAIN_PLANE;
GDI32.INSTANCE.SetPixelFormat(hdc, GDI32.INSTANCE.ChoosePixelFormat(hdc, pfd), pfd);
// create the OpenGL context
WinDef.HGLRC hGLRC = OpenGL32.INSTANCE.wglCreateContext(hdc);
OpenGL32.INSTANCE.wglMakeCurrent(hdc, hGLRC);
String glString = OpenGL32.INSTANCE.glGetString(GL.GL_RENDERER);
System.out.println("GL_RENDERER=" + glString);
OpenGL32.INSTANCE.wglDeleteContext(hGLRC);
// destroy the window
User32.INSTANCE.ReleaseDC(hWnd, hdc);
User32Util.destroyWindow(hWnd);
//assertNotNull("Could not get GL_RENDERER", glString);
}
use of com.sun.jna.platform.win32.GDI32 in project jna by java-native-access.
the class GDI32Test method testGetObject.
public void testGetObject() throws Exception {
final ICONINFO iconInfo = new ICONINFO();
final HANDLE hImage = User32.INSTANCE.LoadImage(null, new File(getClass().getResource("/res/test_icon.ico").toURI()).getAbsolutePath(), WinUser.IMAGE_ICON, 0, 0, WinUser.LR_LOADFROMFILE);
try {
// obtain test icon from classpath
if (!User32.INSTANCE.GetIconInfo(new HICON(hImage), iconInfo))
throw new Exception("Invocation of User32.GetIconInfo() failed: " + Kernel32Util.getLastErrorMessage());
iconInfo.read();
// test GetObject method
BITMAP bmp = new BITMAP();
int nWrittenBytes = GDI32.INSTANCE.GetObject(iconInfo.hbmColor, bmp.size(), bmp.getPointer());
bmp.read();
if (nWrittenBytes <= 0)
throw new Exception("Detection of bitmap information failed: " + Kernel32Util.getLastErrorMessage());
// verify that bitmap information was successfully detected
assertEquals(32, bmp.bmHeight.intValue());
assertEquals(32, bmp.bmWidth.intValue());
} finally {
if (iconInfo.hbmColor != null && iconInfo.hbmColor.getPointer() != Pointer.NULL)
GDI32.INSTANCE.DeleteObject(iconInfo.hbmColor);
if (iconInfo.hbmMask != null && iconInfo.hbmMask.getPointer() != Pointer.NULL)
GDI32.INSTANCE.DeleteObject(iconInfo.hbmMask);
}
}
use of com.sun.jna.platform.win32.GDI32 in project jna by java-native-access.
the class OpenGL32Util method countGpusNV.
/**
* Count GPUs
* @return the number of available GPUs
*/
public static int countGpusNV() {
// create a dummy window
HWND hWnd = User32Util.createWindow("Message", null, 0, 0, 0, 0, 0, null, null, null, null);
HDC hdc = User32.INSTANCE.GetDC(hWnd);
// set a compatible pixel format
PIXELFORMATDESCRIPTOR.ByReference pfd = new PIXELFORMATDESCRIPTOR.ByReference();
pfd.nVersion = 1;
pfd.dwFlags = WinGDI.PFD_DRAW_TO_WINDOW | WinGDI.PFD_SUPPORT_OPENGL | WinGDI.PFD_DOUBLEBUFFER;
pfd.iPixelType = WinGDI.PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = WinGDI.PFD_MAIN_PLANE;
GDI32.INSTANCE.SetPixelFormat(hdc, GDI32.INSTANCE.ChoosePixelFormat(hdc, pfd), pfd);
// create the OpenGL context to get function address
WinDef.HGLRC hGLRC = OpenGL32.INSTANCE.wglCreateContext(hdc);
OpenGL32.INSTANCE.wglMakeCurrent(hdc, hGLRC);
Pointer funcPointer = OpenGL32.INSTANCE.wglGetProcAddress("wglEnumGpusNV");
Function fncEnumGpusNV = (funcPointer == null) ? null : Function.getFunction(funcPointer);
OpenGL32.INSTANCE.wglDeleteContext(hGLRC);
// destroy the window
User32.INSTANCE.ReleaseDC(hWnd, hdc);
User32Util.destroyWindow(hWnd);
// abort if the nVidia extensions are not present
if (fncEnumGpusNV == null)
return 0;
// enumerate nVidia adapters
HGLRCByReference hGPU = new HGLRCByReference();
for (int i = 0; i < 16; i++) {
Boolean ok = (Boolean) fncEnumGpusNV.invoke(Boolean.class, new Object[] { Integer.valueOf(i), hGPU });
if (!ok.booleanValue())
return i;
}
return 0;
}
use of com.sun.jna.platform.win32.GDI32 in project jna by java-native-access.
the class AlphaMaskDemo method updateW32.
private void updateW32(boolean a, boolean i) {
User32 user = User32.INSTANCE;
GDI32 gdi = GDI32.INSTANCE;
HWND hWnd = null;
if (!alphaWindow.isDisplayable()) {
alphaWindow.pack();
hWnd = getHwnd(alphaWindow);
int flags = user.GetWindowLong(hWnd, WinUser.GWL_EXSTYLE);
flags |= WinUser.WS_EX_LAYERED;
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
Window parent = alphaWindow.getOwner();
Point where = parent.getLocationOnScreen();
where.translate(parent.getWidth(), 0);
alphaWindow.setLocation(where);
} else {
hWnd = getHwnd(alphaWindow);
}
if (i) {
int w = image.getWidth(null);
int h = image.getHeight(null);
HDC screenDC = user.GetDC(null);
HDC memDC = gdi.CreateCompatibleDC(screenDC);
HBITMAP hBitmap = null;
HANDLE oldBitmap = null;
try {
BufferedImage buf = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = buf.getGraphics();
g.drawImage(image, 0, 0, w, h, null);
BITMAPINFO bmi = new BITMAPINFO();
bmi.bmiHeader.biWidth = w;
bmi.bmiHeader.biHeight = h;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = WinGDI.BI_RGB;
bmi.bmiHeader.biSizeImage = w * h * 4;
PointerByReference ppbits = new PointerByReference();
hBitmap = gdi.CreateDIBSection(memDC, bmi, WinGDI.DIB_RGB_COLORS, ppbits, null, 0);
oldBitmap = gdi.SelectObject(memDC, hBitmap);
Pointer pbits = ppbits.getValue();
Raster raster = buf.getData();
int[] pixel = new int[4];
int[] bits = new int[w * h];
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
raster.getPixel(x, h - y - 1, pixel);
int alpha = (pixel[3] & 0xFF) << 24;
int red = (pixel[2] & 0xFF);
int green = (pixel[1] & 0xFF) << 8;
int blue = (pixel[0] & 0xFF) << 16;
bits[x + y * w] = alpha | red | green | blue;
}
}
pbits.write(0, bits, 0, bits.length);
SIZE size = new SIZE();
size.cx = w;
size.cy = h;
POINT loc = new POINT();
loc.x = alphaWindow.getX();
loc.y = alphaWindow.getY();
POINT srcLoc = new POINT();
BLENDFUNCTION blend = new BLENDFUNCTION();
blend.SourceConstantAlpha = (byte) (alpha * 255);
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
user.UpdateLayeredWindow(hWnd, screenDC, loc, size, memDC, srcLoc, 0, blend, WinUser.ULW_ALPHA);
} finally {
user.ReleaseDC(null, screenDC);
if (hBitmap != null) {
gdi.SelectObject(memDC, oldBitmap);
gdi.DeleteObject(hBitmap);
}
gdi.DeleteDC(memDC);
}
} else if (a) {
BLENDFUNCTION blend = new BLENDFUNCTION();
blend.SourceConstantAlpha = (byte) (alpha * 255);
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
user.UpdateLayeredWindow(hWnd, null, null, null, null, null, 0, blend, WinUser.ULW_ALPHA);
}
if (!alphaWindow.isVisible()) {
alphaWindow.setVisible(true);
}
}
Aggregations