Directly using VirtualBox from Java #5
3 changed files with 42 additions and 3 deletions
|
@ -1,5 +1,27 @@
|
|||
package sznp.virtualcomputer;
|
||||
|
||||
public interface PXCLib {
|
||||
/**
|
||||
* Testing only
|
||||
* @param px Input array
|
||||
* @param out Output array
|
||||
* @return 0
|
||||
*/
|
||||
int convert(int[] px, long[] out);
|
||||
|
||||
/**
|
||||
* Set source bitmap
|
||||
* @param address Bitmap address from VirtualBox
|
||||
* @param w Width of the screen
|
||||
* @param h Height of the screen
|
||||
* @param mc Total count of maps used for the screen
|
||||
*/
|
||||
void setSource(long address, int w, int h, int mc);
|
||||
|
||||
/**
|
||||
* Updates map and returns it's content
|
||||
* @param mapnum Number of the map (0 is first)
|
||||
* @return Address of the map data
|
||||
*/
|
||||
long updateAndGetMap(short mapnum); //TODO: Only update parts that actually updated and return them per-map (flagDirty)
|
||||
}
|
||||
|
|
|
@ -14,6 +14,6 @@ public class Test {
|
|||
ByteBuffer bb = ByteBuffer.allocateDirect(2);
|
||||
long[] x = new long[]{Pointer.nativeValue(Native.getDirectBufferPointer(bb))};
|
||||
pxc.convert(new int[]{5, 10}, x);
|
||||
System.out.println(bb.get(0)); //19 AYY
|
||||
System.out.println(bb.get(0)); //19 AYY //TO!DO: Use setSource, we don't want to wrap the native array
|
||||
}
|
||||
}
|
||||
|
|
21
libpxc/pxc.c
21
libpxc/pxc.c
|
@ -1,13 +1,30 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef long long int lli;
|
||||
#define MAPSIZE 128
|
||||
|
||||
typedef long long int addr;
|
||||
|
||||
void* image=NULL;
|
||||
const void* maps=NULL; //Per map data (1st map, second map etc.)
|
||||
|
||||
void setSource(lli address) {
|
||||
int width, height, mapc;
|
||||
|
||||
void setSource(addr address, int w, int h, int mc) {
|
||||
image=(void*)address;
|
||||
maps=malloc(MAPSIZE*MAPSIZE*mc); //1 byte per pixel
|
||||
width=w, height=h, mapc=mc;
|
||||
}
|
||||
|
||||
//May return 0
|
||||
addr updateAndGetMap(short mapnum) {
|
||||
if(mapnum<0||mapnum>=mapc) return 0; //Out of bounds
|
||||
//TODO: Converter
|
||||
//return (long)map+mapx*MAPSIZE + mapy*MAPSIZE*width; - not good, we need to order the data per map
|
||||
return (long)maps + MAPSIZE*MAPSIZE*mapnum;
|
||||
}
|
||||
|
||||
//Testing only
|
||||
int convert(int px[], int *out[]) {
|
||||
printf("convert...\n");
|
||||
printf("px0: %d\n", px[0]);
|
||||
|
|
Loading…
Reference in a new issue