Fixed windowsgpu updates
This commit is contained in:
parent
64c5e5d072
commit
92354e8a08
4
Makefile
4
Makefile
@ -4,8 +4,8 @@
|
|||||||
PREFIX?=x86_64-linux-musl
|
PREFIX?=x86_64-linux-musl
|
||||||
|
|
||||||
CC = $(PREFIX)-gcc
|
CC = $(PREFIX)-gcc
|
||||||
CFLAGS?=-O2 -std=c99 -fdata-sections -ffunction-sections
|
CFLAGS?=-O2 -std=c99 -fdata-sections -ffunction-sections -pthread
|
||||||
LDFLAGS+= -O2 -Wl,--gc-sections -static -Ldependencies/lib-$(PREFIX)
|
LDFLAGS+= -O2 -Wl,--gc-sections -static -Ldependencies/lib-$(PREFIX) -pthread
|
||||||
|
|
||||||
# Project specific stuff
|
# Project specific stuff
|
||||||
BUILD = bin/
|
BUILD = bin/
|
||||||
|
@ -32,7 +32,6 @@ int event_pull(int timeout);
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
void winapigpu_init(lua_State* L);
|
void winapigpu_init(lua_State* L);
|
||||||
int winapigpu_events();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,10 +59,6 @@ static void add_events(struct timeval* timeout) {
|
|||||||
|
|
||||||
int event_pull(int _timeout) {
|
int event_pull(int _timeout) {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
#ifdef _WIN32
|
|
||||||
n = winapigpu_events();
|
|
||||||
if(n > 0) return n;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(_timeout > 0) { /* wait max this much time for event */
|
if(_timeout > 0) { /* wait max this much time for event */
|
||||||
struct timeval timeout = {_timeout / 1000, (_timeout % 1000) * 1000};
|
struct timeval timeout = {_timeout / 1000, (_timeout % 1000) * 1000};
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include <lualib.h>
|
#include <lualib.h>
|
||||||
#include <lauxlib.h>
|
#include <lauxlib.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#define BYPP 4
|
#define BYPP 4
|
||||||
#define RES_X 800
|
#define RES_X 800
|
||||||
@ -21,6 +23,7 @@
|
|||||||
|
|
||||||
#define uchar unsigned char
|
#define uchar unsigned char
|
||||||
|
|
||||||
|
HWND hwnd;
|
||||||
uchar *screenbb = NULL;
|
uchar *screenbb = NULL;
|
||||||
HBITMAP screenbmap = NULL;
|
HBITMAP screenbmap = NULL;
|
||||||
char *colbuf = 0;
|
char *colbuf = 0;
|
||||||
@ -72,6 +75,7 @@ static inline int win_draw_32(int x, int y, int bg, int fg, int chr, int cwd) {
|
|||||||
|
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||||
|
logn("win: Msg");
|
||||||
switch(msg) {
|
switch(msg) {
|
||||||
case WM_PAINT: {
|
case WM_PAINT: {
|
||||||
logn("win: PAINT");
|
logn("win: PAINT");
|
||||||
@ -107,13 +111,11 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int win_draw(int x, int y, int bg, int fg, int chr);
|
||||||
|
|
||||||
|
void* winapigpu_events(void* ign) {
|
||||||
|
|
||||||
static int l_open(lua_State *L) {
|
|
||||||
logn("win: INIT");
|
logn("win: INIT");
|
||||||
WNDCLASSEX wc;
|
WNDCLASSEX wc;
|
||||||
HWND hwnd;
|
|
||||||
|
|
||||||
wc.cbSize = sizeof(WNDCLASSEX);
|
wc.cbSize = sizeof(WNDCLASSEX);
|
||||||
wc.style = 0;
|
wc.style = 0;
|
||||||
@ -129,9 +131,7 @@ static int l_open(lua_State *L) {
|
|||||||
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
|
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
|
||||||
|
|
||||||
if(!RegisterClassEx(&wc)) {
|
if(!RegisterClassEx(&wc)) {
|
||||||
lua_pushboolean(L, 0);
|
return 0;
|
||||||
lua_pushstring(L, "Window registration failed");
|
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hwnd = CreateWindowEx(
|
hwnd = CreateWindowEx(
|
||||||
@ -143,9 +143,7 @@ static int l_open(lua_State *L) {
|
|||||||
NULL, NULL, GetModuleHandle(NULL), NULL);
|
NULL, NULL, GetModuleHandle(NULL), NULL);
|
||||||
|
|
||||||
if(hwnd == NULL) {
|
if(hwnd == NULL) {
|
||||||
lua_pushboolean(L, 0);
|
return 0;
|
||||||
lua_pushstring(L, "Window creation failed");
|
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowWindow(hwnd, SW_SHOW);
|
ShowWindow(hwnd, SW_SHOW);
|
||||||
@ -153,6 +151,27 @@ static int l_open(lua_State *L) {
|
|||||||
|
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
|
|
||||||
|
win_draw(0,0,0,0xFFFFFF,'H');
|
||||||
|
|
||||||
|
MSG Msg;
|
||||||
|
while(GetMessage(&Msg, NULL, 0, 0) > 0) {
|
||||||
|
TranslateMessage(&Msg);
|
||||||
|
DispatchMessage(&Msg);
|
||||||
|
}
|
||||||
|
logn("winapi quit!!");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int l_open(lua_State *L) {
|
||||||
|
pthread_t eventThread;
|
||||||
|
pthread_attr_t attr;
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_attr_setstacksize(&attr, 0x800000);
|
||||||
|
pthread_create(&eventThread, &attr, winapigpu_events, NULL);
|
||||||
|
pthread_attr_destroy(&attr);
|
||||||
|
|
||||||
|
struct timespec st = {.tv_sec = 0, .tv_nsec = 1000000};
|
||||||
|
while(!screenbb) nanosleep(&st, NULL);
|
||||||
lua_pushboolean(L, 1);
|
lua_pushboolean(L, 1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -217,7 +236,9 @@ static int l_put (lua_State *L) {
|
|||||||
int bg = lua_tonumber(L, 3);
|
int bg = lua_tonumber(L, 3);
|
||||||
int fg = lua_tonumber(L, 4);
|
int fg = lua_tonumber(L, 4);
|
||||||
int chr = lua_tonumber(L, 5);
|
int chr = lua_tonumber(L, 5);
|
||||||
return win_draw(x, y, bg, fg, chr);
|
win_draw(x, y, bg, fg, chr);
|
||||||
|
InvalidateRect(hwnd, NULL, FALSE);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int l_get_nearest (lua_State *L) {
|
static int l_get_nearest (lua_State *L) {
|
||||||
@ -276,6 +297,7 @@ static int l_copy (lua_State *L) {
|
|||||||
|
|
||||||
free(tmpcol);
|
free(tmpcol);
|
||||||
free(tmpchr);
|
free(tmpchr);
|
||||||
|
InvalidateRect(hwnd, NULL, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int l_fill (lua_State *L) {
|
static int l_fill (lua_State *L) {
|
||||||
@ -292,6 +314,7 @@ static int l_fill (lua_State *L) {
|
|||||||
win_draw(j, i, bg, fg, chr);
|
win_draw(j, i, bg, fg, chr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
InvalidateRect(hwnd, NULL, FALSE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,6 +332,7 @@ static int l_winfill (lua_State *L) {
|
|||||||
win_draw(j, i, bg, fg, chr);
|
win_draw(j, i, bg, fg, chr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
InvalidateRect(hwnd, NULL, FALSE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,13 +400,4 @@ void winapigpu_init(lua_State* L) {
|
|||||||
luaL_openlib(L, "winapigpu", winlib, 0);
|
luaL_openlib(L, "winapigpu", winlib, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int winapigpu_events() {
|
|
||||||
MSG Msg;
|
|
||||||
while(GetMessage(&Msg, NULL, 0, 0) > 0) {
|
|
||||||
TranslateMessage(&Msg);
|
|
||||||
DispatchMessage(&Msg);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user